32 virtual int size()
const = 0;
38 if ((i>=0) && (i<
size())) {
49 if ((i>=0) && (i<
size())) {
87 return i->getDomain(const_cast<MP_set*>(
this));
127 template <
int nbr>
class MP_subset;
139 std::vector<int> elm(nbr);
140 for (
int i=0; i<nbr; i++) {
141 elm[i] =
I[i]->evaluate();
147 std::vector<MP_index_exp>
I;
170 S = makeVector<nbr,const MP_set*>(&s1,&s2,&s3,&s4,&s5);
193 int operator()(
int i1,
int i2=0,
int i3=0,
int i4=0,
int i5=0) {
194 std::map<std::vector<int>,
int>::const_iterator
pos;
195 pos =
elements.find(makeVector<nbr>(i1, i2, i3, i4, i5));
215 int evaluate(
const std::vector<MP_index*>& I)
const {
217 for (
int k=0; k<nbr; k++) {
218 int temp = I[k]->evaluate();
221 std::map<std::vector<int>,
int>::const_iterator
pos;
230 void insert(
const std::vector<int> &args) {
232 for (
int i=0; i<nbr; i++) {
238 std::map<std::vector<int>,
int>::const_iterator
pos;
241 const int v =
static_cast<int>(
elements.size());
246 void insert(
int i1,
int i2=0,
int i3=0,
int i4=0,
int i5=0) {
247 insert(makeVector<nbr>(i1, i2, i3, i4, i5));
257 return static_cast<int>(
elements.size());
261 std::vector<const MP_set*>
S;
294 class SubsetRef :
public SUBSETREF {
318 makeVector<nbr>(
I1->getIndex(),
I2->getIndex(),
319 I3->getIndex(),
I4->getIndex(),
325 makeVector<nbr>(
I1->getIndex(),
I2->getIndex(),
326 I3->getIndex(),
I4->getIndex(),
336 std::vector<MP_index_exp> I = makeVector<nbr>(
I1,
I2,
I3,
I4,
I5);
338 for (
int k=0; k<nbr; k++) {
339 int temp = I[k]->evaluate();
342 std::map<std::vector<int>,
int>::const_iterator
pos;
343 pos =
S->elements.find(vi);
344 if (pos==
S->elements.end()) {
const MP_domain & operator()(const SUBSETREF &s)
Representation of an index.
InsertFunctor(MP_subset< nbr > *s, std::vector< MP_index_exp > i)
virtual int size() const
getter for the cardinality of this MP_set.
virtual int isStage() const
Utility interface class for adding a string name onto a structure.
int evaluate(const std::vector< MP_index * > &I) const
MP_subset(const MP_set &s1, const MP_set &s2=MP_set::getEmpty(), const MP_set &s3=MP_set::getEmpty(), const MP_set &s4=MP_set::getEmpty(), const MP_set &s5=MP_set::getEmpty())
int operator()(int i1, int i2=0, int i3=0, int i4=0, int i5=0)
MP_domain such_that(const MP_boolean &b)
constructs a domain by subsetting this MP_set where the MP_boolean evaluates to 'true' ...
void insert(int i1, int i2=0, int i3=0, int i4=0, int i5=0)
virtual int size() const =0
MP_domain such_that(const MP_boolean &b)
Special conditional creation of a subset.
void display(const std::string &s="") const
void cyclic()
setter for 'cyclic' property
static MP_index & getEmpty()
returns a reference to the distinct "empty" index.
Internal representation of a "set".
MP_subset(std::vector< const MP_set * > s)
Internal representation of a "set".
static MP_set & getEmpty()
gets the distinct 'empty' MP_set.
static const MP_index_exp & getEmpty()
Return the unique empty expression.
Reference counted class for all "boolean" types of data.
int checkStage(int i) const
virtual MP_domain operator()(const MP_index_exp &i) const =0
Internal representation of a "set".
virtual int size() const
getter for the cardinality of this MP_set.
Constant pos(const Constant &c)
for returning non-negative value of the constant.
std::map< std::vector< int >, int > elements
Range over which some other constuct is defined.
Internal representation of a index.
const int outOfBound
Distinct return value on conditions where an index goes out of bounds.
const InsertFunctor< nbr > & insert(MP_index_exp i1, MP_index_exp i2=MP_index_exp::getEmpty(), MP_index_exp i3=MP_index_exp::getEmpty(), MP_index_exp i4=MP_index_exp::getEmpty(), MP_index_exp i5=MP_index_exp::getEmpty())
Representation of a set for indexing into some other construct.
SubsetRef & such_that(const MP_boolean &b)
MP_set(int i=0)
constructs a set with specific cardinality.
Representation of an expression involving an index.
static const MP_domain & getEmpty()
returns a reference to the "empty" set.
MP_domain operator()(const MP_index_exp &i) const
Constructs an MP_domain on the stack given an index expression into the set.
SubsetRef< nbr > & operator()(const MP_index_exp &i1, const MP_index_exp &i2=MP_index::getEmpty(), const MP_index_exp &i3=MP_index::getEmpty(), const MP_index_exp &i4=MP_index::getEmpty(), const MP_index_exp &i5=MP_index::getEmpty())
virtual MP_domain getDomain(MP_set *s) const
std::vector< MP_index_exp > I
std::vector< const MP_set * > S
Range over which some other constuct is defined.
Internal representation of a "set".
int mod(int a, int b)
return the strictly positive modulus of two integers
virtual MP_index * getIndex() const
virtual MP_domain getDomain(MP_set *s) const
Internal representation of a "set".
virtual int isStage() const
void insert(const std::vector< int > &args)
Range over which some other constuct is defined.
MP_index * getIndex() const
SubsetRef(MP_subset< nbr > *s, const MP_index_exp &i1, const MP_index_exp &i2, const MP_index_exp &i3, const MP_index_exp &i4, const MP_index_exp &i5)