@@ -21,7 +21,7 @@ class SuffixTree
2121{
2222public:
2323// active point is initialized as (root, None, 0), remainder initialized as 1
24- SuffixTree (string str):test_str(str), root(test_str), active_point(&root, NULL , 0 ), remainder(0 ), pos(0 ), base_pos (0 ), ls() {}
24+ SuffixTree (string str):test_str(str), root(test_str), active_point(&root, 0 , 0 ), remainder(0 ), pos(0 ), active_e (0 ), ls() {}
2525int construct (void );
2626
2727// return -1 if no such sub exist, return the beginning postion of this substring in thr original string if it exist
@@ -229,10 +229,10 @@ class SuffixTree
229229class ActivePoint {
230230public:
231231Node* active_node;
232- Edge* active_edge;
232+ char active_edge;
233233int active_length;
234234
235- ActivePoint (Node* node, Edge* edge, int length):
235+ ActivePoint (Node* node, char edge, int length):
236236active_node (node), active_edge(edge), active_length(length) { std::cout << " ActivePoint initialized" << std::endl; }
237237};
238238
@@ -241,8 +241,11 @@ class SuffixTree
241241
242242Node* get_active_node (void ) { return active_point.active_node ; }
243243void set_active_node (Node* node) { active_point.active_node = node; cout << " Active node set as " << node << endl; }
244- Edge* get_active_edge (void ) { return active_point.active_edge ; }
245- void set_active_edge (Edge* edge) { active_point.active_edge = edge; }
244+ char get_active_edge (void )
245+ {
246+ return test_str[active_e];
247+ }
248+
246249int get_active_length (void ) { return active_point.active_length ; }
247250void set_active_length (int len) { active_point.active_length = len; }
248251void inc_active_len () { active_point.active_length ++; }
@@ -252,7 +255,7 @@ class SuffixTree
252255int remainder;
253256// how many characters inserted?
254257unsigned int pos;
255- unsigned int base_pos ;// the beginnig position of suffixes need to be inserted
258+ unsigned int active_e ;// the beginnig position of suffixes need to be inserted
256259char get_ele (int i) { return test_str[i]; }
257260// insert a char from pos to suffix tree
258261int insert ();
@@ -261,36 +264,30 @@ class SuffixTree
261264int print_node (Node* node, int level);
262265
263266
264- Node* seperate_edge (Node * node, Edge* edge, int rule );
267+ Node* seperate_edge (Node * node, Edge* edge);
265268
266269// check if we can change active node
267- void check_active_node (void )
270+ bool check_active_node (void )
268271{
269272Node* node = get_active_node ();
270- Edge* edge = get_active_edge ();
273+ char a_char = get_active_edge ();
274+ Edge* edge = node->find_edge (a_char);
271275
272276if (edge == NULL )
273- return ;
277+ return false ;
274278
275279unsigned int edge_size = edge->end - edge->begin + 1 ;
276280unsigned int length = get_active_length ();
277281
278282// update
279- if (edge_size == length ) {
283+ if (length >= edge_size ) {
280284set_active_node (edge->endpoint );
281- set_active_edge (0 );
282- set_active_length (0 );
283- base_pos += edge_size;
284- }
285- else if (length > edge_size) {
286285set_active_length (length-edge_size);
287- set_active_node (edge->endpoint );
288- int new_length = get_active_length ();
289- base_pos += edge_size;
290- Edge *new_active_edge = edge->endpoint ->find_edge (get_ele (base_pos));
291- set_active_edge (new_active_edge);
292- check_active_node ();
286+ active_e += edge_size;
287+
288+ return true ;
293289}
290+ return false ;
294291}
295292
296293// this class indicate when shall we insert a suffix link
0 commit comments