1 #ifndef __DIADES__ALTARICA__DOMAINS__HH 2 #define __DIADES__ALTARICA__DOMAINS__HH 15 class EnumerationDomain;
18 class StructureDomain;
49 ValueEnumeration::const_iterator
_itSet;
57 vector<DomainIterator> *
_array;
62 vector<DomainIterator> *
_array;
70 void copy(
const DomainIterator & it);
79 _current.push_back(value);
84 const ValueEnumeration::const_iterator & itSet):_type(
Enumeration),
85 _current(), _itSet(itSet),_index(0)
92 _itSet(),_index(index)
98 _current(),_itSet(),_index(index)
105 const map<Identifier, DomainIterator> & dataIt,
106 const map<Identifier, DomainIterator> & beginIt,
107 const map<Identifier, DomainIterator> & endIt);
111 const vector<DomainIterator> & vectIt,
112 const vector<DomainIterator> & beginIt,
113 const vector<DomainIterator> & endIt);
148 return !(*
this == it);
198 typedef enum {InvalidDomain, Simple, Arrayed, Structured}
Category;
286 virtual string printDomain()
const = 0;
304 _otherNames.insert(name);
321 return _otherNames.begin();
329 return _otherNames.end();
341 virtual bool isFinite()
const = 0;
345 virtual unsigned cardinality()
const = 0;
350 virtual bool contains(
const Value & value)
const = 0;
371 virtual DomainType domainType()
const = 0;
381 virtual const Value & defaultValue()
const = 0;
402 bool operator<(
const Domain & domain)
const;
409 return this == &domain;
416 return !(*
this == domain);
450 virtual unsigned cardinality()
const {
return _max.get().integer() - _min.get().integer() + 1; }
451 virtual bool contains(
const Value & value)
const {
return (_min.get()<=value) && (value<=_max.get()); }
466 if(value.
type().
isInteger() && (value <= _max.get()) && (value >= _min.get()))
478 virtual string printDomain()
const;
486 bool result = cardinality() < domain.
cardinality();
487 if(!result && (cardinality() == domain.
cardinality()))
489 result = _min.get() < domain.
_min.get();
491 if(!result && (_min.get() == domain.
_min.get()))
493 result = name() < domain.
name();
528 return _symbolSet.size(); }
529 virtual bool contains(
const Value & value)
const;
550 virtual string printDomain()
const;
572 virtual bool contains(
const Value & value)
const;
603 virtual string printDomain()
const;
625 virtual unsigned cardinality()
const {
return numeric_limits<unsigned>::infinity(); }
626 bool contains(
const Value & value)
const;
666 const Value & defaultValue()
const;
668 virtual string printDomain()
const;
682 map<Identifier, DomainIterator>
_end;
683 void generateStructuredBeginAndEnd(map<Identifier, DomainIterator> & begin,
684 map<Identifier, DomainIterator> & end);
692 return _structure.begin();
696 return _structure.end();
706 _structure(structure),_begin(),_end()
709 generateStructuredBeginAndEnd(_begin,_end);
710 _category = Structured;
714 virtual bool isFinite()
const;
715 virtual unsigned cardinality()
const;
716 virtual bool contains(
const Value & value)
const;
735 virtual string printDomain()
const;
739 const Value & defaultValue()
const;
759 virtual bool isFinite()
const;
760 virtual unsigned cardinality()
const;
761 virtual bool contains(
const Value & value)
const;
782 virtual string printDomain()
const;
786 const Value & defaultValue()
const;
792 bool result = _array.size() < domain.
_array.size();
793 if(!result && (_array.size() == domain.
_array.size()))
795 if( _array.size() > 0)
797 result = (_array[0].get()) < (domain.
_array[0].get());
798 if(!result && ( (_array[0].
get()) == (domain.
_array[0].get())))
800 result = name() < domain.
name();
846 const Value & defaultValue()
const;
876 static string typeName() {
return "Altarica::DomainFactory"; }
bool operator<(const Domain &domain) const
StructureFieldIterator fieldBegin() const
const Domain & getIntegers() const
virtual DomainType domainType() const
StructureFields::const_iterator StructureFieldIterator
const Domain & nullDomain() const
union Diades::Altarica::DomainIterator::@1 _dataIt
void setOtherName(const Identifier &name) const
const IntegerDomain * _integers
An Identifier is a reference to a string (IdentifierData) that only contains alpha-numeric characters...
set< Identifier >::const_iterator otherNameBegin() const
union Diades::Altarica::DomainIterator::@2 _endIt
bool operator==(const Domain &domain) const
void setName(const Identifier &name)
vector< Domain::ConstReference > _array
ValueEnumeration::const_iterator _itSet
virtual bool isFinite() const
DomainIterator end() const
virtual bool isFinite() const
vector< DomainIterator > _begin
vector< DomainIterator > _end
bool operator!=(const Domain &domain) const
map< Identifier, ConstReference > StructureFields
virtual DomainIterator begin() const
Value::ConstReference _min
virtual DomainType domainType() const
const Value & defaultValue() const
set< Identifier > _otherNames
virtual ~EnumerationDomain()
const EnumerationDomain * _enumeration
vector< Value::ConstReference > _current
virtual DomainIterator begin() const
virtual DomainIterator end() const
std::forward_iterator_tag iterator_category
StructureFields _structure
Category category() const
Value::ConstReference _isTrue
Utils::Exception< DomainFactory > Exception
virtual DomainIterator find(const Value &value) const
union Diades::Altarica::DomainIterator::@0 _domainData
DomainIterator(const IntegerDomain &integers, int index)
reference_wrapper< Type const > ConstReference
virtual DomainType domainType() const
NullDomain(DomainFactory &factory)
set< Identifier >::const_iterator otherNameEnd() const
reference_wrapper< Value const > ConstReference
Type::ConstReference _type
DomainIterator(const BooleanDomain &booleans, int index)
DomainIterator(const RangeDomain &range, const Value &value)
const Value & defaultValue() const
virtual ~StructureDomain()
vector< DomainIterator > * _array
virtual DomainIterator end() const
virtual DomainIterator find(const Value &value) const
virtual string printDomain() const
bool operator==(const self &it) const
const BooleanDomain * _booleans
const StructureDomain * _structure
virtual DomainIterator end() const
virtual DomainIterator begin() const
void updateCurrentStructure()
virtual unsigned cardinality() const
map< Identifier, DomainIterator > * _structure
const ArrayDomain * _array
Namespace of the Diades project.
const Identifier & name() const
vector< Domain::Pointer > _basicDomains
virtual bool isFinite() const
vector< map< Identifier, Domain::ConstPointer > > _nodeDeclDomains
DomainIterator(const EnumerationDomain &enumeration, const ValueEnumeration::const_iterator &itSet)
virtual DomainIterator end() const
virtual DomainIterator find(const Value &value) const
virtual DomainIterator begin() const
StructureDomain(const Identifier &name, const StructureFields &structure, unsigned id, DomainFactory &factory)
reference_wrapper< Domain const > ConstReference
bool operator!=(const self &it) const
vector< Value::ConstReference > ValueEnumeration
enumeration of Value elements (unicity and sorting is in charge of the user)
DomainIterator begin() const
virtual DomainType domainType() const
virtual bool isFinite() const
virtual DomainIterator begin() const
map< Identifier, DomainIterator > _end
const Value & max() const
virtual DomainType domainType() const
virtual unsigned cardinality() const
ValueEnumeration _symbolSet
const Domain & getBooleans() const
virtual DomainType domainType() const
pointer operator->() const
const Value & min() const
reference_wrapper< Domain > Reference
Value::ConstReference _max
virtual bool contains(const Value &value) const
virtual DomainIterator end() const
ptrdiff_t difference_type
void copy(const DomainIterator &it)
DomainIterator & operator=(const DomainIterator &it)
reference operator*() const
virtual unsigned cardinality() const
union Diades::Altarica::DomainIterator::@3 _beginIt
unsigned arraySize() const
bool operator<(const RangeDomain &domain) const
bool operator<(const ArrayDomain &domain) const
const RangeDomain * _range
virtual DomainType domainType() const
virtual bool contains(const Value &value) const
const Domain * ConstPointer
virtual unsigned cardinality() const
map< Identifier, DomainIterator > _begin
const Domain & itemDomain() const
const Type & type() const
StructureFieldIterator fieldEnd() const
vector< map< Identifier, bool > > _referenceDomains
DomainIterator(const DomainIterator &it)
void updateCurrentArray()
virtual DomainIterator find(const Value &value) const
Value::ConstReference _isFalse
virtual DomainIterator begin() const
const Value & defaultValue() const
virtual unsigned cardinality() const
const Type & type() const