std::vector<HFAEntry*> HFAEntry::FindChildren( const char *pszName, const char *pszType ) { std::vector<HFAEntry*> apoChildren; HFAEntry *poEntry; if( this == NULL ) return apoChildren; for( poEntry = GetChild(); poEntry != NULL; poEntry = poEntry->GetNext() ) { std::vector<HFAEntry*> apoEntryChildren; size_t i; if( (pszName == NULL || EQUAL(poEntry->GetName(),pszName)) && (pszType == NULL || EQUAL(poEntry->GetType(),pszType)) ) apoChildren.push_back( poEntry ); apoEntryChildren = poEntry->FindChildren( pszName, pszType ); for( i = 0; i < apoEntryChildren.size(); i++ ) apoChildren.push_back( apoEntryChildren[i] ); } return apoChildren; }
std::vector<HFAEntry*> HFAEntry::FindChildren( const char *pszName, const char *pszType, int nRecLevel, int* pbErrorDetected ) { std::vector<HFAEntry*> apoChildren; if( *pbErrorDetected ) return apoChildren; if( nRecLevel == 50 ) { CPLError(CE_Failure, CPLE_AppDefined, "Bad entry structure: recursion detected !"); *pbErrorDetected = TRUE; return apoChildren; } for( HFAEntry *poEntry = GetChild(); poEntry != NULL; poEntry = poEntry->GetNext() ) { std::vector<HFAEntry*> apoEntryChildren; if( (pszName == NULL || EQUAL(poEntry->GetName(), pszName)) && (pszType == NULL || EQUAL(poEntry->GetType(), pszType)) ) apoChildren.push_back( poEntry ); apoEntryChildren = poEntry->FindChildren(pszName, pszType, nRecLevel + 1, pbErrorDetected); if( *pbErrorDetected ) return apoChildren; for( size_t i = 0; i < apoEntryChildren.size(); i++ ) apoChildren.push_back( apoEntryChildren[i] ); } return apoChildren; }