From aae3b8bfb83abec0f1bb8e4c854c156c03be5ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 19 Feb 2019 00:27:43 +0100 Subject: Started full rewrite in C++. --- trie.h | 68 ++++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 27 deletions(-) (limited to 'trie.h') diff --git a/trie.h b/trie.h index 404864d3..d672125b 100644 --- a/trie.h +++ b/trie.h @@ -1,46 +1,60 @@ #ifndef TRIE_H #define TRIE_H -#include +#include -#include "macro.h" +template +struct trie_node { + char c; + T* value = NULL; + trie_node* next = NULL; + trie_node* child = NULL; -#define TRIE(T) TEMPL(trie, T) -#define TRIE_NODE(T) TEMPL(trie_node, T) + trie_node (char c); + trie_node (char c, trie_node* next, trie_node* child); -#endif /* TRIE_H */ -#ifdef TYPE + // ~trie_node (); +}; -typedef struct TRIE_NODE(TYPE) { - char c; - TYPE* value; - struct TRIE_NODE(TYPE)* next; - struct TRIE_NODE(TYPE)* child; -} TRIE_NODE(TYPE); +template +std::ostream& operator<<(std::ostream&, trie_node* node); + +template +struct trie { + trie_node* root; + + trie (); + // ~trie (); -typedef struct { - TRIE_NODE(TYPE)* root; -} TRIE(TYPE); + int push_back (const char* key, const T&); + T& operator[] ( char* key ); -INIT_F ( TRIE(TYPE) ); + bool empty () { return this->root->child == NULL; } +}; -INIT_F (TRIE_NODE(TYPE), char c); +template +std::ostream& operator<<(std::ostream&, trie* trie); -INIT_F (TRIE_NODE(TYPE), - char c, TRIE_NODE(TYPE)* next, TRIE_NODE(TYPE)* child ); -int PUSH(TRIE(TYPE)) ( TRIE(TYPE)* trie, char* key, TYPE* val ); +// INIT_F ( TRIE(TYPE) ); -TYPE* GET(TRIE(TYPE)) ( TRIE(TYPE)* trie, char* key ); +// INIT_F (TRIE_NODE(TYPE), char c); -FREE_F(TRIE_NODE(TYPE)); +// INIT_F (TRIE_NODE(TYPE), +// char c, TRIE_NODE(TYPE)* next, TRIE_NODE(TYPE)* child ); -FREE_F(TRIE(TYPE)); +// int PUSH(TRIE(TYPE)) ( TRIE(TYPE)* trie, char* key, TYPE* val ); -int EMPTY(TRIE(TYPE))(TRIE(TYPE)*); +// TYPE* GET(TRIE(TYPE)) ( TRIE(TYPE)* trie, char* key ); -FMT_F(TRIE_NODE(TYPE)); -FMT_F(TRIE(TYPE)); +// FREE_F(TRIE_NODE(TYPE)); -#endif /* TYPE */ +// FREE_F(TRIE(TYPE)); + +// int EMPTY(TRIE(TYPE))(TRIE(TYPE)*); + +// FMT_F(TRIE_NODE(TYPE)); +// FMT_F(TRIE(TYPE)); + +#endif /* TRIE_H */ -- cgit v1.2.3