コード例 #1
0
ファイル: factory.hpp プロジェクト: DmitrySigaev/ncbi
int CFactory<Type>::CgiFactory(const TCgiEntries& Cgi,
                               SFactoryList<Type>* List)
{
    int i = 0;
    TCgiEntriesCI iRange, iPageCgi;
    pair<TCgiEntriesCI, TCgiEntriesCI> Range;
    TCgiEntries PageCgi;

    while ( !string(List[i].MatchString).empty() ) {
        PageCgi.erase(PageCgi.begin(), PageCgi.end());
        // Parse the MatchString
        CCgiRequest::ParseEntries(List[i].MatchString, PageCgi);
        bool ThisPage = true;
        for ( iPageCgi = PageCgi.begin(); iPageCgi != PageCgi.end(); iPageCgi++) { 
            Range = Cgi.equal_range(iPageCgi->first);
            for ( iRange = Range.first; iRange != Range.second; iRange++ ) {
                if ( iRange->second == iPageCgi->second)
                    goto equality;
                if ( iPageCgi->second.empty())
                    goto equality;  // wildcard
            }
            ThisPage = false;
        equality:
            ;
        }
        if ( ThisPage ) {
            break;
        }
        i++;
    }
    return i;
}