[Libreoffice-commits] core.git: ucb/source
Arkadiy Illarionov (via logerrit)
logerrit at kemper.freedesktop.org
Sun Jun 30 10:41:32 UTC 2019
ucb/source/cacher/dynamicresultsetwrapper.cxx | 6
ucb/source/core/FileAccess.cxx | 12 -
ucb/source/core/ucb.cxx | 17 -
ucb/source/core/ucbcmds.cxx | 198 +++++++++--------------
ucb/source/core/ucbprops.cxx | 14 -
ucb/source/core/ucbstore.cxx | 15 -
ucb/source/sorter/sortdynres.cxx | 3
ucb/source/ucp/cmis/cmis_content.cxx | 75 +++-----
ucb/source/ucp/cmis/cmis_repo_content.cxx | 10 -
ucb/source/ucp/ext/ucpext_content.cxx | 15 -
ucb/source/ucp/file/bc.cxx | 26 +--
ucb/source/ucp/file/filcmd.cxx | 28 +--
ucb/source/ucp/file/filnot.cxx | 23 +-
ucb/source/ucp/file/filprp.cxx | 13 -
ucb/source/ucp/file/filrset.cxx | 30 +--
ucb/source/ucp/file/filtask.cxx | 78 ++++-----
ucb/source/ucp/file/prov.cxx | 13 -
ucb/source/ucp/ftp/ftpcontent.cxx | 45 ++---
ucb/source/ucp/ftp/ftpresultsetI.cxx | 22 +-
ucb/source/ucp/ftp/ftpresultsetbase.cxx | 13 -
ucb/source/ucp/gio/gio_content.cxx | 10 -
ucb/source/ucp/hierarchy/hierarchycontent.cxx | 19 --
ucb/source/ucp/package/pkgcontent.cxx | 17 -
ucb/source/ucp/tdoc/tdoc_content.cxx | 17 -
ucb/source/ucp/webdav-neon/ContentProperties.cxx | 15 -
ucb/source/ucp/webdav-neon/DAVResourceAccess.cxx | 6
ucb/source/ucp/webdav-neon/LinkSequence.cxx | 19 --
ucb/source/ucp/webdav-neon/NeonSession.cxx | 22 --
ucb/source/ucp/webdav-neon/webdavcontent.cxx | 53 ++----
29 files changed, 326 insertions(+), 508 deletions(-)
New commits:
commit 02872ceafb8adca47cce856d0e44107494ba2e21
Author: Arkadiy Illarionov <qarkai at gmail.com>
AuthorDate: Sat Jun 29 22:24:22 2019 +0300
Commit: Arkadiy Illarionov <qarkai at gmail.com>
CommitDate: Sun Jun 30 12:40:20 2019 +0200
Simplify Sequence iterations in ucb
Use range-based loops or replace with STL functions
Change-Id: I755dec47aeeed879a032eecd50dee585c392ec59
Reviewed-on: https://gerrit.libreoffice.org/74915
Tested-by: Jenkins
Reviewed-by: Arkadiy Illarionov <qarkai at gmail.com>
diff --git a/ucb/source/cacher/dynamicresultsetwrapper.cxx b/ucb/source/cacher/dynamicresultsetwrapper.cxx
index fc6d0dbf90de..042a63c57c55 100644
--- a/ucb/source/cacher/dynamicresultsetwrapper.cxx
+++ b/ucb/source/cacher/dynamicresultsetwrapper.cxx
@@ -223,9 +223,11 @@ void DynamicResultSetWrapper::impl_notify( const ListEvent& Changes )
{
osl::Guard< osl::Mutex > aGuard( m_aMutex );
- for( long i=0; !m_bGotWelcome && i<Changes.Changes.getLength(); i++ )
+ for( ListAction& rAction : aNewEvent.Changes )
{
- ListAction& rAction = aNewEvent.Changes[i];
+ if (m_bGotWelcome)
+ break;
+
switch( rAction.ListActionType )
{
case ListActionType::WELCOME:
diff --git a/ucb/source/core/FileAccess.cxx b/ucb/source/core/FileAccess.cxx
index dcb37a713b68..34da0292938a 100644
--- a/ucb/source/core/FileAccess.cxx
+++ b/ucb/source/core/FileAccess.cxx
@@ -355,14 +355,10 @@ void OFileAccess::createFolder( const OUString& NewFolderURL )
ucbhelper::Content aCnt( aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ), mxEnvironment.get(), comphelper::getProcessComponentContext() );
Sequence< ContentInfo > aInfo = aCnt.queryCreatableContentsInfo();
- sal_Int32 nCount = aInfo.getLength();
- if ( nCount == 0 )
- return;
- for ( sal_Int32 i = 0; i < nCount; ++i )
+ for ( const ContentInfo & rCurr : aInfo )
{
// Simply look for the first KIND_FOLDER...
- const ContentInfo & rCurr = aInfo[i];
if ( rCurr.Attributes & ContentInfoAttribute::KIND_FOLDER )
{
// Make sure the only required bootstrap property is "Title",
@@ -591,13 +587,9 @@ bool OFileAccess::createNewFile( const OUString & rParentURL,
ucbhelper::Content aParentCnt( rParentURL, mxEnvironment.get(), comphelper::getProcessComponentContext() );
Sequence< ContentInfo > aInfo = aParentCnt.queryCreatableContentsInfo();
- sal_Int32 nCount = aInfo.getLength();
- if ( nCount == 0 )
- return false;
- for ( sal_Int32 i = 0; i < nCount; ++i )
+ for ( const ContentInfo & rCurr : aInfo )
{
- const ContentInfo & rCurr = aInfo[i];
if ( ( rCurr.Attributes
& ContentInfoAttribute::KIND_DOCUMENT ) &&
( rCurr.Attributes
diff --git a/ucb/source/core/ucb.cxx b/ucb/source/core/ucb.cxx
index 907cef806449..1246d6483051 100644
--- a/ucb/source/core/ucb.cxx
+++ b/ucb/source/core/ucb.cxx
@@ -710,21 +710,16 @@ void SAL_CALL UniversalContentBroker::abort( sal_Int32 )
// virtual
void SAL_CALL UniversalContentBroker::changesOccurred( const util::ChangesEvent& Event )
{
- sal_Int32 nCount = Event.Changes.getLength();
- if ( nCount )
+ if ( Event.Changes.hasElements() )
{
uno::Reference< container::XHierarchicalNameAccess > xHierNameAccess;
Event.Base >>= xHierNameAccess;
OSL_ASSERT( xHierNameAccess.is() );
- const util::ElementChange* pElementChanges
- = Event.Changes.getConstArray();
-
ContentProviderDataList aData;
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const util::ElementChange& rElem : Event.Changes )
{
- const util::ElementChange& rElem = pElementChanges[ n ];
OUString aKey;
rElem.Accessor >>= aKey;
@@ -870,16 +865,14 @@ bool UniversalContentBroker::getContentProviderData(
xInterface, uno::UNO_QUERY_THROW );
uno::Sequence< OUString > aElems = xNameAccess->getElementNames();
- const OUString* pElems = aElems.getConstArray();
- sal_Int32 nCount = aElems.getLength();
- if ( nCount > 0 )
+ if ( aElems.hasElements() )
{
uno::Reference< container::XHierarchicalNameAccess >
xHierNameAccess( xInterface, uno::UNO_QUERY_THROW );
// Iterate over children.
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const auto& rElem : aElems )
{
try
@@ -889,7 +882,7 @@ bool UniversalContentBroker::getContentProviderData(
OUStringBuffer aElemBuffer;
aElemBuffer.append( "['" );
- makeAndAppendXMLName( aElemBuffer, pElems[ n ] );
+ makeAndAppendXMLName( aElemBuffer, rElem );
aElemBuffer.append( "']" );
OSL_VERIFY(
diff --git a/ucb/source/core/ucbcmds.cxx b/ucb/source/core/ucbcmds.cxx
index c7c62dfc374c..ebef83f92ae7 100644
--- a/ucb/source/core/ucbcmds.cxx
+++ b/ucb/source/core/ucbcmds.cxx
@@ -247,11 +247,10 @@ CommandProcessorInfo::getCommands()
ucb::CommandInfo SAL_CALL
CommandProcessorInfo::getCommandInfoByName( const OUString& Name )
{
- for ( sal_Int32 n = 0; n < m_pInfo->getLength(); ++n )
- {
- if ( (*m_pInfo)[ n ].Name == Name )
- return (*m_pInfo)[ n ];
- }
+ auto pInfo = std::find_if(m_pInfo->begin(), m_pInfo->end(),
+ [&Name](const ucb::CommandInfo& rInfo) { return rInfo.Name == Name; });
+ if (pInfo != m_pInfo->end())
+ return *pInfo;
throw ucb::UnsupportedCommandException();
}
@@ -261,11 +260,10 @@ CommandProcessorInfo::getCommandInfoByName( const OUString& Name )
ucb::CommandInfo SAL_CALL
CommandProcessorInfo::getCommandInfoByHandle( sal_Int32 Handle )
{
- for ( sal_Int32 n = 0; n < m_pInfo->getLength(); ++n )
- {
- if ( (*m_pInfo)[ n ].Handle == Handle )
- return (*m_pInfo)[ n ];
- }
+ auto pInfo = std::find_if(m_pInfo->begin(), m_pInfo->end(),
+ [&Handle](const ucb::CommandInfo& rInfo) { return rInfo.Handle == Handle; });
+ if (pInfo != m_pInfo->end())
+ return *pInfo;
throw ucb::UnsupportedCommandException();
}
@@ -275,26 +273,16 @@ CommandProcessorInfo::getCommandInfoByHandle( sal_Int32 Handle )
sal_Bool SAL_CALL CommandProcessorInfo::hasCommandByName(
const OUString& Name )
{
- for ( sal_Int32 n = 0; n < m_pInfo->getLength(); ++n )
- {
- if ( (*m_pInfo)[ n ].Name == Name )
- return true;
- }
-
- return false;
+ return std::any_of(m_pInfo->begin(), m_pInfo->end(),
+ [&Name](const ucb::CommandInfo& rInfo) { return rInfo.Name == Name; });
}
// virtual
sal_Bool SAL_CALL CommandProcessorInfo::hasCommandByHandle( sal_Int32 Handle )
{
- for ( sal_Int32 n = 0; n < m_pInfo->getLength(); ++n )
- {
- if ( (*m_pInfo)[ n ].Handle == Handle )
- return true;
- }
-
- return false;
+ return std::any_of(m_pInfo->begin(), m_pInfo->end(),
+ [&Handle](const ucb::CommandInfo& rInfo) { return rInfo.Handle == Handle; });
}
@@ -565,8 +553,7 @@ uno::Reference< ucb::XContent > createNew(
aTypesInfo = xCreator->queryCreatableContentsInfo();
}
- sal_Int32 nCount = aTypesInfo.getLength();
- if ( !nCount )
+ if ( !aTypesInfo.hasElements() )
{
uno::Sequence<uno::Any> aArgs(comphelper::InitAnyPropertySequence(
{
@@ -581,116 +568,87 @@ uno::Reference< ucb::XContent > createNew(
// Unreachable
}
-
// (2) Try to find a matching target type for the source object.
+ std::function<bool(const sal_Int32)> lCompare;
- uno::Reference< ucb::XContent > xNew;
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ if ( rContext.aArg.Operation == ucb::TransferCommandOperation_LINK )
{
- sal_Int32 nAttribs = aTypesInfo[ n ].Attributes;
- bool bMatch = false;
-
- if ( rContext.aArg.Operation == ucb::TransferCommandOperation_LINK )
+ // Create link
+ lCompare = [](const sal_Int32 nAttribs) { return !!( nAttribs & ucb::ContentInfoAttribute::KIND_LINK ); };
+ }
+ else if ( ( rContext.aArg.Operation == ucb::TransferCommandOperation_COPY ) ||
+ ( rContext.aArg.Operation == ucb::TransferCommandOperation_MOVE ) )
+ {
+ // Copy / Move
+ // Is source a link? Create link in target folder then.
+ if ( bSourceIsLink )
{
- // Create link
-
- if ( nAttribs & ucb::ContentInfoAttribute::KIND_LINK )
- {
- // Match!
- bMatch = true;
- }
+ lCompare = [](const sal_Int32 nAttribs) { return !!( nAttribs & ucb::ContentInfoAttribute::KIND_LINK ); };
}
- else if ( ( rContext.aArg.Operation
- == ucb::TransferCommandOperation_COPY ) ||
- ( rContext.aArg.Operation
- == ucb::TransferCommandOperation_MOVE ) )
+ else
{
- // Copy / Move
+ // (not a and not b) or (a and b)
+ // not( a or b) or (a and b)
+ lCompare = [bSourceIsFolder, bSourceIsDocument](const sal_Int32 nAttribs) {
+ return ( bSourceIsFolder == !!( nAttribs & ucb::ContentInfoAttribute::KIND_FOLDER ) )
+ && ( bSourceIsDocument == !!( nAttribs & ucb::ContentInfoAttribute::KIND_DOCUMENT ) ) ;
+ };
+ }
+ }
+ else
+ {
+ ucbhelper::cancelCommandExecution(
+ uno::makeAny( lang::IllegalArgumentException(
+ "Unknown transfer operation!",
+ rContext.xProcessor,
+ -1 ) ),
+ rContext.xOrigEnv );
+ // Unreachable
+ }
- // Is source a link? Create link in target folder then.
- if ( bSourceIsLink )
- {
- if ( nAttribs & ucb::ContentInfoAttribute::KIND_LINK )
- {
- // Match!
- bMatch = true;
- }
- }
- else
- {
- // (not a and not b) or (a and b)
- // not( a or b) or (a and b)
-
- if ( ( bSourceIsFolder ==
- !!( nAttribs
- & ucb::ContentInfoAttribute::KIND_FOLDER ) )
- &&
- ( bSourceIsDocument ==
- !!( nAttribs
- & ucb::ContentInfoAttribute::KIND_DOCUMENT ) )
- )
- {
- // Match!
- bMatch = true;
- }
- }
+ uno::Reference< ucb::XContent > xNew;
+ auto pTypeInfo = std::find_if(aTypesInfo.begin(), aTypesInfo.end(),
+ [&lCompare](const ucb::ContentInfo& rTypeInfo) { return lCompare(rTypeInfo.Attributes); });
+ if (pTypeInfo != aTypesInfo.end())
+ {
+ // (3) Create a new, empty object of matched type.
+
+ if ( !xCreator.is() )
+ {
+ // First, try it using "CreatabeleContentsInfo" property and
+ // "createNewContent" command -> the "new" way.
+ ucb::Command aCreateNewCommand(
+ "createNewContent",
+ -1,
+ uno::makeAny( *pTypeInfo ) );
+
+ xCommandProcessorT->execute( aCreateNewCommand, 0, rContext.xEnv )
+ >>= xNew;
}
else
{
- ucbhelper::cancelCommandExecution(
- uno::makeAny( lang::IllegalArgumentException(
- "Unknown transfer operation!",
- rContext.xProcessor,
- -1 ) ),
- rContext.xOrigEnv );
- // Unreachable
+ // Second, try it using XContentCreator interface -> the "old"
+ // way (not providing the chance to supply an XCommandEnvironment.
+
+ xNew = xCreator->createNewContent( *pTypeInfo );
}
- if ( bMatch )
+ if ( !xNew.is() )
{
-
-
- // (3) Create a new, empty object of matched type.
-
-
- if ( !xCreator.is() )
- {
- // First, try it using "CreatabeleContentsInfo" property and
- // "createNewContent" command -> the "new" way.
- ucb::Command aCreateNewCommand(
- "createNewContent",
- -1,
- uno::makeAny( aTypesInfo[ n ] ) );
-
- xCommandProcessorT->execute( aCreateNewCommand, 0, rContext.xEnv )
- >>= xNew;
- }
- else
- {
- // Second, try it using XContentCreator interface -> the "old"
- // way (not providing the chance to supply an XCommandEnvironment.
-
- xNew = xCreator->createNewContent( aTypesInfo[ n ] );
- }
-
- if ( !xNew.is() )
+ uno::Sequence<uno::Any> aArgs(comphelper::InitAnyPropertySequence(
{
- uno::Sequence<uno::Any> aArgs(comphelper::InitAnyPropertySequence(
- {
- {"Folder", uno::Any(rContext.aArg.TargetURL)}
- }));
- ucbhelper::cancelCommandExecution(
- ucb::IOErrorCode_CANT_CREATE,
- aArgs,
- rContext.xOrigEnv,
- "createNewContent failed!",
- rContext.xProcessor );
- // Unreachable
- }
- break; // escape from 'for' loop
+ {"Folder", uno::Any(rContext.aArg.TargetURL)}
+ }));
+ ucbhelper::cancelCommandExecution(
+ ucb::IOErrorCode_CANT_CREATE,
+ aArgs,
+ rContext.xOrigEnv,
+ "createNewContent failed!",
+ rContext.xProcessor );
+ // Unreachable
}
- } // for
+ }
return xNew;
}
diff --git a/ucb/source/core/ucbprops.cxx b/ucb/source/core/ucbprops.cxx
index 98f917621ed6..c5a4fb6113f0 100644
--- a/ucb/source/core/ucbprops.cxx
+++ b/ucb/source/core/ucbprops.cxx
@@ -249,16 +249,12 @@ sal_Bool SAL_CALL UcbPropertiesManager::hasPropertyByName( const OUString& Name
bool UcbPropertiesManager::queryProperty(
const OUString& rName, Property& rProp )
{
- const Property* pProps = m_pProps.getConstArray();
- sal_Int32 nCount = m_pProps.getLength();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ auto pProp = std::find_if(m_pProps.begin(), m_pProps.end(),
+ [&rName](const Property& rCurrProp) { return rCurrProp.Name == rName; });
+ if (pProp != m_pProps.end())
{
- const Property& rCurrProp = pProps[ n ];
- if ( rCurrProp.Name == rName )
- {
- rProp = rCurrProp;
- return true;
- }
+ rProp = *pProp;
+ return true;
}
return false;
diff --git a/ucb/source/core/ucbstore.cxx b/ucb/source/core/ucbstore.cxx
index b746167807a4..13118c33c6ce 100644
--- a/ucb/source/core/ucbstore.cxx
+++ b/ucb/source/core/ucbstore.cxx
@@ -703,8 +703,7 @@ void PropertySetRegistry::renamePropertySet( const OUString& rOldKey,
// Obtain property names.
Sequence< OUString > aElems
= xOldNameAccess->getElementNames();
- sal_Int32 nCount = aElems.getLength();
- if ( nCount )
+ if ( aElems.hasElements() )
{
OUString aNewValuesKey
= makeHierarchalNameSegment( rNewKey );
@@ -737,10 +736,8 @@ void PropertySetRegistry::renamePropertySet( const OUString& rOldKey,
OUString const aStateKey("/State");
OUString const aAttrKey("/Attributes");
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const OUString& rPropName : aElems )
{
- const OUString& rPropName = aElems[ n ];
-
// Create new item.
Reference< XNameReplace > xNewPropNameReplace(
xNewFac->createInstance(), UNO_QUERY );
@@ -1873,8 +1870,7 @@ Sequence< PropertyValue > SAL_CALL PersistentPropertySet::getPropertyValues()
void SAL_CALL PersistentPropertySet::setPropertyValues(
const Sequence< PropertyValue >& aProps )
{
- sal_Int32 nCount = aProps.getLength();
- if ( !nCount )
+ if ( !aProps.hasElements() )
return;
osl::ClearableGuard< osl::Mutex > aCGuard( m_pImpl->m_aMutex );
@@ -1883,17 +1879,14 @@ void SAL_CALL PersistentPropertySet::setPropertyValues(
m_pImpl->m_pCreator->getRootConfigReadAccess(), UNO_QUERY );
if ( xRootHierNameAccess.is() )
{
- const PropertyValue* pNewValues = aProps.getConstArray();
-
std::vector< PropertyChangeEvent > aEvents;
OUString aFullPropNamePrefix( getFullKey() );
aFullPropNamePrefix += "/";
// Iterate over given property value sequence.
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const PropertyValue& rNewValue : aProps )
{
- const PropertyValue& rNewValue = pNewValues[ n ];
const OUString& rName = rNewValue.Name;
OUString aFullPropName = aFullPropNamePrefix;
diff --git a/ucb/source/sorter/sortdynres.cxx b/ucb/source/sorter/sortdynres.cxx
index 06cd751eaf24..26e4e761e61f 100644
--- a/ucb/source/sorter/sortdynres.cxx
+++ b/ucb/source/sorter/sortdynres.cxx
@@ -287,9 +287,8 @@ void SortedDynamicResultSet::impl_notify( const ListEvent& Changes )
aRet >>= bWasFinal;
// handle the actions in the list
- for ( long i=0; i<Changes.Changes.getLength(); i++ )
+ for ( const ListAction& aAction : Changes.Changes )
{
- const ListAction aAction = Changes.Changes[i];
switch ( aAction.ListActionType )
{
case ListActionType::WELCOME:
diff --git a/ucb/source/ucp/cmis/cmis_content.cxx b/ucb/source/ucp/cmis/cmis_content.cxx
index 2f5dd71fc857..cf8cdacf05c2 100644
--- a/ucb/source/ucp/cmis/cmis_content.cxx
+++ b/ucb/source/ucp/cmis/cmis_content.cxx
@@ -182,57 +182,44 @@ namespace
{
uno::Sequence< OUString > seqValue;
value >>= seqValue;
- sal_Int32 nNumValue = seqValue.getLength( );
- for ( sal_Int32 i = 0; i < nNumValue; ++i )
- {
- values.push_back( OUSTR_TO_STDSTR( seqValue[i] ) );
- }
+ std::transform(seqValue.begin(), seqValue.end(), std::back_inserter(values),
+ [](const OUString& rValue) -> std::string { return OUSTR_TO_STDSTR( rValue ); });
type = libcmis::PropertyType::String;
}
else if ( prop.Type == CMIS_TYPE_BOOL )
{
uno::Sequence< sal_Bool > seqValue;
value >>= seqValue;
- sal_Int32 nNumValue = seqValue.getLength( );
- for ( sal_Int32 i = 0; i < nNumValue; ++i )
- {
- values.push_back( OUSTR_TO_STDSTR( OUString::boolean( seqValue[i] ) ) );
- }
+ std::transform(seqValue.begin(), seqValue.end(), std::back_inserter(values),
+ [](const bool nValue) -> std::string { return OUSTR_TO_STDSTR( OUString::boolean( nValue ) ); });
type = libcmis::PropertyType::Bool;
}
else if ( prop.Type == CMIS_TYPE_INTEGER )
{
uno::Sequence< sal_Int64 > seqValue;
value >>= seqValue;
- sal_Int32 nNumValue = seqValue.getLength( );
- for ( sal_Int32 i = 0; i < nNumValue; ++i )
- {
- values.push_back( OUSTR_TO_STDSTR( OUString::number( seqValue[i] ) ) );
- }
+ std::transform(seqValue.begin(), seqValue.end(), std::back_inserter(values),
+ [](const sal_Int64 nValue) -> std::string { return OUSTR_TO_STDSTR( OUString::number( nValue ) ); });
type = libcmis::PropertyType::Integer;
}
else if ( prop.Type == CMIS_TYPE_DECIMAL )
{
uno::Sequence< double > seqValue;
value >>= seqValue;
- sal_Int32 nNumValue = seqValue.getLength( );
- for ( sal_Int32 i = 0; i < nNumValue; ++i )
- {
- values.push_back( OUSTR_TO_STDSTR( OUString::number( seqValue[i] ) ) );
- }
+ std::transform(seqValue.begin(), seqValue.end(), std::back_inserter(values),
+ [](const double fValue) -> std::string { return OUSTR_TO_STDSTR( OUString::number( fValue ) ); });
type = libcmis::PropertyType::Decimal;
}
else if ( prop.Type == CMIS_TYPE_DATETIME )
{
uno::Sequence< util::DateTime > seqValue;
value >>= seqValue;
- sal_Int32 nNumValue = seqValue.getLength( );
- for ( sal_Int32 i = 0; i < nNumValue; ++i )
- {
- OUStringBuffer aBuffer;
- ::sax::Converter::convertDateTime( aBuffer, seqValue[i], nullptr );
- values.push_back( OUSTR_TO_STDSTR( aBuffer.makeStringAndClear( ) ) );
- }
+ std::transform(seqValue.begin(), seqValue.end(), std::back_inserter(values),
+ [](const util::DateTime& rValue) -> std::string {
+ OUStringBuffer aBuffer;
+ ::sax::Converter::convertDateTime( aBuffer, rValue, nullptr );
+ return OUSTR_TO_STDSTR( aBuffer.makeStringAndClear( ) );
+ });
type = libcmis::PropertyType::DateTime;
}
@@ -602,11 +589,10 @@ namespace cmis
iCmisProps >>= aPropsSeq;
map< string, libcmis::PropertyPtr > aProperties;
- sal_Int32 propsLen = aPropsSeq.getLength( );
- for ( sal_Int32 i = 0; i< propsLen; i++ )
+ for ( const auto& rProp : aPropsSeq )
{
- std::string id = OUSTR_TO_STDSTR( aPropsSeq[i].Id );
- libcmis::PropertyPtr prop = lcl_unoToCmisProperty( aPropsSeq[i] );
+ std::string id = OUSTR_TO_STDSTR( rProp.Id );
+ libcmis::PropertyPtr prop = lcl_unoToCmisProperty( rProp );
aProperties.insert( std::pair<string, libcmis::PropertyPtr>( id, prop ) );
}
libcmis::ObjectPtr updateObj;
@@ -628,16 +614,8 @@ namespace cmis
{
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow = new ::ucbhelper::PropertyValueSet( m_xContext );
- sal_Int32 nProps;
- const beans::Property* pProps;
-
- nProps = rProperties.getLength();
- pProps = rProperties.getConstArray();
-
- for( sal_Int32 n = 0; n < nProps; ++n )
+ for( const beans::Property& rProp : rProperties )
{
- const beans::Property& rProp = pProps[ n ];
-
try
{
if ( rProp.Name == "IsDocument" )
@@ -840,14 +818,13 @@ namespace cmis
uno::Sequence< document::CmisProperty > aCmisProperties( aProperties.size( ) );
document::CmisProperty* pCmisProps = aCmisProperties.getArray( );
sal_Int32 i = 0;
- for ( const auto& rProperty : aProperties )
+ for ( const auto& [sId, rProperty] : aProperties )
{
- string sId = rProperty.first;
- string sDisplayName = rProperty.second->getPropertyType()->getDisplayName( );
- bool bUpdatable = rProperty.second->getPropertyType()->isUpdatable( );
- bool bRequired = rProperty.second->getPropertyType()->isRequired( );
- bool bMultiValued = rProperty.second->getPropertyType()->isMultiValued();
- bool bOpenChoice = rProperty.second->getPropertyType()->isOpenChoice();
+ string sDisplayName = rProperty->getPropertyType()->getDisplayName( );
+ bool bUpdatable = rProperty->getPropertyType()->isUpdatable( );
+ bool bRequired = rProperty->getPropertyType()->isRequired( );
+ bool bMultiValued = rProperty->getPropertyType()->isMultiValued();
+ bool bOpenChoice = rProperty->getPropertyType()->isOpenChoice();
pCmisProps[i].Id = STD_TO_OUSTR( sId );
pCmisProps[i].Name = STD_TO_OUSTR( sDisplayName );
@@ -855,8 +832,8 @@ namespace cmis
pCmisProps[i].Required = bRequired;
pCmisProps[i].MultiValued = bMultiValued;
pCmisProps[i].OpenChoice = bOpenChoice;
- pCmisProps[i].Value = lcl_cmisPropertyToUno( rProperty.second );
- switch ( rProperty.second->getPropertyType( )->getType( ) )
+ pCmisProps[i].Value = lcl_cmisPropertyToUno( rProperty );
+ switch ( rProperty->getPropertyType( )->getType( ) )
{
default:
case libcmis::PropertyType::String:
diff --git a/ucb/source/ucp/cmis/cmis_repo_content.cxx b/ucb/source/ucp/cmis/cmis_repo_content.cxx
index 0e6174831e6f..744c6ba84270 100644
--- a/ucb/source/ucp/cmis/cmis_repo_content.cxx
+++ b/ucb/source/ucp/cmis/cmis_repo_content.cxx
@@ -83,16 +83,8 @@ namespace cmis
{
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow = new ::ucbhelper::PropertyValueSet( m_xContext );
- sal_Int32 nProps;
- const beans::Property* pProps;
-
- nProps = rProperties.getLength();
- pProps = rProperties.getConstArray();
-
- for( sal_Int32 n = 0; n < nProps; ++n )
+ for( const beans::Property& rProp : rProperties )
{
- const beans::Property& rProp = pProps[ n ];
-
try
{
if ( rProp.Name == "IsDocument" )
diff --git a/ucb/source/ucp/ext/ucpext_content.cxx b/ucb/source/ucp/ext/ucpext_content.cxx
index f55c3418cc48..efb67d4fdfe2 100644
--- a/ucb/source/ucp/ext/ucpext_content.cxx
+++ b/ucb/source/ucp/ext/ucpext_content.cxx
@@ -381,14 +381,10 @@ namespace ucb { namespace ucp { namespace ext
// note: empty sequence means "get values of all supported properties".
::rtl::Reference< ::ucbhelper::PropertyValueSet > xRow = new ::ucbhelper::PropertyValueSet( rxContext );
- const sal_Int32 nCount = i_rProperties.getLength();
- if ( nCount )
+ if ( i_rProperties.hasElements() )
{
- const Property* pProps = i_rProperties.getConstArray();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const Property& rProp : i_rProperties )
{
- const Property& rProp = pProps[ n ];
-
// Process Core properties.
if ( rProp.Name == "ContentType" )
{
@@ -513,13 +509,10 @@ namespace ucb { namespace ucp { namespace ext
aEvent.Further = false;
aEvent.PropertyHandle = -1;
- const PropertyValue* pValues = i_rValues.getConstArray();
- const sal_Int32 nCount = i_rValues.getLength();
-
- for ( sal_Int32 n = 0; n < nCount; ++n, ++pValues )
+ for ( auto& rRet : aRet )
{
// all our properties are read-only ...
- aRet[ n ] <<= IllegalAccessException("property is read-only.", *this );
+ rRet <<= IllegalAccessException("property is read-only.", *this );
}
return aRet;
diff --git a/ucb/source/ucp/file/bc.cxx b/ucb/source/ucp/file/bc.cxx
index 2e5538286f00..12ff24619303 100644
--- a/ucb/source/ucp/file/bc.cxx
+++ b/ucb/source/ucp/file/bc.cxx
@@ -404,9 +404,9 @@ BaseContent::addPropertiesChangeListener(
else
{
Reference< beans::XPropertySetInfo > xProp = m_pMyShell->info_p( m_aUncPath );
- for( sal_Int32 i = 0; i < PropertyNames.getLength(); ++i )
- if( xProp->hasPropertyByName( PropertyNames[i] ) )
- m_pPropertyListener->addInterface( PropertyNames[i],Listener );
+ for( const auto& rName : PropertyNames )
+ if( xProp->hasPropertyByName( rName ) )
+ m_pPropertyListener->addInterface( rName,Listener );
}
}
@@ -423,8 +423,8 @@ BaseContent::removePropertiesChangeListener( const Sequence< OUString >& Propert
if( ! m_pPropertyListener )
return;
- for( sal_Int32 i = 0; i < PropertyNames.getLength(); ++i )
- m_pPropertyListener->removeInterface( PropertyNames[i],Listener );
+ for( const auto& rName : PropertyNames )
+ m_pPropertyListener->removeInterface( rName,Listener );
m_pPropertyListener->removeInterface( OUString(), Listener );
}
@@ -762,12 +762,12 @@ BaseContent::setPropertyValues(
// Special handling for files which have to be inserted
if( m_nState & JustInserted )
{
- for( sal_Int32 i = 0; i < Values.getLength(); ++i )
+ for( const auto& rValue : Values )
{
- if( Values[i].Name == Title )
+ if( rValue.Name == Title )
{
OUString NewTitle;
- if( Values[i].Value >>= NewTitle )
+ if( rValue.Value >>= NewTitle )
{
if ( m_nState & NameForInsertionSet )
{
@@ -1247,17 +1247,15 @@ BaseContent::cPCL()
std::unique_ptr<PropertyChangeNotifier> p;
- sal_Int32 length = seqNames.getLength();
-
- if( length )
+ if( seqNames.hasElements() )
{
std::unique_ptr<ListenerMap> listener(new ListenerMap);
- for( sal_Int32 i = 0; i < length; ++i )
+ for( const auto& rName : seqNames )
{
- cppu::OInterfaceContainerHelper* pContainer = m_pPropertyListener->getContainer(seqNames[i]);
+ cppu::OInterfaceContainerHelper* pContainer = m_pPropertyListener->getContainer(rName);
if (!pContainer)
continue;
- (*listener)[seqNames[i]] = pContainer->getElements();
+ (*listener)[rName] = pContainer->getElements();
}
p.reset( new PropertyChangeNotifier( this, std::move(listener) ) );
diff --git a/ucb/source/ucp/file/filcmd.cxx b/ucb/source/ucp/file/filcmd.cxx
index 5ab934799df7..c046051bcecd 100644
--- a/ucb/source/ucp/file/filcmd.cxx
+++ b/ucb/source/ucp/file/filcmd.cxx
@@ -83,9 +83,10 @@ CommandInfo SAL_CALL
XCommandInfo_impl::getCommandInfoByName(
const OUString& aName )
{
- for( sal_Int32 i = 0; i < m_pMyShell->m_sCommandInfo.getLength(); i++ )
- if( m_pMyShell->m_sCommandInfo[i].Name == aName )
- return m_pMyShell->m_sCommandInfo[i];
+ auto pCommand = std::find_if(m_pMyShell->m_sCommandInfo.begin(), m_pMyShell->m_sCommandInfo.end(),
+ [&aName](const CommandInfo& rCommand) { return rCommand.Name == aName; });
+ if (pCommand != m_pMyShell->m_sCommandInfo.end())
+ return *pCommand;
throw UnsupportedCommandException( THROW_WHERE );
}
@@ -95,9 +96,10 @@ CommandInfo SAL_CALL
XCommandInfo_impl::getCommandInfoByHandle(
sal_Int32 Handle )
{
- for( sal_Int32 i = 0; i < m_pMyShell->m_sCommandInfo.getLength(); ++i )
- if( m_pMyShell->m_sCommandInfo[i].Handle == Handle )
- return m_pMyShell->m_sCommandInfo[i];
+ auto pCommand = std::find_if(m_pMyShell->m_sCommandInfo.begin(), m_pMyShell->m_sCommandInfo.end(),
+ [&Handle](const CommandInfo& rCommand) { return rCommand.Handle == Handle; });
+ if (pCommand != m_pMyShell->m_sCommandInfo.end())
+ return *pCommand;
throw UnsupportedCommandException( THROW_WHERE );
}
@@ -107,11 +109,8 @@ sal_Bool SAL_CALL
XCommandInfo_impl::hasCommandByName(
const OUString& aName )
{
- for( sal_Int32 i = 0; i < m_pMyShell->m_sCommandInfo.getLength(); ++i )
- if( m_pMyShell->m_sCommandInfo[i].Name == aName )
- return true;
-
- return false;
+ return std::any_of(m_pMyShell->m_sCommandInfo.begin(), m_pMyShell->m_sCommandInfo.end(),
+ [&aName](const CommandInfo& rCommand) { return rCommand.Name == aName; });
}
@@ -119,11 +118,8 @@ sal_Bool SAL_CALL
XCommandInfo_impl::hasCommandByHandle(
sal_Int32 Handle )
{
- for( sal_Int32 i = 0; i < m_pMyShell->m_sCommandInfo.getLength(); ++i )
- if( m_pMyShell->m_sCommandInfo[i].Handle == Handle )
- return true;
-
- return false;
+ return std::any_of(m_pMyShell->m_sCommandInfo.begin(), m_pMyShell->m_sCommandInfo.end(),
+ [&Handle](const CommandInfo& rCommand) { return rCommand.Handle == Handle; });
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/file/filnot.cxx b/ucb/source/ucp/file/filnot.cxx
index ae659c4bceb3..6c199770e59b 100644
--- a/ucb/source/ucp/file/filnot.cxx
+++ b/ucb/source/ucp/file/filnot.cxx
@@ -210,20 +210,19 @@ PropertyChangeNotifier::~PropertyChangeNotifier()
void PropertyChangeNotifier::notifyPropertyChanged(
- const uno::Sequence< beans::PropertyChangeEvent >& Changes_ )
+ const uno::Sequence< beans::PropertyChangeEvent >& seqChanged )
{
- sal_Int32 j;
- uno::Sequence< beans::PropertyChangeEvent > Changes = Changes_;
+ uno::Sequence< beans::PropertyChangeEvent > Changes = seqChanged;
- for( j = 0; j < Changes.getLength(); ++j )
- Changes[j].Source = m_xCreatorContent;
+ for( auto& rChange : Changes )
+ rChange.Source = m_xCreatorContent;
// notify listeners for all Events
uno::Sequence< uno::Reference< uno::XInterface > > seqList = (*m_pListeners)[ OUString() ];
- for( j = 0; j < seqList.getLength(); ++j )
+ for( const auto& rListener : seqList )
{
- uno::Reference< beans::XPropertiesChangeListener > aListener( seqList[j],uno::UNO_QUERY );
+ uno::Reference< beans::XPropertiesChangeListener > aListener( rListener,uno::UNO_QUERY );
if( aListener.is() )
{
aListener->propertiesChange( Changes );
@@ -231,14 +230,14 @@ void PropertyChangeNotifier::notifyPropertyChanged(
}
uno::Sequence< beans::PropertyChangeEvent > seq(1);
- for( j = 0; j < Changes.getLength(); ++j )
+ for( const auto& rChange : Changes )
{
- seq[0] = Changes[j];
- seqList = (*m_pListeners)[ seq[0].PropertyName ];
+ seq[0] = rChange;
+ seqList = (*m_pListeners)[ rChange.PropertyName ];
- for( sal_Int32 i = 0; i < seqList.getLength(); ++i )
+ for( const auto& rListener : seqList )
{
- uno::Reference< beans::XPropertiesChangeListener > aListener( seqList[i],uno::UNO_QUERY );
+ uno::Reference< beans::XPropertiesChangeListener > aListener( rListener,uno::UNO_QUERY );
if( aListener.is() )
{
aListener->propertiesChange( seq );
diff --git a/ucb/source/ucp/file/filprp.cxx b/ucb/source/ucp/file/filprp.cxx
index 4226832e068f..400513035964 100644
--- a/ucb/source/ucp/file/filprp.cxx
+++ b/ucb/source/ucp/file/filprp.cxx
@@ -76,10 +76,12 @@ XPropertySetInfo_impl::~XPropertySetInfo_impl()
beans::Property SAL_CALL
XPropertySetInfo_impl::getPropertyByName( const OUString& aName )
{
- for( sal_Int32 i = 0; i < m_seq.getLength(); ++i )
- if( m_seq[i].Name == aName ) return m_seq[i];
+ auto pProp = std::find_if(m_seq.begin(), m_seq.end(),
+ [&aName](const beans::Property& rProp) { return rProp.Name == aName; });
+ if (pProp != m_seq.end())
+ return *pProp;
- throw beans::UnknownPropertyException( THROW_WHERE );
+ throw beans::UnknownPropertyException( THROW_WHERE );
}
@@ -93,9 +95,8 @@ XPropertySetInfo_impl::getProperties()
sal_Bool SAL_CALL
XPropertySetInfo_impl::hasPropertyByName( const OUString& aName )
{
- for( sal_Int32 i = 0; i < m_seq.getLength(); ++i )
- if( m_seq[i].Name == aName ) return true;
- return false;
+ return std::any_of(m_seq.begin(), m_seq.end(),
+ [&aName](const beans::Property& rProp) { return rProp.Name == aName; });
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/file/filrset.cxx b/ucb/source/ucp/file/filrset.cxx
index db6b756fd67c..9c3916844c1a 100644
--- a/ucb/source/ucp/file/filrset.cxx
+++ b/ucb/source/ucp/file/filrset.cxx
@@ -594,22 +594,22 @@ XResultSet_impl::getCapabilities()
uno::Reference< sdbc::XResultSetMetaData > SAL_CALL
XResultSet_impl::getMetaData()
{
- for ( sal_Int32 n = 0; n < m_sProperty.getLength(); ++n )
+ auto pProp = std::find_if(m_sProperty.begin(), m_sProperty.end(),
+ [](const beans::Property& rProp) { return rProp.Name == "Title"; });
+ if (pProp != m_sProperty.end())
{
- if ( m_sProperty.getConstArray()[ n ].Name == "Title" )
- {
- std::vector< ::ucbhelper::ResultSetColumnData >
- aColumnData( m_sProperty.getLength() );
- // @@@ #82177# - Determine correct value!
- aColumnData[ n ].isCaseSensitive = false;
-
- ::ucbhelper::ResultSetMetaData* p =
- new ::ucbhelper::ResultSetMetaData(
- m_pMyShell->m_xContext,
- m_sProperty,
- aColumnData );
- return uno::Reference< sdbc::XResultSetMetaData >( p );
- }
+ std::vector< ::ucbhelper::ResultSetColumnData >
+ aColumnData( m_sProperty.getLength() );
+ auto n = std::distance(m_sProperty.begin(), pProp);
+ // @@@ #82177# - Determine correct value!
+ aColumnData[ n ].isCaseSensitive = false;
+
+ ::ucbhelper::ResultSetMetaData* p =
+ new ::ucbhelper::ResultSetMetaData(
+ m_pMyShell->m_xContext,
+ m_sProperty,
+ aColumnData );
+ return uno::Reference< sdbc::XResultSetMetaData >( p );
}
::ucbhelper::ResultSetMetaData* p =
diff --git a/ucb/source/ucp/file/filtask.cxx b/ucb/source/ucp/file/filtask.cxx
index 656d84ca4e67..bb47d6e653ba 100644
--- a/ucb/source/ucp/file/filtask.cxx
+++ b/ucb/source/ucp/file/filtask.cxx
@@ -1099,18 +1099,16 @@ TaskManager::getv( sal_Int32 CommandId,
TaskManager::ContentMap::iterator it = m_aContent.find( aUnqPath );
commit( it,aFileStatus );
- TaskManager::PropertySet::iterator it1;
PropertySet& propset = it->second.properties;
- for( sal_Int32 i = 0; i < seq.getLength(); ++i )
- {
- MyProperty readProp( properties[i].Name );
- it1 = propset.find( readProp );
- if( it1 == propset.end() )
- seq[i] = uno::Any();
- else
- seq[i] = it1->getValue();
- }
+ std::transform(properties.begin(), properties.end(), seq.begin(),
+ [&propset](const beans::Property& rProp) -> uno::Any {
+ MyProperty readProp( rProp.Name );
+ auto it1 = propset.find( readProp );
+ if( it1 == propset.end() )
+ return uno::Any();
+ return it1->getValue();
+ });
}
XRow_impl* p = new XRow_impl( this,seq );
@@ -2154,28 +2152,28 @@ TaskManager::getMaskFromProperties(
const uno::Sequence< beans::Property >& seq )
{
n_Mask = 0;
- for(sal_Int32 j = 0; j < seq.getLength(); ++j) {
- if(seq[j].Name == Title)
+ for(const auto& rProp : seq) {
+ if(rProp.Name == Title)
n_Mask |= osl_FileStatus_Mask_FileName;
- else if(seq[j].Name == CasePreservingURL)
+ else if(rProp.Name == CasePreservingURL)
n_Mask |= osl_FileStatus_Mask_FileURL;
- else if(seq[j].Name == IsDocument ||
- seq[j].Name == IsFolder ||
- seq[j].Name == IsVolume ||
- seq[j].Name == IsRemoveable ||
- seq[j].Name == IsRemote ||
- seq[j].Name == IsCompactDisc ||
- seq[j].Name == IsFloppy ||
- seq[j].Name == ContentType)
+ else if(rProp.Name == IsDocument ||
+ rProp.Name == IsFolder ||
+ rProp.Name == IsVolume ||
+ rProp.Name == IsRemoveable ||
+ rProp.Name == IsRemote ||
+ rProp.Name == IsCompactDisc ||
+ rProp.Name == IsFloppy ||
+ rProp.Name == ContentType)
n_Mask |= (osl_FileStatus_Mask_Type | osl_FileStatus_Mask_LinkTargetURL);
- else if(seq[j].Name == Size)
+ else if(rProp.Name == Size)
n_Mask |= (osl_FileStatus_Mask_FileSize |
osl_FileStatus_Mask_Type |
osl_FileStatus_Mask_LinkTargetURL);
- else if(seq[j].Name == IsHidden ||
- seq[j].Name == IsReadOnly)
+ else if(rProp.Name == IsHidden ||
+ rProp.Name == IsReadOnly)
n_Mask |= osl_FileStatus_Mask_Attributes;
- else if(seq[j].Name == DateModified)
+ else if(rProp.Name == DateModified)
n_Mask |= osl_FileStatus_Mask_ModifyTime;
}
}
@@ -2215,15 +2213,15 @@ TaskManager::load( const ContentMap::iterator& it, bool create )
PropertySet& properties = it->second.properties;
uno::Sequence< beans::Property > seq = xS->getPropertySetInfo()->getProperties();
- for( sal_Int32 i = 0; i < seq.getLength(); ++i )
+ for( const auto& rProp : seq )
{
MyProperty readProp( false,
- seq[i].Name,
- seq[i].Handle,
- seq[i].Type,
- xS->getPropertyValue( seq[i].Name ),
+ rProp.Name,
+ rProp.Handle,
+ rProp.Type,
+ xS->getPropertyValue( rProp.Name ),
beans::PropertyState_DIRECT_VALUE,
- seq[i].Attributes );
+ rProp.Attributes );
properties.insert( readProp );
}
}
@@ -2524,18 +2522,16 @@ TaskManager::getv(
TaskManager::ContentMap::iterator it = m_aContent.find( aUnqPath );
commit( it,aFileStatus );
- TaskManager::PropertySet::iterator it1;
PropertySet& propset = it->second.properties;
- for( sal_Int32 i = 0; i < seq.getLength(); ++i )
- {
- MyProperty readProp( properties[i].Name );
- it1 = propset.find( readProp );
- if( it1 == propset.end() )
- seq[i] = uno::Any();
- else
- seq[i] = it1->getValue();
- }
+ std::transform(properties.begin(), properties.end(), seq.begin(),
+ [&propset](const beans::Property& rProp) -> uno::Any {
+ MyProperty readProp( rProp.Name );
+ auto it1 = propset.find( readProp );
+ if( it1 == propset.end() )
+ return uno::Any();
+ return it1->getValue();
+ });
}
deregisterNotifier( aUnqPath,pNotifier );
diff --git a/ucb/source/ucp/file/prov.cxx b/ucb/source/ucp/file/prov.cxx
index 368876d90540..c222655f4b73 100644
--- a/ucb/source/ucp/file/prov.cxx
+++ b/ucb/source/ucp/file/prov.cxx
@@ -346,9 +346,10 @@ XPropertySetInfoImpl2::queryInterface( const Type& rType )
Property SAL_CALL
XPropertySetInfoImpl2::getPropertyByName( const OUString& aName )
{
- for( sal_Int32 i = 0; i < m_seq.getLength(); ++i )
- if( m_seq[i].Name == aName )
- return m_seq[i];
+ auto pProp = std::find_if(m_seq.begin(), m_seq.end(),
+ [&aName](const Property& rProp) { return rProp.Name == aName; });
+ if (pProp != m_seq.end())
+ return *pProp;
throw UnknownPropertyException( THROW_WHERE );
}
@@ -365,10 +366,8 @@ sal_Bool SAL_CALL
XPropertySetInfoImpl2::hasPropertyByName(
const OUString& aName )
{
- for( sal_Int32 i = 0; i < m_seq.getLength(); ++i )
- if( m_seq[i].Name == aName )
- return true;
- return false;
+ return std::any_of(m_seq.begin(), m_seq.end(),
+ [&aName](const Property& rProp) { return rProp.Name == aName; });
}
diff --git a/ucb/source/ucp/ftp/ftpcontent.cxx b/ucb/source/ucp/ftp/ftpcontent.cxx
index 93cf2bf2b82f..937ebb7a3ce6 100644
--- a/ucb/source/ucp/ftp/ftpcontent.cxx
+++ b/ucb/source/ucp/ftp/ftpcontent.cxx
@@ -731,41 +731,41 @@ Reference< XRow > FTPContent::getPropertyValues(
FTPDirentry aDirEntry = m_aFTPURL.direntry();
- for(sal_Int32 i = 0; i < seqProp.getLength(); ++i) {
- const OUString& Name = seqProp[i].Name;
+ for(const auto& rProp : seqProp) {
+ const OUString& Name = rProp.Name;
if(Name == "Title")
- xRow->appendString(seqProp[i],aDirEntry.m_aName);
+ xRow->appendString(rProp,aDirEntry.m_aName);
else if(Name == "CreatableContentsInfo")
- xRow->appendObject(seqProp[i],
+ xRow->appendObject(rProp,
makeAny(queryCreatableContentsInfo()));
else if(aDirEntry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN) {
if(Name == "ContentType")
- xRow->appendString(seqProp[i],
+ xRow->appendString(rProp,
(aDirEntry.m_nMode & INETCOREFTP_FILEMODE_ISDIR)
? OUString(FTP_FOLDER)
: OUString(FTP_FILE) );
else if(Name == "IsReadOnly")
- xRow->appendBoolean(seqProp[i],
+ xRow->appendBoolean(rProp,
(aDirEntry.m_nMode
& INETCOREFTP_FILEMODE_WRITE) == 0 );
else if(Name == "IsDocument")
- xRow->appendBoolean(seqProp[i],
+ xRow->appendBoolean(rProp,
(aDirEntry.m_nMode &
INETCOREFTP_FILEMODE_ISDIR) != INETCOREFTP_FILEMODE_ISDIR);
else if(Name == "IsFolder")
- xRow->appendBoolean(seqProp[i],
+ xRow->appendBoolean(rProp,
(aDirEntry.m_nMode &
INETCOREFTP_FILEMODE_ISDIR) == INETCOREFTP_FILEMODE_ISDIR);
else if(Name == "Size")
- xRow->appendLong(seqProp[i],
+ xRow->appendLong(rProp,
aDirEntry.m_nSize);
else if(Name == "DateCreated")
- xRow->appendTimestamp(seqProp[i],
+ xRow->appendTimestamp(rProp,
aDirEntry.m_aDate);
else
- xRow->appendVoid(seqProp[i]);
+ xRow->appendVoid(rProp);
} else
- xRow->appendVoid(seqProp[i]);
+ xRow->appendVoid(rProp);
}
return Reference<XRow>(xRow.get());
@@ -817,16 +817,17 @@ Sequence<Any> FTPContent::setPropertyValues(
// either unknown or read-only
ret[i] <<= UnknownPropertyException();
- for(sal_Int32 j = 0; j < props.getLength(); ++j)
- if(props[j].Name == seqPropVal[i].Name) {
- ret[i] <<= IllegalAccessException(
- "Property is read-only!",
- //props[j].Attributes & PropertyAttribute::READONLY
- // ? "Property is read-only!"
- // : "Access denied!"),
- static_cast< cppu::OWeakObject * >( this ));
- break;
- }
+ const auto& rName = seqPropVal[i].Name;
+ auto pProp = std::find_if(props.begin(), props.end(),
+ [&rName](const Property& rProp) { return rProp.Name == rName; });
+ if (pProp != props.end()) {
+ ret[i] <<= IllegalAccessException(
+ "Property is read-only!",
+ //props[j].Attributes & PropertyAttribute::READONLY
+ // ? "Property is read-only!"
+ // : "Access denied!"),
+ static_cast< cppu::OWeakObject * >( this ));
+ }
}
}
diff --git a/ucb/source/ucp/ftp/ftpresultsetI.cxx b/ucb/source/ucp/ftp/ftpresultsetI.cxx
index a6163aaa4f2b..6ef79b786e04 100644
--- a/ucb/source/ucp/ftp/ftpresultsetI.cxx
+++ b/ucb/source/ucp/ftp/ftpresultsetI.cxx
@@ -55,37 +55,37 @@ ResultSetI::ResultSetI(const Reference<XComponentContext>& rxContext,
rtl::Reference<ucbhelper::PropertyValueSet> xRow =
new ucbhelper::PropertyValueSet(rxContext);
- for( int i = 0; i < seqProp.getLength(); ++i) {
- const OUString& Name = seqProp[i].Name;
+ for( const auto& rProp : seqProp) {
+ const OUString& Name = rProp.Name;
if(Name == "ContentType")
- xRow->appendString(seqProp[i],
+ xRow->appendString(rProp,
OUString( "application/ftp" ));
else if(Name == "Title")
- xRow->appendString(seqProp[i],dirvec[n].m_aName);
+ xRow->appendString(rProp,dirvec[n].m_aName);
else if(Name == "IsReadOnly")
- xRow->appendBoolean(seqProp[i],
+ xRow->appendBoolean(rProp,
(dirvec[n].m_nMode &
INETCOREFTP_FILEMODE_WRITE) == INETCOREFTP_FILEMODE_WRITE);
else if(Name == "IsDocument")
- xRow->appendBoolean(seqProp[i],
+ xRow->appendBoolean(rProp,
(dirvec[n].m_nMode &
INETCOREFTP_FILEMODE_ISDIR) != INETCOREFTP_FILEMODE_ISDIR);
else if(Name == "IsFolder")
- xRow->appendBoolean(seqProp[i],
+ xRow->appendBoolean(rProp,
( dirvec[n].m_nMode &
INETCOREFTP_FILEMODE_ISDIR) == INETCOREFTP_FILEMODE_ISDIR);
else if(Name == "Size")
- xRow->appendLong(seqProp[i],
+ xRow->appendLong(rProp,
dirvec[n].m_nSize);
else if(Name == "DateCreated")
- xRow->appendTimestamp(seqProp[i],
+ xRow->appendTimestamp(rProp,
dirvec[n].m_aDate);
else if(Name == "CreatableContentsInfo")
xRow->appendObject(
- seqProp[i],
+ rProp,
makeAny(FTPContent::queryCreatableContentsInfo_Static()));
else
- xRow->appendVoid(seqProp[i]);
+ xRow->appendVoid(rProp);
}
m_aItems[n].set(xRow.get());
}
diff --git a/ucb/source/ucp/ftp/ftpresultsetbase.cxx b/ucb/source/ucp/ftp/ftpresultsetbase.cxx
index 83aa79ea82e3..e18e14212103 100644
--- a/ucb/source/ucp/ftp/ftpresultsetbase.cxx
+++ b/ucb/source/ucp/ftp/ftpresultsetbase.cxx
@@ -376,18 +376,17 @@ public:
beans::Property SAL_CALL getPropertyByName( const OUString& aName ) override
{
- for( int i = 0; i < m_aSeq.getLength(); ++i )
- if( aName == m_aSeq[i].Name )
- return m_aSeq[i];
+ auto pProp = std::find_if(m_aSeq.begin(), m_aSeq.end(),
+ [&aName](const beans::Property& rProp) { return aName == rProp.Name; });
+ if (pProp != m_aSeq.end())
+ return *pProp;
throw beans::UnknownPropertyException();
}
sal_Bool SAL_CALL hasPropertyByName( const OUString& Name ) override
{
- for( int i = 0; i < m_aSeq.getLength(); ++i )
- if( Name == m_aSeq[i].Name )
- return true;
- return false;
+ return std::any_of(m_aSeq.begin(), m_aSeq.end(),
+ [&Name](const beans::Property& rProp) { return Name == rProp.Name; });
}
private:
diff --git a/ucb/source/ucp/gio/gio_content.cxx b/ucb/source/ucp/gio/gio_content.cxx
index 841a19980824..f24fd29d132c 100644
--- a/ucb/source/ucp/gio/gio_content.cxx
+++ b/ucb/source/ucp/gio/gio_content.cxx
@@ -445,17 +445,9 @@ css::uno::Reference< css::sdbc::XRow > Content::getPropertyValues(
{
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow = new ::ucbhelper::PropertyValueSet( m_xContext );
- sal_Int32 nProps;
- const css::beans::Property* pProps;
-
- nProps = rProperties.getLength();
- pProps = rProperties.getConstArray();
-
GFileInfo *pInfo = nullptr;
- for( sal_Int32 n = 0; n < nProps; ++n )
+ for( const css::beans::Property& rProp : rProperties )
{
- const css::beans::Property& rProp = pProps[ n ];
-
if ( rProp.Name == "IsDocument" )
{
getFileInfo(xEnv, &pInfo, true);
diff --git a/ucb/source/ucp/hierarchy/hierarchycontent.cxx b/ucb/source/ucp/hierarchy/hierarchycontent.cxx
index 923225a1df90..65051e16c193 100644
--- a/ucb/source/ucp/hierarchy/hierarchycontent.cxx
+++ b/ucb/source/ucp/hierarchy/hierarchycontent.cxx
@@ -63,6 +63,7 @@
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <comphelper/propertysequence.hxx>
+#include <comphelper/sequence.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <ucbhelper/contentidentifier.hxx>
#include <ucbhelper/propertyvalueset.hxx>
@@ -685,15 +686,7 @@ bool HierarchyContent::isReadOnly()
{
uno::Sequence< OUString > aNames
= xConfigProv->getAvailableServiceNames();
- sal_Int32 nCount = aNames.getLength();
- for ( sal_Int32 n = 0; n < nCount; ++n )
- {
- if ( aNames[ n ] == "com.sun.star.ucb.HierarchyDataReadWriteAccess" )
- {
- m_bIsReadOnly = false;
- break;
- }
- }
+ m_bIsReadOnly = comphelper::findValue(aNames, "com.sun.star.ucb.HierarchyDataReadWriteAccess") == -1;
}
}
}
@@ -851,17 +844,13 @@ uno::Reference< sdbc::XRow > HierarchyContent::getPropertyValues(
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow
= new ::ucbhelper::PropertyValueSet( rxContext );
- sal_Int32 nCount = rProperties.getLength();
- if ( nCount )
+ if ( rProperties.hasElements() )
{
uno::Reference< beans::XPropertySet > xAdditionalPropSet;
bool bTriedToGetAdditionalPropSet = false;
- const beans::Property* pProps = rProperties.getConstArray();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const beans::Property& rProp : rProperties )
{
- const beans::Property& rProp = pProps[ n ];
-
// Process Core properties.
if ( rProp.Name == "ContentType" )
diff --git a/ucb/source/ucp/package/pkgcontent.cxx b/ucb/source/ucp/package/pkgcontent.cxx
index dba85a3a9d30..85cb0b16d3c8 100644
--- a/ucb/source/ucp/package/pkgcontent.cxx
+++ b/ucb/source/ucp/package/pkgcontent.cxx
@@ -714,13 +714,8 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow
= new ::ucbhelper::PropertyValueSet( rxContext );
- sal_Int32 nCount = rProperties.getLength();
- if ( nCount )
- {
- const beans::Property* pProps = rProperties.getConstArray();
- for ( sal_Int32 n = 0; n < nCount; ++n )
- xRow->appendVoid( pProps[ n ] );
- }
+ for ( const beans::Property& rProp : rProperties )
+ xRow->appendVoid( rProp );
return uno::Reference< sdbc::XRow >( xRow.get() );
}
@@ -741,17 +736,13 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow
= new ::ucbhelper::PropertyValueSet( rxContext );
- sal_Int32 nCount = rProperties.getLength();
- if ( nCount )
+ if ( rProperties.hasElements() )
{
uno::Reference< beans::XPropertySet > xAdditionalPropSet;
bool bTriedToGetAdditionalPropSet = false;
- const beans::Property* pProps = rProperties.getConstArray();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const beans::Property& rProp : rProperties )
{
- const beans::Property& rProp = pProps[ n ];
-
// Process Core properties.
if ( rProp.Name == "ContentType" )
diff --git a/ucb/source/ucp/tdoc/tdoc_content.cxx b/ucb/source/ucp/tdoc/tdoc_content.cxx
index 9dd5b6e6ae98..8a693fbe133b 100644
--- a/ucb/source/ucp/tdoc/tdoc_content.cxx
+++ b/ucb/source/ucp/tdoc/tdoc_content.cxx
@@ -844,13 +844,8 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow
= new ::ucbhelper::PropertyValueSet( rxContext );
- sal_Int32 nCount = rProperties.getLength();
- if ( nCount )
- {
- const beans::Property* pProps = rProperties.getConstArray();
- for ( sal_Int32 n = 0; n < nCount; ++n )
- xRow->appendVoid( pProps[ n ] );
- }
+ for ( const beans::Property& rProp : rProperties )
+ xRow->appendVoid( rProp );
return uno::Reference< sdbc::XRow >( xRow.get() );
}
@@ -870,17 +865,13 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow
= new ::ucbhelper::PropertyValueSet( rxContext );
- sal_Int32 nCount = rProperties.getLength();
- if ( nCount )
+ if ( rProperties.hasElements() )
{
uno::Reference< beans::XPropertySet > xAdditionalPropSet;
bool bTriedToGetAdditionalPropSet = false;
- const beans::Property* pProps = rProperties.getConstArray();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const beans::Property& rProp : rProperties )
{
- const beans::Property& rProp = pProps[ n ];
-
// Process Core properties.
if ( rProp.Name == "ContentType" )
diff --git a/ucb/source/ucp/webdav-neon/ContentProperties.cxx b/ucb/source/ucp/webdav-neon/ContentProperties.cxx
index c13f0ed0b550..12bbf4f740cd 100644
--- a/ucb/source/ucp/webdav-neon/ContentProperties.cxx
+++ b/ucb/source/ucp/webdav-neon/ContentProperties.cxx
@@ -222,11 +222,8 @@ void ContentProperties::UCBNamesToDAVNames(
bool bContentLength = false;
bool bResourceType = false;
- sal_Int32 nCount = rProps.getLength();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const beans::Property & rProp : rProps )
{
- const beans::Property & rProp = rProps[ n ];
-
if ( rProp.Name == "Title" )
{
// Title is always obtained from resource's URI.
@@ -295,11 +292,8 @@ void ContentProperties::UCBNamesToHTTPNames(
// Content-Type <- MediaType
// Content-Length <- Size
- sal_Int32 nCount = rProps.getLength();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const beans::Property & rProp : rProps )
{
- const beans::Property & rProp = rProps[ n ];
-
if ( rProp.Name == "DateModified" )
{
propertyNames.emplace_back("Last-Modified" );
@@ -326,10 +320,9 @@ bool ContentProperties::containsAllNames(
{
rNamesNotContained.clear();
- sal_Int32 nCount = rProps.getLength();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const auto& rProp : rProps )
{
- const OUString & rName = rProps[ n ].Name;
+ const OUString & rName = rProp.Name;
if ( !contains( rName ) )
{
// Not found.
diff --git a/ucb/source/ucp/webdav-neon/DAVResourceAccess.cxx b/ucb/source/ucp/webdav-neon/DAVResourceAccess.cxx
index bf1004a9e411..905c78518a5f 100644
--- a/ucb/source/ucp/webdav-neon/DAVResourceAccess.cxx
+++ b/ucb/source/ucp/webdav-neon/DAVResourceAccess.cxx
@@ -1084,11 +1084,11 @@ void DAVResourceAccess::getUserRequestHeaders(
uno::Sequence< beans::StringPair > aRequestHeaders
= xDAVEnv->getUserRequestHeaders( rURI, eMethod );
- for ( sal_Int32 n = 0; n < aRequestHeaders.getLength(); ++n )
+ for ( const auto& rRequestHeader : aRequestHeaders )
{
rRequestHeaders.emplace_back(
- aRequestHeaders[ n ].First,
- aRequestHeaders[ n ].Second );
+ rRequestHeader.First,
+ rRequestHeader.Second );
}
}
}
diff --git a/ucb/source/ucp/webdav-neon/LinkSequence.cxx b/ucb/source/ucp/webdav-neon/LinkSequence.cxx
index da0bd63aebd1..fc9e29851be0 100644
--- a/ucb/source/ucp/webdav-neon/LinkSequence.cxx
+++ b/ucb/source/ucp/webdav-neon/LinkSequence.cxx
@@ -197,20 +197,15 @@ bool LinkSequence::toXML( const uno::Sequence< ucb::Link > & rInData,
{
// <link><src>value</src><dst>value</dst></link><link><src>....
- sal_Int32 nCount = rInData.getLength();
- if ( nCount )
+ for ( const auto& rLink : rInData )
{
- for ( sal_Int32 n = 0; n < nCount; ++n )
- {
- rOutData += "<link><src>";
- rOutData += rInData[ n ].Source;
- rOutData += "</src><dst>";
- rOutData += rInData[ n ].Destination;
- rOutData += "</dst></link>";
- }
- return true;
+ rOutData += "<link><src>";
+ rOutData += rLink.Source;
+ rOutData += "</src><dst>";
+ rOutData += rLink.Destination;
+ rOutData += "</dst></link>";
}
- return false;
+ return rInData.hasElements();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/webdav-neon/NeonSession.cxx b/ucb/source/ucp/webdav-neon/NeonSession.cxx
index 667d24b05351..a075268806c8 100644
--- a/ucb/source/ucp/webdav-neon/NeonSession.cxx
+++ b/ucb/source/ucp/webdav-neon/NeonSession.cxx
@@ -146,12 +146,10 @@ static bool noKeepAlive( const uno::Sequence< beans::NamedValue >& rFlags )
return false;
// find "KeepAlive" property
- const beans::NamedValue* pAry(rFlags.getConstArray());
- const sal_Int32 nLen(rFlags.getLength());
const beans::NamedValue* pValue(
- std::find_if(pAry,pAry+nLen,
+ std::find_if(rFlags.begin(), rFlags.end(),
[] (beans::NamedValue const& rNV) { return rNV.Name == "KeepAlive"; } ));
- return pValue != pAry+nLen && !pValue->Value.get<bool>();
+ return pValue != rFlags.end() && !pValue->Value.get<bool>();
}
struct NeonRequestContext
@@ -1773,17 +1771,11 @@ namespace {
bool containsLocktoken( const uno::Sequence< ucb::Lock > & rLocks,
const char * token )
{
- for ( sal_Int32 n = 0; n < rLocks.getLength(); ++n )
- {
- const uno::Sequence< OUString > & rTokens
- = rLocks[ n ].LockTokens;
- for ( sal_Int32 m = 0; m < rTokens.getLength(); ++m )
- {
- if ( rTokens[ m ].equalsAscii( token ) )
- return true;
- }
- }
- return false;
+ return std::any_of(rLocks.begin(), rLocks.end(), [&token](const ucb::Lock& rLock) {
+ const uno::Sequence< OUString > & rTokens = rLock.LockTokens;
+ return std::any_of(rTokens.begin(), rTokens.end(),
+ [&token](const OUString& rToken) { return rToken.equalsAscii( token ); });
+ });
}
} // namespace
diff --git a/ucb/source/ucp/webdav-neon/webdavcontent.cxx b/ucb/source/ucp/webdav-neon/webdavcontent.cxx
index bd05e53fd880..25941bce6c13 100644
--- a/ucb/source/ucp/webdav-neon/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav-neon/webdavcontent.cxx
@@ -1195,17 +1195,13 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
rtl::Reference< ::ucbhelper::PropertyValueSet > xRow
= new ::ucbhelper::PropertyValueSet( rxContext );
- sal_Int32 nCount = rProperties.getLength();
- if ( nCount )
+ if ( rProperties.hasElements() )
{
uno::Reference< beans::XPropertySet > xAdditionalPropSet;
bool bTriedToGetAdditionalPropSet = false;
- const beans::Property* pProps = rProperties.getConstArray();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const beans::Property& rProp : rProperties )
{
- const beans::Property& rProp = pProps[ n ];
-
// Process standard UCB, DAV and HTTP properties.
const uno::Any & rValue = rData.getValue( rProp.Name );
if ( rValue.hasValue() )
@@ -1378,12 +1374,8 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
if ( !m_aFailedPropNames.empty() )
{
- sal_Int32 nProps = 0;
- sal_Int32 nCount = rProperties.getLength();
- for ( sal_Int32 n = 0; n < nCount; ++n, ++nProps )
- {
- aProperties[ nProps ] = rProperties[ n ];
- }
+ sal_Int32 nProps = rProperties.getLength();
+ std::copy(rProperties.begin(), rProperties.end(), aProperties.begin());
aProperties.realloc( nProps );
}
@@ -1659,10 +1651,9 @@ uno::Reference< sdbc::XRow > Content::getPropertyValues(
}
}
- sal_Int32 nCount = rProperties.getLength();
- for ( sal_Int32 n = 0; n < nCount; ++n )
+ for ( const auto& rProperty : rProperties )
{
- const OUString rName = rProperties[ n ].Name;
+ const OUString rName = rProperty.Name;
if ( rName == "BaseURI" )
{
// Add BaseURI property, if requested.
@@ -2969,11 +2960,11 @@ Content::ResourceType Content::resourceTypeForLocks(
if ( m_xCachedProps->getValue( DAVProperties::SUPPORTEDLOCK )
>>= aSupportedLocks ) //get the cached value for supportedlock
{
- for ( sal_Int32 n = 0; n < aSupportedLocks.getLength(); ++n )
+ for ( const auto& rSupportedLock : aSupportedLocks )
{
- if ( aSupportedLocks[ n ].Scope
+ if ( rSupportedLock.Scope
== ucb::LockScope_EXCLUSIVE &&
- aSupportedLocks[ n ].Type
+ rSupportedLock.Type
== ucb::LockType_WRITE )
eResourceTypeForLocks = DAV;
}
@@ -3040,20 +3031,20 @@ Content::ResourceType Content::resourceTypeForLocks(
uno::Sequence< ucb::LockEntry > aSupportedLocks;
if ( rProp.Value >>= aSupportedLocks )
{
- for ( sal_Int32 n = 0; n < aSupportedLocks.getLength(); ++n )
+ bool isSupported = std::any_of(aSupportedLocks.begin(), aSupportedLocks.end(),
+ [](const ucb::LockEntry& rLock) {
+ // TODO: if the lock type is changed from 'exclusive write' to 'shared write'
+ // e.g. to implement 'Calc shared file feature', the ucb::LockScope_EXCLUSIVE
+ // value should be checked as well, adaptation the code may be needed
+ return rLock.Scope == ucb::LockScope_EXCLUSIVE
+ && rLock.Type == ucb::LockType_WRITE;
+ });
+ if (isSupported)
{
- // TODO: if the lock type is changed from 'exclusive write' to 'shared write'
- // e.g. to implement 'Calc shared file feature', the ucb::LockScope_EXCLUSIVE
- // value should be checked as well, adaptation the code may be needed
- if ( aSupportedLocks[ n ].Scope == ucb::LockScope_EXCLUSIVE &&
- aSupportedLocks[ n ].Type == ucb::LockType_WRITE )
- {
- // requested locking mode is supported
- eResourceTypeForLocks = DAV;
- SAL_INFO( "ucb.ucp.webdav", "resourceTypeForLocks - URL: <"
- << m_xIdentifier->getContentIdentifier() << ">, DAV lock/unlock supported");
- break;
- }
+ // requested locking mode is supported
+ eResourceTypeForLocks = DAV;
+ SAL_INFO( "ucb.ucp.webdav", "resourceTypeForLocks - URL: <"
+ << m_xIdentifier->getContentIdentifier() << ">, DAV lock/unlock supported");
}
break;
}
More information about the Libreoffice-commits
mailing list