CNcbiIstream& ReadMap(CNcbiIstream& is, TMap& cont) { typedef CContElemConverter<typename TMap::key_type> TKeyConverter; typedef CContElemConverter<typename TMap::mapped_type> TValueConverter; string str; if (!is.good() || is.eof()) return is; size_t size; is >> size; if (!is.good() || is.eof()) return is; for( size_t i = 0; i < size; ++i) { string key = ReadStringFromStream(is); string value = ReadStringFromStream(is); cont.insert(typename TMap::value_type( TKeyConverter::FromString(key), TValueConverter::FromString(value)) ); } return is; }
int main(int argc, const char * argv[]) { List *cmnds = NULL; char *string = NULL; int quit = 0; ErrorCode errorCode = ERRORCODE_NO_ERROR, endOfFile = ERRORCODE_NO_ERROR; CATCH_ERROR(InitInput(&string), errHandler); // allocating input string MEM(string, initialError); // checking if allocation was successful, otherwise quiting while (endOfFile == ERRORCODE_NO_ERROR && quit != 1) // ends on <quit> command { ReleaseList(&cmnds); // releasing list of tokens endOfFile = ReadStringFromStream(stdin, &string); // reading string of unknown length CATCH_ERROR(Tokenize(string, &cmnds), errHandler); // creating a list of tokens from input string CATCH_ERROR(Route(cmnds, &quit), errHandler); // trying to find a matching method errHandler: PrintErrorFeedback(errorCode); // on error printing feedback info and continuing main loop } ReleaseList(&cmnds); // after escaping while ReleaseInput(string); return 0; initialError: return 1; }