mdds
include
mdds
sorted_string_map.hpp
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*************************************************************************
3
*
4
* Copyright (c) 2022 Kohei Yoshida
5
*
6
* Permission is hereby granted, free of charge, to any person
7
* obtaining a copy of this software and associated documentation
8
* files (the "Software"), to deal in the Software without
9
* restriction, including without limitation the rights to use,
10
* copy, modify, merge, publish, distribute, sublicense, and/or sell
11
* copies of the Software, and to permit persons to whom the
12
* Software is furnished to do so, subject to the following
13
* conditions:
14
*
15
* The above copyright notice and this permission notice shall be
16
* included in all copies or substantial portions of the Software.
17
*
18
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
20
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25
* OTHER DEALINGS IN THE SOFTWARE.
26
*
27
************************************************************************/
28
29
#pragma once
30
31
#include <cstdlib>
32
#include <string_view>
33
34
namespace
mdds {
35
45
template
<
typename
ValueT,
typename
SizeT>
46
struct
chars_map_entry
47
{
48
const
char
* key;
49
SizeT key_length;
50
ValueT value;
51
};
52
53
template
<
typename
ValueT,
typename
SizeT>
54
struct
string_view_map_entry
55
{
56
std::string_view key;
57
ValueT value;
58
};
59
65
template
<
typename
ValueT,
template
<
typename
,
typename
>
class
EntryT =
chars_map_entry
>
66
class
sorted_string_map
67
{
68
public
:
69
using
value_type = ValueT;
70
using
size_type = std::size_t;
71
using
entry = EntryT<ValueT, size_type>;
72
81
sorted_string_map
(
const
entry* entries, size_type entry_size, value_type null_value);
82
93
value_type
find
(
const
char
* input, size_type len)
const
;
94
103
value_type
find
(std::string_view input)
const
;
104
112
size_type
size
()
const
;
113
114
private
:
115
const
entry* m_entries;
116
value_type m_null_value;
117
size_type m_entry_size;
118
const
entry* m_entry_end;
119
};
120
121
}
// namespace mdds
122
123
#include "sorted_string_map_def.inl"
124
125
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
mdds::sorted_string_map
Definition:
sorted_string_map.hpp:67
mdds::sorted_string_map::find
value_type find(const char *input, size_type len) const
mdds::sorted_string_map::size
size_type size() const
mdds::sorted_string_map::find
value_type find(std::string_view input) const
mdds::sorted_string_map::sorted_string_map
sorted_string_map(const entry *entries, size_type entry_size, value_type null_value)
mdds::chars_map_entry
Definition:
sorted_string_map.hpp:47
mdds::string_view_map_entry
Definition:
sorted_string_map.hpp:55
Generated on Fri Jan 13 2023 17:07:01 for mdds by
1.9.4