blob: 77079b28240e4dc4bb70fda994abb6eada1347c6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
// file : libbutl/string-table.txx -*- C++ -*-
// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
// license : MIT; see accompanying LICENSE file
namespace butl
{
template <typename I, typename D>
I string_table<I, D>::
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> (i), d}));
if (r.second)
{
assert (i <= std::numeric_limits<I>::max ());
r.first->first.p = &traits_type::key (r.first->second.d); // Update key.
vec_.push_back (r.first);
}
return r.first->second.i;
}
}
|