-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathconspool.cpp
60 lines (51 loc) · 1.6 KB
/
conspool.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
#include "conspool.h"
ConsPool::ConsPool(CVRPInstance &cvrp) : cvrp(cvrp), consMap(cvrp.g){}
void ConsPool::addConsInfo(Edge e, double coef, SCIP_CONS *cons){
if(coef != 0){
ConsInfo *consInfo = new ConsInfo(coef, cons);
consInfo->row = NULL;
consMap[e].push_back(consInfo);
}
}
void ConsPool::removeConsInfo(Edge e, SCIP_CONS *cons){
for (list<ConsInfo*>::iterator it = consMap[e].begin(); it != consMap[e].end(); ++it){
if((*it)->cons != NULL && (*it)->cons == cons){
consMap[e].erase(it);
break;
}
}
}
void ConsPool::removeConsInfo(Edge e, SCIP_ROW *row){
for (list<ConsInfo*>::iterator it = consMap[e].begin(); it != consMap[e].end(); ++it){
if((*it)->row != NULL && (*it)->row == row){
consMap[e].erase(it);
break;
}
}
}
void ConsPool::addConsInfo(int e, double coef, SCIP_CONS *cons){
Edge e2 = cvrp.g.edgeFromId(e);
addConsInfo(e2, coef, cons);
}
void ConsPool::removeConsInfo(int e, SCIP_CONS *cons){
Edge e2 = cvrp.g.edgeFromId(e);
removeConsInfo(e2, cons);
}
void ConsPool::addConsInfo(Edge e, double coef, SCIP_ROW *row){
if(coef != 0){
ConsInfo *consInfo = new ConsInfo(coef, row);
consInfo->cons = NULL;
consMap[e].push_back(consInfo);
}
}
list<ConsInfo*> ConsPool::getConsInfo(Edge e){
return consMap[e];
}
ConsPool::~ConsPool(){
for(EdgeIt e(cvrp.g); e != INVALID; ++e){
for (list<ConsInfo*>::iterator it = consMap[e].begin(); it != consMap[e].end(); ++it){
free(*it);
}
consMap[e].clear();
}
}