Bcps 0.94.5
BcpsObjectPool.h
Go to the documentation of this file.
1/*===========================================================================*
2 * This file is part of the Branch, Constrain and Price Software (BiCePS) *
3 * *
4 * BiCePS is distributed under the Eclipse Public License as part of the *
5 * COIN-OR repository (http://www.coin-or.org). *
6 * *
7 * Authors: *
8 * *
9 * Yan Xu, Lehigh University *
10 * Ted Ralphs, Lehigh University *
11 * *
12 * Conceptual Design: *
13 * *
14 * Yan Xu, Lehigh University *
15 * Ted Ralphs, Lehigh University *
16 * Laszlo Ladanyi, IBM T.J. Watson Research Center *
17 * Matthew Saltzman, Clemson University *
18 * *
19 * Copyright (C) 2001-2017, Lehigh University, Yan Xu, and Ted Ralphs. *
20 * All Rights Reserved. *
21 *===========================================================================*/
22
23#ifndef BcpsObjectPool_h_
24#define BcpsObjectPool_h_
25
26#include <vector>
27
28#include "AlpsKnowledgePool.h"
29
30#include "BcpsObject.h"
31
32//#############################################################################
34//#############################################################################
35
37
38 protected:
39
40 std::vector<AlpsKnowledge *> objects_;
41
42 public:
43
46 virtual ~BcpsObjectPool() {
47 if (! objects_.empty()) {
48 freeGuts();
49 }
50 }
51
53 inline void freeGuts() {
54 for (int i = static_cast<int> (objects_.size() - 1); i > -1; --i) {
55 delete objects_[i];
56 }
57 objects_.clear();
58 }
59
61 inline void clear(){ objects_.clear(); }
62
64 virtual void addKnowledge(AlpsKnowledge * nk, double priority) {
65 objects_.push_back(nk);
66 }
67
69 virtual int getNumKnowledges() const {
70 return static_cast<int>(objects_.size());
71 }
72
74 virtual std::pair<AlpsKnowledge*, double> getKnowledge() const {
75 return std::make_pair(objects_[0], 0.0);
76 }
77
79 virtual bool hasKnowledge() const
80 { return objects_.empty() ? false : true; }
81
83 void deleteObject(int k) {
84 assert(k > -1 && k < ((int)objects_.size()));
85
86 AlpsKnowledge *objectK = getObject(k);
87 std::vector<AlpsKnowledge *>::iterator pos;
88 pos = objects_.begin() + k;
89 objects_.erase(pos);
90
91 // Free memory of object k.
92 delete objectK;
93 }
94
96 const std::vector<AlpsKnowledge *>& getObjects() const { return objects_; }
97
99 AlpsKnowledge *getObject(int k) const { return objects_[k]; }
100};
101
102//#############################################################################
103
105 public:
108
110 void addConstraint(BcpsConstraint * con) { objects_.push_back(con); }
111
113 void deleteConstraint(int k) { deleteObject(k); }
114
116 int getNumConstraints() const { return getNumKnowledges(); }
117
119 const std::vector<AlpsKnowledge *>& getConstraints() const {return objects_;}
120
122 AlpsKnowledge *getConstraint(int k) const {return getObject(k);}
123};
124
125//#############################################################################
126
128 public:
130 virtual ~BcpsVariablePool() {}
131
133 void addVariable(BcpsVariable * var) { objects_.push_back(var); }
134
136 void deleteVariable(int k) { deleteObject(k); }
137
139 int getNumVariables() const { return getNumKnowledges(); }
140
142 const std::vector<AlpsKnowledge *>& getVariables() const {return objects_;}
143
145 AlpsKnowledge *getVariable(int k) const {return getObject(k);}
146};
147
148//#############################################################################
149
150#endif // End of file
const std::vector< AlpsKnowledge * > & getConstraints() const
Get the vector of constraints.
virtual ~BcpsConstraintPool()
void deleteConstraint(int k)
Delete constraint k from pool.
AlpsKnowledge * getConstraint(int k) const
Get a constraints.
void addConstraint(BcpsConstraint *con)
Add a constraint to pool.
int getNumConstraints() const
Query how many constraints are in the pool.
Object pool is used to store objects.
virtual std::pair< AlpsKnowledge *, double > getKnowledge() const
Query a knowledge, but doesn't remove it from the pool.
virtual void addKnowledge(AlpsKnowledge *nk, double priority)
Add a knowledge to pool.
const std::vector< AlpsKnowledge * > & getObjects() const
Get all objects.
std::vector< AlpsKnowledge * > objects_
BcpsObjectPool()
Default construct.
virtual bool hasKnowledge() const
Check whether the pool has knowledge.
AlpsKnowledge * getObject(int k) const
Get a object.
void deleteObject(int k)
Delete object k from pool.
void freeGuts()
Free object pointers.
virtual int getNumKnowledges() const
Query how many knowledges are in the pool.
virtual ~BcpsObjectPool()
void clear()
Reset to empty.
virtual ~BcpsVariablePool()
int getNumVariables() const
Query how many variables are in the pool.
void addVariable(BcpsVariable *var)
Add a variable to pool.
AlpsKnowledge * getVariable(int k) const
Get the vector of variables.
void deleteVariable(int k)
Delete variable k from pool.
const std::vector< AlpsKnowledge * > & getVariables() const
Get the vector of variables.