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