root/trunk/pdns/modules/geobackend/ippreftree.hh @ 477

Revision 477, 1.3 KB (checked in by ahu, 9 years ago)

Move from u_intxx_t to uintxx_t typedefs, which are preferred:
 http://lists.freedesktop.org/pipermail/release-wranglers/2004-August/000926.html
 http://www.oreillynet.com/pub/a/network/2003/10/07/michael_barr.html

massive removal of windows style line-endings

  • Property svn:eol-style set to native
  • Property svn:keywords set to author date id revision
Line 
1/*      ippreftree.hh
2 *      Copyright (C) 2004 Mark Bergsma <mark@nedworks.org>
3 *              This software is licensed under the terms of the GPL, version 2.
4 *
5 *      $Id$
6 */
7
8#include <string>
9#include <sys/types.h>
10#include <cstdlib>
11
12using namespace std;
13
14// Use old style C structs for efficiency
15typedef struct node_t {
16        node_t *child[2];
17        short value;
18} node_t;       
19
20class IPPrefTree{
21
22public:
23        IPPrefTree();
24        ~IPPrefTree();
25
26        void add(const string &prefix, const short value);     
27        void add(const uint32_t ip, const int preflen, const short value);
28       
29        short lookup(const string &prefix) const;
30        short lookup(const uint32_t ip, const int preflen) const;
31       
32        void clear();
33       
34        int getNodeCount() const;
35        int getMemoryUsage() const;
36
37private:
38        node_t *root;   // root of the tree
39        int nodecount;  // total number of nodes in the tree
40       
41        void addNode(node_t * node, const uint32_t ip, const uint32_t mask, const short value);
42        node_t * allocateNode();
43        const node_t * IPPrefTree::findDeepestFilledNode(const node_t *root, const uint32_t ip, const uint32_t mask) const;
44        void removeNode(node_t * node);
45       
46        inline uint32_t preflenToNetmask(const int preflen) const;
47        inline void parsePrefix(const string &prefix, uint32_t &ip, int &preflen) const;
48};
49
50class ParsePrefixException
51{
52public:
53        ParsePrefixException() { reason = ""; };
54        ParsePrefixException(string r) { reason = r; };
55       
56        string reason;
57};
Note: See TracBrowser for help on using the browser.