aboutsummaryrefslogtreecommitdiff
path: root/trie.h
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2019-02-19 00:27:43 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2019-02-19 00:27:43 +0100
commitaae3b8bfb83abec0f1bb8e4c854c156c03be5ca8 (patch)
tree305f1287a8cc6a896318a4de5f2b43686e7223b3 /trie.h
parentMade to compile as C++. (diff)
downloadcalp-aae3b8bfb83abec0f1bb8e4c854c156c03be5ca8.tar.gz
calp-aae3b8bfb83abec0f1bb8e4c854c156c03be5ca8.tar.xz
Started full rewrite in C++.
Diffstat (limited to 'trie.h')
-rw-r--r--trie.h68
1 files changed, 41 insertions, 27 deletions
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 <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 */