1 #ifndef __DIADES__ALTARICA__VARIABLE__HH 2 #define __DIADES__ALTARICA__VARIABLE__HH 18 class FlatVariableIterator;
36 static string typeName() {
return "Diades::Altarica::Variable"; }
193 Variable & initSubVariable(
unsigned index)
const;
199 void instanciateVariable()
const;
209 Variable():_name(),_scope(),_declaration(),_subVariables(),_isFree(true),_current(),_varDictionary(){}
228 Variable & getVariableFromPath(
const string & varPath);
240 const Variable & getVariableFromPath(
const string & varPath)
const;
249 FlatIterator varBegin();
257 FlatIterator varEnd();
279 virtual void clear();
291 require(Exception,!isNull(),
"scope: null variable.");
305 void assign(
const Value & value);
318 require(Exception,!isNull(),
"type: null variable.");
319 return declaration().
type();
334 require(Exception,!isNull(),
"declaration: null variable.");
335 return _declaration[0];
353 require(Exception,!isNull(),
"name: null variable.");
365 const string & fullname()
const;
377 return _declaration.empty();
412 return this == &variable;
426 return !( (*this)==variable);
459 Variable & getVariable(
unsigned index);
469 const Variable & getVariable(
unsigned index)
const;
480 VariableIterator variableBegin();
488 VariableIterator variableEnd();
498 VariableConstIterator variableBegin()
const;
506 VariableConstIterator variableEnd()
const;
517 const Value & value()
const;
542 Variable::SubVarDictionary::const_iterator
_fieldIt;
549 FlatVariableIterator(
const FlatVariableIterator & it);
551 FlatVariableIterator & operator=(
const FlatVariableIterator & it);
554 explicit FlatVariableIterator(
Variable & owner,
unsigned index);
555 explicit FlatVariableIterator(
Variable & owner,
const Variable::SubVarDictionary::const_iterator & fieldIt);
556 ~FlatVariableIterator();
557 reference operator*()
const;
559 pointer operator->()
const;
563 self operator++(
int);
565 bool operator==(
const self & it)
const;
567 bool operator !=(
const self & it)
const;
An Identifier is a reference to a string (IdentifierData) that only contains alpha-numeric characters...
vector< Reference > VarVector
FlatVariableIterator * _iterator
bool operator==(const Variable &variable) const
const Type & type() const
FlatVariableIterator FlatIterator
reference_wrapper< Variable const > ConstReference
vector< Value::ConstReference > _current
#define require(Exception, expr, message)
Namespace of the Diades project.
const Identifier & name() const
std::forward_iterator_tag iterator_category
ptrdiff_t difference_type
vector< Variable >::iterator VariableIterator
Variable::SubVarDictionary::const_iterator _fieldIt
const Variable & scope() const
bool operator!=(const Variable &variable) const
vector< Variable > _subVariables
Utils::Exception< Variable > Exception
const VariableDecl & declaration() const
vector< VariableDecl::ConstReference > _declaration
reference_wrapper< Variable > Reference
SubVarDictionary _varDictionary
unordered_map< Identifier, VarVector::size_type > SubVarDictionary
const Type & type() const
vector< Variable >::const_iterator VariableConstIterator