void VnodeCacher::add(Vnode* directory, const string& name, Vnode* entry) { if (directory->type != Vnode::DIRECTORY) return; DirectoriesMap::iterator it = directories_->find(directory); EntriesMap* entries; if (it == directories_->end()) { entries = new EntriesMap; directories_->insert(vpair(directory, entries)); } else { entries = (*it).second; } EntriesMap::iterator eit = entries->find(name); if (eit != entries->end()) { monapi_fatal("already exists vnode <%s>\n", name.c_str()); } entries->insert(spair(name, entry)); return; }
Accumulator* PivotTable::getAccumulatorForKeyAndEntry(const char* key, const char* entryKey) { //std::cout << "Key " << key << std::endl; Container::const_iterator finder = mDocumentMap.find(key); EntriesMap* entries = 0; if (finder == mDocumentMap.end()) { entries = new EntriesMap(); #ifndef NO_GOOGLE_HASH entries->set_empty_key(0); #endif size_t theSize = strlen(key); char* newKey = new char[theSize]; newKey[0] = '\0'; strcpy(newKey, key); mDocumentMap[newKey] = entries; } else { entries = finder->second; } EntriesMap::const_iterator finderEntry = entries->find(entryKey); Accumulator* result = 0; if (finderEntry == entries->end()) { result = new Accumulator(); entries->insert(std::make_pair(entryKey,result)); } else result = finderEntry->second; return result; }