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));
110 return cardinality-1;
127template <
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));
196 if (
pos==elements.end()) {
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;
222 pos = elements.find(vi);
223 if (
pos==elements.end()) {
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;
239 pos = elements.find(args);
240 if (
pos==elements.end()) {
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;
262 std::map<std::vector<int>,
int> elements;
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()) {
Internal representation of a "set".
InsertFunctor(MP_subset< nbr > *s, std::vector< MP_index_exp > i)
Reference counted class for all "boolean" types of data.
Range over which some other constuct is defined.
Range over which some other constuct is defined.
Range over which some other constuct is defined.
MP_domain such_that(const MP_boolean &b)
Special conditional creation of a subset.
static const MP_domain & getEmpty()
returns a reference to the "empty" set.
Internal representation of a index.
Representation of an expression involving an index.
static const MP_index_exp & getEmpty()
Return the unique empty expression.
Representation of an index.
static MP_index & getEmpty()
returns a reference to the distinct "empty" index.
Internal representation of a "set".
virtual int isStage() const
int checkStage(int i) const
virtual int size() const =0
virtual MP_domain operator()(const MP_index_exp &i) const =0
Representation of a set for indexing into some other construct.
virtual int size() const
getter for the cardinality of this MP_set.
MP_domain such_that(const MP_boolean &b)
constructs a domain by subsetting this MP_set where the MP_boolean evaluates to 'true'
MP_domain operator()(const MP_index_exp &i) const
Constructs an MP_domain on the stack given an index expression into the set.
void cyclic()
setter for 'cyclic' property
static MP_set & getEmpty()
gets the distinct 'empty' MP_set.
MP_set(int i=0)
constructs a set with specific cardinality.
virtual int isStage() const
Internal representation of a "set".
void insert(int i1, int i2=0, int i3=0, int i4=0, int i5=0)
friend class SubsetRef< nbr >
const MP_domain & operator()(const SUBSETREF &s)
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 evaluate(const std::vector< MP_index * > &I) const
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())
int operator()(int i1, int i2=0, int i3=0, int i4=0, int i5=0)
void display(const std::string &s="") const
virtual int size() const
getter for the cardinality of this MP_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())
void insert(const std::vector< int > &args)
MP_subset(std::vector< const MP_set * > s)
Utility interface class for adding a string name onto a structure.
Internal representation of a "set".
virtual MP_domain getDomain(MP_set *s) const
virtual MP_index * getIndex() const
Internal representation of a "set".
SubsetRef & such_that(const MP_boolean &b)
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)
MP_index * getIndex() const
virtual MP_domain getDomain(MP_set *s) const
Constant pos(const Constant &c)
for returning non-negative value of the constant.
All flopc++ code is contained within the flopc namespace.
int mod(int a, int b)
return the strictly positive modulus of two integers
const int outOfBound
Distinct return value on conditions where an index goes out of bounds.