// file : libbutl/string-table.txx -*- C++ -*- // license : MIT; see accompanying LICENSE file namespace butl { template I string_table:: insert (const D& d) { std::size_t i (vec_.size () + 1); // Note: move(d) would be tricky since the key still points to it. // auto r (map_.emplace (key_type (&traits_type::key (d)), value_type {static_cast (i), d})); if (r.second) { assert (i <= std::numeric_limits::max ()); r.first->first.p = &traits_type::key (r.first->second.d); // Update key. vec_.push_back (r.first); } return r.first->second.i; } }