Commit 6ec783e7 authored by Martin Sustrik's avatar Martin Sustrik

prefix_tree_t renamed to trie_t

parent beea535f
...@@ -89,7 +89,6 @@ libzmq_la_SOURCES = \ ...@@ -89,7 +89,6 @@ libzmq_la_SOURCES = \
poll.hpp \ poll.hpp \
poller.hpp \ poller.hpp \
pair.hpp \ pair.hpp \
prefix_tree.hpp \
pub.hpp \ pub.hpp \
pull.hpp \ pull.hpp \
push.hpp \ push.hpp \
...@@ -110,6 +109,7 @@ libzmq_la_SOURCES = \ ...@@ -110,6 +109,7 @@ libzmq_la_SOURCES = \
tcp_socket.hpp \ tcp_socket.hpp \
thread.hpp \ thread.hpp \
transient_session.hpp \ transient_session.hpp \
trie.hpp \
uuid.hpp \ uuid.hpp \
windows.hpp \ windows.hpp \
wire.hpp \ wire.hpp \
...@@ -146,7 +146,6 @@ libzmq_la_SOURCES = \ ...@@ -146,7 +146,6 @@ libzmq_la_SOURCES = \
pgm_receiver.cpp \ pgm_receiver.cpp \
pgm_sender.cpp \ pgm_sender.cpp \
pgm_socket.cpp \ pgm_socket.cpp \
prefix_tree.cpp \
pipe.cpp \ pipe.cpp \
poll.cpp \ poll.cpp \
pull.cpp \ pull.cpp \
...@@ -167,6 +166,7 @@ libzmq_la_SOURCES = \ ...@@ -167,6 +166,7 @@ libzmq_la_SOURCES = \
tcp_socket.cpp \ tcp_socket.cpp \
thread.cpp \ thread.cpp \
transient_session.cpp \ transient_session.cpp \
trie.cpp \
uuid.cpp \ uuid.cpp \
xrep.cpp \ xrep.cpp \
xreq.cpp \ xreq.cpp \
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include "../include/zmq.h" #include "../include/zmq.h"
#include "prefix_tree.hpp" #include "trie.hpp"
#include "socket_base.hpp" #include "socket_base.hpp"
#include "i_terminate_events.hpp" #include "i_terminate_events.hpp"
#include "fq.hpp" #include "fq.hpp"
...@@ -61,7 +61,7 @@ namespace zmq ...@@ -61,7 +61,7 @@ namespace zmq
fq_t fq; fq_t fq;
// The repository of subscriptions. // The repository of subscriptions.
prefix_tree_t subscriptions; trie_t subscriptions;
// If true, 'message' contains a matching message to return on the // If true, 'message' contains a matching message to return on the
// next recv call. // next recv call.
......
...@@ -28,16 +28,16 @@ ...@@ -28,16 +28,16 @@
#endif #endif
#include "err.hpp" #include "err.hpp"
#include "prefix_tree.hpp" #include "trie.hpp"
zmq::prefix_tree_t::prefix_tree_t () : zmq::trie_t::trie_t () :
refcnt (0), refcnt (0),
min (0), min (0),
count (0) count (0)
{ {
} }
zmq::prefix_tree_t::~prefix_tree_t () zmq::trie_t::~trie_t ()
{ {
if (count == 1) if (count == 1)
delete next.node; delete next.node;
...@@ -49,7 +49,7 @@ zmq::prefix_tree_t::~prefix_tree_t () ...@@ -49,7 +49,7 @@ zmq::prefix_tree_t::~prefix_tree_t ()
} }
} }
void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_) void zmq::trie_t::add (unsigned char *prefix_, size_t size_)
{ {
// We are at the node corresponding to the prefix. We are done. // We are at the node corresponding to the prefix. We are done.
if (!size_) { if (!size_) {
...@@ -69,10 +69,10 @@ void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_) ...@@ -69,10 +69,10 @@ void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_)
} }
else if (count == 1) { else if (count == 1) {
unsigned char oldc = min; unsigned char oldc = min;
prefix_tree_t *oldp = next.node; trie_t *oldp = next.node;
count = (min < c ? c - min : min - c) + 1; count = (min < c ? c - min : min - c) + 1;
next.table = (prefix_tree_t**) next.table = (trie_t**)
malloc (sizeof (prefix_tree_t*) * count); malloc (sizeof (trie_t*) * count);
zmq_assert (next.table); zmq_assert (next.table);
for (unsigned char i = 0; i != count; ++i) for (unsigned char i = 0; i != count; ++i)
next.table [i] = 0; next.table [i] = 0;
...@@ -84,8 +84,8 @@ void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_) ...@@ -84,8 +84,8 @@ void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_)
// The new character is above the current character range. // The new character is above the current character range.
unsigned char old_count = count; unsigned char old_count = count;
count = c - min + 1; count = c - min + 1;
next.table = (prefix_tree_t**) realloc ((void*) next.table, next.table = (trie_t**) realloc ((void*) next.table,
sizeof (prefix_tree_t*) * count); sizeof (trie_t*) * count);
zmq_assert (next.table); zmq_assert (next.table);
for (unsigned char i = old_count; i != count; i++) for (unsigned char i = old_count; i != count; i++)
next.table [i] = NULL; next.table [i] = NULL;
...@@ -95,11 +95,11 @@ void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_) ...@@ -95,11 +95,11 @@ void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_)
// The new character is below the current character range. // The new character is below the current character range.
unsigned char old_count = count; unsigned char old_count = count;
count = (min + old_count) - c; count = (min + old_count) - c;
next.table = (prefix_tree_t**) realloc ((void*) next.table, next.table = (trie_t**) realloc ((void*) next.table,
sizeof (prefix_tree_t*) * count); sizeof (trie_t*) * count);
zmq_assert (next.table); zmq_assert (next.table);
memmove (next.table + min - c, next.table, memmove (next.table + min - c, next.table,
old_count * sizeof (prefix_tree_t*)); old_count * sizeof (trie_t*));
for (unsigned char i = 0; i != min - c; i++) for (unsigned char i = 0; i != min - c; i++)
next.table [i] = NULL; next.table [i] = NULL;
min = c; min = c;
...@@ -109,21 +109,21 @@ void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_) ...@@ -109,21 +109,21 @@ void zmq::prefix_tree_t::add (unsigned char *prefix_, size_t size_)
// If next node does not exist, create one. // If next node does not exist, create one.
if (count == 1) { if (count == 1) {
if (!next.node) { if (!next.node) {
next.node = new (std::nothrow) prefix_tree_t; next.node = new (std::nothrow) trie_t;
zmq_assert (next.node); zmq_assert (next.node);
} }
next.node->add (prefix_ + 1, size_ - 1); next.node->add (prefix_ + 1, size_ - 1);
} }
else { else {
if (!next.table [c - min]) { if (!next.table [c - min]) {
next.table [c - min] = new (std::nothrow) prefix_tree_t; next.table [c - min] = new (std::nothrow) trie_t;
zmq_assert (next.table [c - min]); zmq_assert (next.table [c - min]);
} }
next.table [c - min]->add (prefix_ + 1, size_ - 1); next.table [c - min]->add (prefix_ + 1, size_ - 1);
} }
} }
bool zmq::prefix_tree_t::rm (unsigned char *prefix_, size_t size_) bool zmq::trie_t::rm (unsigned char *prefix_, size_t size_)
{ {
if (!size_) { if (!size_) {
if (!refcnt) if (!refcnt)
...@@ -136,7 +136,7 @@ bool zmq::prefix_tree_t::rm (unsigned char *prefix_, size_t size_) ...@@ -136,7 +136,7 @@ bool zmq::prefix_tree_t::rm (unsigned char *prefix_, size_t size_)
if (!count || c < min || c >= min + count) if (!count || c < min || c >= min + count)
return false; return false;
prefix_tree_t *next_node = trie_t *next_node =
count == 1 ? next.node : next.table [c - min]; count == 1 ? next.node : next.table [c - min];
if (!next_node) if (!next_node)
...@@ -145,11 +145,11 @@ bool zmq::prefix_tree_t::rm (unsigned char *prefix_, size_t size_) ...@@ -145,11 +145,11 @@ bool zmq::prefix_tree_t::rm (unsigned char *prefix_, size_t size_)
return next_node->rm (prefix_ + 1, size_ - 1); return next_node->rm (prefix_ + 1, size_ - 1);
} }
bool zmq::prefix_tree_t::check (unsigned char *data_, size_t size_) bool zmq::trie_t::check (unsigned char *data_, size_t size_)
{ {
// This function is on critical path. It deliberately doesn't use // This function is on critical path. It deliberately doesn't use
// recursion to get a bit better performance. // recursion to get a bit better performance.
prefix_tree_t *current = this; trie_t *current = this;
while (true) { while (true) {
// We've found a corresponding subscription! // We've found a corresponding subscription!
......
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef __ZMQ_PREFIX_TREE_HPP_INCLUDED__ #ifndef __ZMQ_TRIE_HPP_INCLUDED__
#define __ZMQ_PREFIX_TREE_HPP_INCLUDED__ #define __ZMQ_TRIE_HPP_INCLUDED__
#include <stddef.h> #include <stddef.h>
...@@ -27,12 +27,12 @@ ...@@ -27,12 +27,12 @@
namespace zmq namespace zmq
{ {
class prefix_tree_t class trie_t
{ {
public: public:
prefix_tree_t (); trie_t ();
~prefix_tree_t (); ~trie_t ();
void add (unsigned char *prefix_, size_t size_); void add (unsigned char *prefix_, size_t size_);
bool rm (unsigned char *prefix_, size_t size_); bool rm (unsigned char *prefix_, size_t size_);
...@@ -44,9 +44,12 @@ namespace zmq ...@@ -44,9 +44,12 @@ namespace zmq
unsigned char min; unsigned char min;
unsigned char count; unsigned char count;
union { union {
class prefix_tree_t *node; class trie_t *node;
class prefix_tree_t **table; class trie_t **table;
} next; } next;
trie_t (const trie_t&);
void operator = (const trie_t&);
}; };
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment