8 #ifndef _MP_domain_hpp_
9 #define _MP_domain_hpp_
23 template<
int nbr>
class MP_subset;
44 virtual size_t size()
const ;
95 std::vector<MP_boolean> condition;
146 std::vector<int> elm(nbr);
147 for (
int i=0; i<nbr; i++) {
148 elm[i] = D->I[i]->evaluate();
170 const std::vector<MP_index*> &i) : S(s), I(i){}
176 return S->evaluate(I);
195 bool allBound =
true;
196 for (
int j=0; j<nbr; j++) {
197 if (I[j]->isInstantiated() ==
true) {
207 if (allBound ==
true) {
210 std::map<std::vector<int>,
int>::const_iterator i;
212 for (i = S->elements.begin(); i != S->elements.end(); i++) {
216 for (
int j=0; j<nbr; j++) {
217 if (isBound[j] ==
true) {
218 if (I[j]->
evaluate() != i->first[j]) {
223 I[j]->assign(i->first[j]);
231 for (
int j=0; j<nbr; j++) {
232 if (isBound[j] ==
false) {
234 I[j]->unInstantiate();
246 std::vector<MP_index*> I;
Utility for doing reference counted pointers.
Reference counted class for all "boolean" types of data.
Semantic representation of a linear constraint.
Reference to a set of index values.
virtual ~MP_domain_base()
virtual size_t size() const
virtual const MP_set_base * getSet() const =0
virtual MP_index * getIndex() const =0
virtual Functor * makeInsertFunctor() const
friend MP_domain operator*(const MP_domain &a, const MP_domain &b)
operator which creates a new domain as the pairwise combinations of two input domains.
Range over which some other constuct is defined.
MP_domain getDomain(MP_set *s) const
MP_domain_set(const MP_set *s, MP_index *i)
Constructor taking a set pointer and an index pointer.
int evaluate() const
Evaluates the index within the domain.
const MP_set_base * getSet() const
Getter for the set used in construction.
MP_index * getIndex() const
Getter for the index used in construction.
Range over which some other constuct is defined.
MP_index * getIndex() const
getter for obtaining the index used in construction
MP_domain getDomain(MP_set *s) const
friend class insertFunctor< nbr >
MP_set_base * getSet() const
getter for obtaining the set used in construction
int evaluate() const
Evaluates the index within the domain.
Functor * makeInsertFunctor() const
Range over which some other constuct is defined.
MP_domain()
@briefConstructs a set which points to nothing.
size_t size() const
returns number of elements in the domain.
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.
void Forall(const Functor *op) const
Special conditional operation on the domain.
MP_domain(MP_domain_base *r)
For internal use.
friend MP_domain operator*(const MP_domain &a, const MP_domain &b)
operator which creates a new domain as the pairwise combinations of two input domains.
Internal representation of a index.
Representation of an expression involving an index.
Representation of an index.
static MP_index & getEmpty()
returns a reference to the distinct "empty" index.
Internal representation of a "set".
Representation of a set for indexing into some other construct.
Internal representation of a "set".
Inserter for construction of a subset.
insertFunctor(MP_domain_subset< nbr > *d)
Constant operator*(const Constant &a, const Constant &b)
Returns the product of two constants.
All flopc++ code is contained within the flopc namespace.