OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
patricia_map.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef vnsw_agent_patricia_map_h
6 #define vnsw_agent_patricia_map_h
7 
8 #include "base/patricia.h"
9 
10 #include <stdint.h>
11 
12 class PatriciaNode {
13 public:
14  PatriciaNode(int klen, int koffset, void *knode, const void *key_ptr) :
15  klen_(klen), koffset_(koffset), knode_(knode), key_ptr_(key_ptr) {
16  }
17 
18  class Key {
19  public:
20  static std::size_t BitLength(const PatriciaNode *key) {
21  return key->klen_*8;
22  }
23 
24  static char ByteValue(const PatriciaNode *key, std::size_t i) {
25  const char *ch = (const char *)key->key_ptr_;
26  return ch[key->koffset_ + key->klen_ - i - 1];
27  }
28  };
29 
30  int klen_;
31  int koffset_;
32  void *knode_;
33  const void *key_ptr_;
35 };
36 
37 template <class D, Patricia::Node D::* P, class K>
38 class PatriciaMap : public Patricia::Tree<D, P, K> {
39 public:
40  PatriciaMap(uint16_t klen, uint8_t koffset) :
41  Patricia::Tree<D, P, K>(), klen_(klen), koffset_(koffset) {
42  }
43 
44  uint16_t klen_;
45  uint8_t koffset_;
46 };
47 
49 
50 #endif /* vnsw_agent_patricia_map_h */
PatriciaMap< PatriciaNode,&PatriciaNode::node_, PatriciaNode::Key > PatriciaMapTable
Definition: patricia_map.h:48
static std::size_t BitLength(const PatriciaNode *key)
Definition: patricia_map.h:20
PatriciaNode(int klen, int koffset, void *knode, const void *key_ptr)
Definition: patricia_map.h:14
uint16_t klen_
Definition: patricia_map.h:44
PatriciaMap(uint16_t klen, uint8_t koffset)
Definition: patricia_map.h:40
void * knode_
Definition: patricia_map.h:32
uint8_t koffset_
Definition: patricia_map.h:45
const void * key_ptr_
Definition: patricia_map.h:33
static char ByteValue(const PatriciaNode *key, std::size_t i)
Definition: patricia_map.h:24
Patricia::Node node_
Definition: patricia_map.h:34