/
eqclass.cpp
81 lines (70 loc) · 1.91 KB
/
eqclass.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <algorithm>
#include "calcdb.h"
#include "eqclass.h"
ostream & operator<<(ostream& ostr, Eqnode& eqn){
int *fidx = Dbase_Ctrl_Blk::FreqIdx;
ostr << fidx[eqn.val] << " - " << eqn.support(); // << " " << eqn.hashval();
if (output_idlist){
//ostr << " [" << eqn.tidset << "]";
if (alg_type == basicmax || alg_type == maxcharm || closed_type == cmax)
ostr << " -- " << eqn.maxsup << " {" << eqn.maxset << "}";
}
return ostr;
}
Eqclass::~Eqclass()
{
//list<Eqnode *>::iterator ni = _nodelist.begin();
for_each(nlist().begin(), nlist().end(), delnode<Eqnode *>());
}
void Eqclass::add_node(int val)
{
Eqnode *eqn = new Eqnode(val);
_nodelist.push_back(eqn);
}
void Eqclass::add_node(Eqnode *eqn)
{
_nodelist.push_back(eqn);
}
void Eqclass::set_prefix(vector<int> &pref)
{
_prefix = pref;
}
void Eqclass::set_prefix(vector<int> &pref, Eqnode &node)
{
_prefix = pref;
_prefix.push_back(node.val);
}
void Eqclass::sort_prefix()
{
for (unsigned int i=0; i < _prefix.size(); ++i){
_prefix[i] = Dbase_Ctrl_Blk::FreqIdx[_prefix[i]];
}
sort(_prefix.begin(),_prefix.end());
}
ostream & Eqclass::print_prefix(bool supflg)
{
int iaPrefix[_prefix.size()];
for (unsigned int i=0; i < _prefix.size(); ++i){
// cout << Dbase_Ctrl_Blk::FreqIdx[_prefix[i]] << " ";
iaPrefix[i] = Dbase_Ctrl_Blk::FreqIdx[_prefix[i]];
}
sort(iaPrefix,iaPrefix+_prefix.size());
for (unsigned int i=0; i < _prefix.size(); ++i) cout << iaPrefix[i] << ' ';
//if (supflg) cout << " - " << _closedsup << " ";
return cout;
}
ostream & Eqclass::print_node(Eqnode &node)
{
print_prefix();
cout << node;
return cout;
}
//print with items remapped to their original value
ostream& operator << (ostream& fout, Eqclass& eq)
{
list<Eqnode *>::iterator ni = eq._nodelist.begin();
for (; ni != eq._nodelist.end(); ++ni){
eq.print_node(*(*ni)) << endl;
}
return fout;
}