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>
47 {
48  const char* key;
49  SizeT key_length;
50  ValueT value;
51 };
52 
53 template<typename ValueT, typename SizeT>
55 {
56  std::string_view key;
57  ValueT value;
58 };
59 
65 template<typename ValueT, template<typename, typename> class EntryT = chars_map_entry>
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: */
Definition: sorted_string_map.hpp:54
Definition: sorted_string_map.hpp:66
size_type size() const
sorted_string_map(const entry *entries, size_type entry_size, value_type null_value)
Definition: flat_segment_tree.hpp:46
value_type find(const char *input, size_type len) const
Definition: sorted_string_map.hpp:46