00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00015
00016
00017
00018
00020
00021
00022 #ifndef RANK_CONSTRAINT_HH
00023 #define RANK_CONSTRAINT_HH
00024
00025
00026 #include "abacus/constraint.h"
00027 #include <vector>
00028
00029 using namespace std;
00030
00031 class Graph;
00032
00033
00039 class RankConstraint: public ABA_CONSTRAINT {
00040
00041
00042 public:
00043
00044
00045
00046
00047
00057 RankConstraint(ABA_MASTER *master, vector<int> *nodes, int rhs,
00058 Graph *theGraph);
00059
00071 RankConstraint(ABA_MASTER *master, vector<int> *nodes, int rhs,
00072 bool dynamic, Graph *theGraph);
00073
00077 virtual ~RankConstraint();
00078
00086 int genRow(ABA_ACTIVE<ABA_VARIABLE,ABA_CONSTRAINT> *var, ABA_ROW &row);
00087
00094 virtual double coeff(ABA_VARIABLE *var);
00095
00102 int getSize();
00103
00111 bool isInConstraint(int node);
00112
00120 virtual bool equal(ABA_CONVAR *cv);
00121
00128 virtual const char* name();
00129
00136 virtual unsigned hashKey();
00137
00138
00139 private:
00140
00141
00142
00143
00144
00148 void calculateHashKey();
00149
00150
00151
00152
00153
00157 vector<int> itsNodes;
00158
00163 Graph *itsGraph;
00164
00168 int itsRhs;
00169
00173 unsigned thisHashKey;
00174 };
00175
00176 #endif
00177
00178