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; }