// file : butl/string-table.txx -*- C++ -*- // copyright : Copyright (c) 2014-2016 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #include // numeric_limits #include // size_t #include 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::key (d)), value_type {static_cast (i), d})); if (r.second) { assert (i <= std::numeric_limits::max ()); r.first->first.p = &traits::key (r.first->second.d); // Update key. vec_.push_back (r.first); } return r.first->second.i; } }