Skip to content

Commit b7dcd00

Browse files
committed
debugging
1 parent fb2a1a0 commit b7dcd00

File tree

2 files changed

+135
-189
lines changed

2 files changed

+135
-189
lines changed

include/suffix_tree.h

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class SuffixTree
2121
{
2222
public:
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, 0, 0), remainder(0), pos(0), ls() {}
24+
SuffixTree(string str):test_str(str), root(test_str), active_point(&root, NULL, 0), remainder(0), pos(0), base_pos(0), ls() {}
2525
int 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
@@ -94,7 +94,7 @@ class SuffixTree
9494
begin = b;
9595
end = e;
9696
endpoint = NULL;
97-
//std::cout << "Edge initialized" << std::endl;
97+
std::cout << "Edge initialized" << std::endl;
9898
}
9999

100100
void change_edge(unsigned int b, unsigned int e)
@@ -167,7 +167,7 @@ class SuffixTree
167167
make_pair(edge, true);
168168
edges.insert(make_pair(edge, true));
169169
findedges.insert(make_pair(test_node_str[edge->begin], edge));
170-
//cout << "edge added. Now we have " << edges.size() << "edges." << endl;
170+
cout << "edge added. Now we have " << edges.size() << "edges." << endl;
171171
}
172172

173173
void del_edge(Edge* edge) {
@@ -178,23 +178,28 @@ class SuffixTree
178178
else {
179179
// note we should erase the findedges too
180180
edges.erase(edge);
181-
//cout << "delete" << (*edge)[0] << endl;
181+
cout << "delete" << (*edge)[0] << endl;
182182
findedges.erase((*edge)[0]);
183-
//cout << "edge deleted. Now we have " << edges.size() << "edges." << endl;
183+
cout << "edge deleted. Now we have " << edges.size() << "edges." << endl;
184184
}
185185

186186
}
187187

188188
// find edge by the first char
189189
Edge* find_edge(char c)
190190
{
191-
//cout << "finding edge";
191+
cout << "finding edge char " << c;
192192
map<char, Edge*>::iterator iter = findedges.find(c);
193-
//cout << "founded?" << endl;
194-
if (iter != findedges.end())
193+
cout << " founded? ";
194+
195+
if (iter != findedges.end()) {
196+
cout << "yes." << endl;
195197
return iter->second;
196-
else
198+
}
199+
else {
200+
cout << "no." << endl;
197201
return NULL;
202+
}
198203
}
199204

200205
bool isleaf() { return edges.empty(); }
@@ -224,10 +229,10 @@ class SuffixTree
224229
class ActivePoint{
225230
public:
226231
Node* active_node;
227-
char active_edge;
232+
Edge* active_edge;
228233
int active_length;
229234

230-
ActivePoint(Node* node, char edge, int length):
235+
ActivePoint(Node* node, Edge* edge, int length):
231236
active_node(node), active_edge(edge), active_length(length) { std::cout << "ActivePoint initialized" << std::endl; }
232237
};
233238

@@ -236,8 +241,8 @@ class SuffixTree
236241

237242
Node* get_active_node(void) { return active_point.active_node; }
238243
void set_active_node(Node* node) { active_point.active_node = node; cout << "Active node set as " << node << endl; }
239-
char get_active_edge(void) { return active_point.active_edge; }
240-
void set_active_edge(char edge) { active_point.active_edge = edge; }
244+
Edge* get_active_edge(void) { return active_point.active_edge; }
245+
void set_active_edge(Edge* edge) { active_point.active_edge = edge; }
241246
int get_active_length(void) { return active_point.active_length; }
242247
void set_active_length(int len) { active_point.active_length = len; }
243248
void inc_active_len() { active_point.active_length++; }
@@ -247,6 +252,7 @@ class SuffixTree
247252
int remainder;
248253
// how many characters inserted?
249254
unsigned int pos;
255+
unsigned int base_pos; // the beginnig position of suffixes need to be inserted
250256
char get_ele(int i) { return test_str[i]; }
251257
// insert a char from pos to suffix tree
252258
int insert();
@@ -258,21 +264,32 @@ class SuffixTree
258264
Node* seperate_edge(Node * node, Edge* edge, int rule);
259265

260266
// check if we can change active node
261-
void check_an(void)
267+
void check_active_node(void)
262268
{
263269
Node* node = get_active_node();
264-
Edge* edge = node->find_edge(get_active_edge());
270+
Edge* edge = get_active_edge();
265271

266272
if (edge == NULL)
267273
return;
268274

269-
int edge_size = edge->end - edge->begin + 1;
275+
unsigned int edge_size = edge->end - edge->begin + 1;
276+
unsigned int length = get_active_length();
270277

271278
// update
272-
if (edge_size == get_active_length()) {
279+
if (edge_size == length) {
273280
set_active_node(edge->endpoint);
274281
set_active_edge(0);
275282
set_active_length(0);
283+
base_pos += edge_size;
284+
}
285+
else if (length > edge_size) {
286+
set_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();
276293
}
277294
}
278295

@@ -292,7 +309,7 @@ class SuffixTree
292309
prev = curr;
293310
curr = node;
294311

295-
if (!first) {
312+
if (first == false) {
296313
prev->suffix_link = curr;
297314
cout << "Suffix link added from prev " << prev << " to curr " << curr << endl;
298315
}

0 commit comments

Comments
 (0)