diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-02-19 00:27:43 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-02-19 00:27:43 +0100 |
commit | aae3b8bfb83abec0f1bb8e4c854c156c03be5ca8 (patch) | |
tree | 305f1287a8cc6a896318a4de5f2b43686e7223b3 /trie.h | |
parent | Made to compile as C++. (diff) | |
download | calp-aae3b8bfb83abec0f1bb8e4c854c156c03be5ca8.tar.gz calp-aae3b8bfb83abec0f1bb8e4c854c156c03be5ca8.tar.xz |
Started full rewrite in C++.
Diffstat (limited to '')
-rw-r--r-- | trie.h | 68 |
1 files changed, 41 insertions, 27 deletions
@@ -1,46 +1,60 @@ #ifndef TRIE_H #define TRIE_H -#include <stdio.h> +#include <iostream> -#include "macro.h" +template <typename T> +struct trie_node { + char c; + T* value = NULL; + trie_node<T>* next = NULL; + trie_node<T>* 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<T>* next, trie_node<T>* 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 <class T> +std::ostream& operator<<(std::ostream&, trie_node<T>* node); + +template <typename T> +struct trie { + trie_node<T>* 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 <class T> +std::ostream& operator<<(std::ostream&, trie<T>* 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 */ |