@@ -30,23 +30,29 @@ vector< pair<int,int> > * PolicyItem::varvals() {
3030 return state->varvals ();
3131}
3232
33-
34- Policy::~Policy () {
33+ template < typename T>
34+ Policy<T> ::~Policy () {
3535 if (root)
3636 delete root;
3737
3838 for (auto item : all_items)
3939 delete item;
4040}
41+ template Policy<PolicyItem>::~Policy ();
42+ template Policy<FSAP>::~Policy ();
43+ template Policy<SolutionStep>::~Policy ();
4144
4245// TODO: Revisit this comparison -- just doing a pointer comparison for now
43- bool fsap_compare (PolicyItem* first, PolicyItem* second) {
46+ bool fsap_compare (PolicyItem *first, PolicyItem *second)
47+ {
4448 return ((const FSAP*)first) < ((const FSAP*)second);
4549}
4650bool solstep_compare (PolicyItem* first, PolicyItem* second) {
4751 return *((const SolutionStep*)first) < *((const SolutionStep*)second);
4852}
49- void Policy::write_policy (string fname, bool fsap) {
53+
54+ template <typename T>
55+ void Policy<T>::write_policy(string fname, bool fsap) {
5056
5157 if (!fsap)
5258 all_items.sort (fsap ? fsap_compare : solstep_compare);
@@ -76,24 +82,39 @@ void Policy::write_policy(string fname, bool fsap) {
7682
7783 outfile.close ();
7884}
85+ template void Policy<PolicyItem>::write_policy(string fname, bool fsap);
86+ template void Policy<FSAP>::write_policy(string fname, bool fsap);
87+ template void Policy<SolutionStep>::write_policy(string fname, bool fsap);
7988
80- void Policy::dump (bool fsap) const {
89+ template <typename T>
90+ void Policy<T>::dump(bool fsap) const {
8191 cout << (fsap ? " FSAP " : " " ) << " Policy:" << endl;
8292 for (auto item : all_items)
8393 item->dump ();
8494}
95+ template void Policy<PolicyItem>::dump(bool fsap) const ;
96+ template void Policy<SolutionStep>::dump(bool fsap) const ;
8597
86- void Policy::generate_cpp_input (ofstream &outfile) const {
98+ template <typename T>
99+ void Policy<T>::generate_cpp_input(ofstream &outfile) const {
87100 root->generate_cpp_input (outfile);
88101}
102+ template void Policy<PolicyItem>::generate_cpp_input(ofstream &outfile) const ;
103+ template void Policy<FSAP>::generate_cpp_input(ofstream &outfile) const ;
104+ template void Policy<SolutionStep>::generate_cpp_input(ofstream &outfile) const ;
89105
90- void Policy::add_item (PolicyItem *item) {
91- list<PolicyItem *> reg_items;
106+ template <typename T>
107+ void Policy<T>::add_item(T *item) {
108+ list<T *> reg_items;
92109 reg_items.push_back (item);
93110 update_policy (reg_items);
94111}
112+ template void Policy<PolicyItem>::add_item(PolicyItem *item);
113+ template void Policy<FSAP>::add_item(FSAP *item);
114+ template void Policy<SolutionStep>::add_item(SolutionStep *item);
95115
96- void Policy::update_policy (list<PolicyItem *> ®_items) {
116+ template <typename T>
117+ void Policy<T>::update_policy(list<T *> ®_items) {
97118
98119 list<MatchtreeItem *> mtis;
99120 for (auto item : reg_items)
@@ -105,28 +126,36 @@ void Policy::update_policy(list<PolicyItem *> ®_items) {
105126 else
106127 root = new MatchtreeSwitch (mtis, vars_seen);
107128 all_items.insert (all_items.end (), reg_items.begin (), reg_items.end ());
108-
109129}
130+ template void Policy<PolicyItem>::update_policy(list<PolicyItem *> ®_items);
131+ template void Policy<FSAP>::update_policy(list<FSAP *> ®_items);
132+ template void Policy<SolutionStep>::update_policy(list<SolutionStep *> ®_items);
110133
111- bool Policy::check_consistent_match (const PR2State &curr) {
134+ template <typename T>
135+ bool Policy<T>::check_consistent_match(const PR2State &curr) {
112136 if (root)
113137 return root->check_consistent_match (curr);
114138 else
115139 return false ;
116140}
117141
118- bool Policy::check_entailed_match (const PR2State &curr) {
142+ template <typename T>
143+ bool Policy<T>::check_entailed_match(const PR2State &curr) {
119144 if (root)
120145 return root->check_entailed_match (curr);
121146 else
122147 return false ;
123148}
149+ template bool Policy<PolicyItem>::check_entailed_match(const PR2State &curr);
150+ template bool Policy<FSAP>::check_entailed_match(const PR2State &curr);
151+ template bool Policy<SolutionStep>::check_entailed_match(const PR2State &curr);
124152
125- void Policy::rebuild () {
153+ template <typename T>
154+ void Policy<T>::rebuild() {
126155
127156 // We are only going to keep the items that are active
128157 list<MatchtreeItem *> mtis;
129- list<PolicyItem *> new_items;
158+ list<T *> new_items;
130159 for (auto item : all_items) {
131160 if (item->is_active ) {
132161 mtis.push_back ((MatchtreeItem *)item);
@@ -143,3 +172,7 @@ void Policy::rebuild() {
143172 all_items.swap (new_items);
144173
145174}
175+ template void Policy<PolicyItem>::rebuild();
176+ template void Policy<FSAP>::rebuild();
177+ template void Policy<SolutionStep>::rebuild();
178+
0 commit comments