You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ma...@apache.org on 2010/03/20 00:30:37 UTC
svn commit: r925484 -
/incubator/trafficserver/traffic/trunk/proxy/http2/remap/Trie.h
Author: manjesh
Date: Fri Mar 19 23:30:37 2010
New Revision: 925484
URL: http://svn.apache.org/viewvc?rev=925484&view=rev
Log:
TS-262: 'privatizing' child array and controlling access through getter/setter to ensure typecasting
Modified:
incubator/trafficserver/traffic/trunk/proxy/http2/remap/Trie.h
Modified: incubator/trafficserver/traffic/trunk/proxy/http2/remap/Trie.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/http2/remap/Trie.h?rev=925484&r1=925483&r2=925484&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/proxy/http2/remap/Trie.h (original)
+++ incubator/trafficserver/traffic/trunk/proxy/http2/remap/Trie.h Fri Mar 19 23:30:37 2010
@@ -53,18 +53,22 @@ public:
private:
static const int N_NODE_CHILDREN = 256;
- struct Node
+ class Node
{
+ public:
T value;
bool occupied;
int rank;
- Node *children[N_NODE_CHILDREN];
void Clear() {
occupied = false;
rank = 0;
bzero(children, sizeof(Node *) * N_NODE_CHILDREN);
};
void Print(const char *debug_tag) const;
+ inline Node* GetChild(char index) const { return children[static_cast<unsigned char>(index)]; };
+ inline void SetChild(char index, Node *child) { children[static_cast<unsigned char>(index)] = child; };
+ private:
+ Node *children[N_NODE_CHILDREN];
};
Node m_root;
@@ -110,12 +114,12 @@ Trie<T>::Insert(const char *key, const T
if (i == key_len) {
break;
}
- next_node = curr_node->children[key[i]];
+ next_node = curr_node->GetChild(key[i]);
if (!next_node) {
while (i < key_len) {
Debug("Trie::Insert", "Creating child node for char %c (%d)", key[i], key[i]);
- curr_node->children[key[i]] = static_cast<Node*>(ink_malloc(sizeof(Node)));
- curr_node = curr_node->children[key[i]];
+ curr_node->SetChild(key[i], static_cast<Node*>(ink_malloc(sizeof(Node))));
+ curr_node = curr_node->GetChild(key[i]);
curr_node->Clear();
++i;
}
@@ -167,7 +171,7 @@ Trie<T>::Search(const char *key, T *&val
if (i == key_len) {
break;
}
- curr_node = curr_node->children[key[i]];
+ curr_node = curr_node->GetChild(key[i]);
++i;
}
@@ -183,10 +187,12 @@ template<typename T>
void
Trie<T>::_Clear(Node *node)
{
+ Node *child;
for (int i = 0; i < N_NODE_CHILDREN; ++i) {
- if (node->children[i]) {
- _Clear(node->children[i]);
- ink_free(node->children[i]);
+ child = node->GetChild(i);
+ if (child) {
+ _Clear(child);
+ ink_free(child);
}
}
}
@@ -211,7 +217,7 @@ Trie<T>::Node::Print(const char *debug_t
Debug(debug_tag, "Node is not occupied");
}
for (int i = 0; i < N_NODE_CHILDREN; ++i) {
- if (children[i]) {
+ if (GetChild(i)) {
Debug(debug_tag, "Node has child for char %c", static_cast<char>(i));
}
}