generic_mtrie.hpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #ifndef __ZMQ_GENERIC_MTRIE_HPP_INCLUDED__
4 #define __ZMQ_GENERIC_MTRIE_HPP_INCLUDED__
5 
6 #include <stddef.h>
7 #include <set>
8 
9 #include "macros.hpp"
10 #include "stdint.hpp"
11 #include "atomic_counter.hpp"
12 
13 namespace zmq
14 {
15 // Multi-trie (prefix tree). Each node in the trie is a set of pointers.
16 template <typename T> class generic_mtrie_t
17 {
18  public:
19  typedef T value_t;
20  typedef const unsigned char *prefix_t;
21 
22  enum rm_result
23  {
27  };
28 
29  generic_mtrie_t ();
31 
32  // Add key to the trie. Returns true iff no entry with the same prefix_
33  // and size_ existed before.
34  bool add (prefix_t prefix_, size_t size_, value_t *value_);
35 
36  // Remove all entries with a specific value from the trie.
37  // The call_on_uniq_ flag controls if the callback is invoked
38  // when there are no entries left on a prefix only (true)
39  // or on every removal (false). The arg_ argument is passed
40  // through to the callback function.
41  template <typename Arg>
42  void rm (value_t *value_,
43  void (*func_) (const unsigned char *data_, size_t size_, Arg arg_),
44  Arg arg_,
45  bool call_on_uniq_);
46 
47  // Removes a specific entry from the trie.
48  // Returns the result of the operation.
49  rm_result rm (prefix_t prefix_, size_t size_, value_t *value_);
50 
51  // Calls a callback function for all matching entries, i.e. any node
52  // corresponding to data_ or a prefix of it. The arg_ argument
53  // is passed through to the callback function.
54  template <typename Arg>
55  void match (prefix_t data_,
56  size_t size_,
57  void (*func_) (value_t *value_, Arg arg_),
58  Arg arg_);
59 
60  // Retrieve the number of prefixes stored in this trie (added - removed)
61  // Note this is a multithread safe function.
62  uint32_t num_prefixes () const { return _num_prefixes.get (); }
63 
64  private:
65  bool is_redundant () const;
66 
67  typedef std::set<value_t *> pipes_t;
69 
71 
72  unsigned char _min;
73  unsigned short _count;
74  unsigned short _live_nodes;
75  union _next_t
76  {
79  } _next;
80 
81  struct iter
82  {
86  size_t size;
87  unsigned short current_child;
88  unsigned char new_min;
89  unsigned char new_max;
91  };
92 
94 };
95 }
96 
97 #endif
zmq::generic_mtrie_t::_next_t::node
class generic_mtrie_t< value_t > * node
Definition: generic_mtrie.hpp:77
zmq::generic_mtrie_t::rm
void rm(value_t *value_, void(*func_)(const unsigned char *data_, size_t size_, Arg arg_), Arg arg_, bool call_on_uniq_)
zmq::generic_mtrie_t::iter
Definition: generic_mtrie.hpp:81
zmq::generic_mtrie_t::iter::processed_for_removal
bool processed_for_removal
Definition: generic_mtrie.hpp:90
data_
StringPiece data_
Definition: bytestream_unittest.cc:60
atomic_counter.hpp
zmq::generic_mtrie_t::iter::node
generic_mtrie_t< value_t > * node
Definition: generic_mtrie.hpp:83
zmq::generic_mtrie_t::iter::current_child
unsigned short current_child
Definition: generic_mtrie.hpp:87
zmq::generic_mtrie_t::not_found
@ not_found
Definition: generic_mtrie.hpp:24
zmq::generic_mtrie_t::iter::next_node
generic_mtrie_t< value_t > * next_node
Definition: generic_mtrie.hpp:84
T
#define T(upbtypeconst, upbtype, ctype, default_value)
zmq::generic_mtrie_t::_count
unsigned short _count
Definition: generic_mtrie.hpp:73
zmq::generic_mtrie_t::num_prefixes
uint32_t num_prefixes() const
Definition: generic_mtrie.hpp:62
zmq::generic_mtrie_t::_next
union zmq::generic_mtrie_t::_next_t _next
zmq::generic_mtrie_t::last_value_removed
@ last_value_removed
Definition: generic_mtrie.hpp:25
zmq::generic_mtrie_t::_next_t
Definition: generic_mtrie.hpp:75
zmq::generic_mtrie_t::iter::prefix
prefix_t prefix
Definition: generic_mtrie.hpp:85
zmq
Definition: zmq.hpp:229
zmq::generic_mtrie_t::_live_nodes
unsigned short _live_nodes
Definition: generic_mtrie.hpp:74
macros.hpp
stdint.hpp
zmq::generic_mtrie_t< value_t >::rm_result
rm_result
Definition: generic_mtrie.hpp:22
zmq::generic_mtrie_t::generic_mtrie_t
generic_mtrie_t()
Definition: generic_mtrie_impl.hpp:20
zmq::atomic_counter_t
Definition: atomic_counter.hpp:61
zmq::atomic_counter_t::get
integer_t get() const ZMQ_NOEXCEPT
Definition: atomic_counter.hpp:173
ZMQ_NON_COPYABLE_NOR_MOVABLE
#define ZMQ_NON_COPYABLE_NOR_MOVABLE(classname)
Definition: macros.hpp:58
zmq::generic_mtrie_t::values_remain
@ values_remain
Definition: generic_mtrie.hpp:26
zmq::generic_mtrie_t::add
bool add(prefix_t prefix_, size_t size_, value_t *value_)
Definition: generic_mtrie_impl.hpp:41
zmq::generic_mtrie_t::iter::new_max
unsigned char new_max
Definition: generic_mtrie.hpp:89
zmq::generic_mtrie_t::value_t
T value_t
Definition: generic_mtrie.hpp:19
zmq::generic_mtrie_t::_pipes
pipes_t * _pipes
Definition: generic_mtrie.hpp:68
zmq::generic_mtrie_t::_min
unsigned char _min
Definition: generic_mtrie.hpp:72
zmq::generic_mtrie_t::_num_prefixes
atomic_counter_t _num_prefixes
Definition: generic_mtrie.hpp:70
zmq::generic_mtrie_t::pipes_t
std::set< value_t * > pipes_t
Definition: generic_mtrie.hpp:67
value_
int value_
Definition: gmock-matchers_test.cc:571
zmq::generic_mtrie_t::is_redundant
bool is_redundant() const
Definition: generic_mtrie_impl.hpp:563
zmq::generic_mtrie_t::prefix_t
const typedef unsigned char * prefix_t
Definition: generic_mtrie.hpp:20
zmq::generic_mtrie_t
Definition: generic_mtrie.hpp:16
zmq::generic_mtrie_t::iter::new_min
unsigned char new_min
Definition: generic_mtrie.hpp:88
zmq::generic_mtrie_t::~generic_mtrie_t
~generic_mtrie_t()
Definition: generic_mtrie_impl.hpp:25
zmq::generic_mtrie_t::iter::size
size_t size
Definition: generic_mtrie.hpp:86
zmq::generic_mtrie_t::_next_t::table
class generic_mtrie_t< value_t > ** table
Definition: generic_mtrie.hpp:78
zmq::generic_mtrie_t::match
void match(prefix_t data_, size_t size_, void(*func_)(value_t *value_, Arg arg_), Arg arg_)
prefix_
std::string prefix_
Definition: src/google/protobuf/descriptor.cc:378


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:51