9 #ifndef __DIADES__SDMDL_EXPERIMENTAL__STATEINFOENCODER__HH__ 10 #define __DIADES__SDMDL_EXPERIMENTAL__STATEINFOENCODER__HH__ 21 namespace Experimental
75 std::vector<std::vector<StateInfoId> >
_domains;
91 _variables(varFactory),
111 _domains[varId].push_back(
id);
112 auto & value = _encodedVariables[varId].get().addValue(stream.str());
113 _valueIndexes[varId][stream.str()]=_domains[varId].size()-1;
125 template<
typename StateInfoIdIterator>
128 StateInfoIdIterator last)
130 std::stringstream stream;
136 _encodedVariables.push_back(_variables.
newVariable(stream.str()));
137 _varDictionnary[stream.str()]= result;
138 _domains.push_back(std::vector<StateInfoId>());
139 _valueIndexes.push_back(std::unordered_map<std::string,size_t>());
140 while (first != last)
157 return _encodedVariables[id].get();
167 return _encodedVariables.size();
178 auto it = _varDictionnary.find(variable.
name());
179 if(it==_varDictionnary.end())
212 std::pair<StateInfoId,bool> result= std::make_pair(0,
true);
220 auto it = _valueIndexes[varId].find(assignment.
value().
label());
221 result.second = (it != _valueIndexes[varId].end());
224 result.first = _domains[varId][it->second];
const string & name() const
VariableFactory & _variables
VariableEncoderId encodeStateInfoRange(StateInfoIdIterator first, StateInfoIdIterator last)
StateInfoEncoder(VariableFactory &varFactory)
std::vector< std::vector< StateInfoId > > _domains
VariableEncoderId numberOfEncodedVariables() const
VariableEncoderId getVariableId(const Variable &variable) const
std::vector< StateInfoId > & getDomain(VariableEncoderId id)
std::pair< StateInfoId, bool > getStateInfoId(const Assignment &assignment) const
VariableVector _encodedVariables
Variable::VariableVector VariableVector
std::vector< std::unordered_map< std::string, size_t > > _valueIndexes
Namespace of the Diades project.
Variable & newVariable(const std::string &label)
const Variable & variable() const
std::unordered_map< std::string, VariableEncoderId > _varDictionnary
Variable & getVariable(VariableEncoderId id) const
const std::string & label() const
const Value & value() const
const Value & encodeStateInfoInVariable(VariableEncoderId varId, StateInfoId id)
VariableVector::size_type VariableEncoderId
size_t numberOfAllocatedVariables() const