Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}