// insert std::pair<class map_t::const_iterator, bool> emplace(const KEY_T& key, const PAY_T& pay) { if (file_mode == READ_ONLY) { throw std::runtime_error("Error: emplace called in RO mode"); } return map->emplace(key, pay); }
const char* name_t::map_string(const char* str, std::size_t hash) { typedef std::unordered_map<std::size_t, const char*> map_t; typedef std::lock_guard<std::mutex> lock_t; static std::mutex sync_s; lock_t lock(sync_s); static adobe::unique_string_pool_t pool_s; static map_t map_s; map_t::const_iterator found(map_s.find(hash)); return found == map_s.end() ? map_s.emplace(hash, pool_s.add(str)).first->second : found->second; }
// change std::pair<class map_t::const_iterator, bool> change(const KEY_T& key, const PAY_T& pay) { if (file_mode == READ_ONLY) { throw std::runtime_error("Error: change called in RO mode"); } // erase the old element size_t num_erased = erase(key); if (num_erased != 1) { // erase failed return std::pair<class map_t::const_iterator, bool>(map->end(), false); } else { // put in new return map->emplace(key, pay); } }