DiaDes  0.1
DIAgnosis of Discrete-Event System
StateInfoEncoder.hh
Go to the documentation of this file.
1 
9 #ifndef __DIADES__SDMDL_EXPERIMENTAL__STATEINFOENCODER__HH__
10 #define __DIADES__SDMDL_EXPERIMENTAL__STATEINFOENCODER__HH__
11 
12 #include<vector>
16 
17 namespace Diades
18 {
19  namespace Sdmdl
20  {
21  namespace Experimental
22  {
23 
24 
35  {
36  public:
41  using VariableEncoderId = VariableVector::size_type;
46  using StateInfoId = size_t;
47 
48  private:
55 
61 
62 
67  std::unordered_map<std::string,VariableEncoderId> _varDictionnary;
68 
69 
75  std::vector<std::vector<StateInfoId> > _domains;
76 
77 
82  std::vector< std::unordered_map<std::string,size_t> > _valueIndexes;
83 
84  public:
85 
91  _variables(varFactory),
92  _encodedVariables(),
93  _varDictionnary(),
94  _domains(),
95  _valueIndexes()
96  {
97  }
98 
99 
100  private:
108  {
109  stringstream stream;
110  stream << id;
111  _domains[varId].push_back(id);
112  auto & value = _encodedVariables[varId].get().addValue(stream.str());
113  _valueIndexes[varId][stream.str()]=_domains[varId].size()-1;
114  return value;
115  }
116 
117  public:
125  template<typename StateInfoIdIterator>
127  encodeStateInfoRange(StateInfoIdIterator first,
128  StateInfoIdIterator last)
129  {
130  std::stringstream stream;
131  stream << "var_"
132  << this
133  << "_"
134  << _variables.numberOfAllocatedVariables();
135  VariableEncoderId result = _encodedVariables.size();
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)
141  {
142  encodeStateInfoInVariable(result,*first);
143  ++first;
144  }
145  return result;
146 
147  }
148 
149 
156  {
157  return _encodedVariables[id].get();
158  }
159 
160 
166  {
167  return _encodedVariables.size();
168  }
169 
176  VariableEncoderId getVariableId(const Variable & variable) const
177  {
178  auto it = _varDictionnary.find(variable.name());
179  if(it==_varDictionnary.end())
180  {
181  return numberOfEncodedVariables();
182  }
183  if(variable!=getVariable(it->second))
184  {
185  return numberOfEncodedVariables();
186  }
187  return it->second;
188  }
189 
190 
191 
198  std::vector<StateInfoId> & getDomain(VariableEncoderId id)
199  {
200  return _domains[id];
201  }
202 
203 
210  std::pair<StateInfoId,bool> getStateInfoId(const Assignment & assignment) const
211  {
212  std::pair<StateInfoId,bool> result= std::make_pair(0,true);
213  VariableEncoderId varId = getVariableId(assignment.variable());
214  if(varId==numberOfEncodedVariables())
215  {
216  result.second=false;
217  }
218  else
219  {
220  auto it = _valueIndexes[varId].find(assignment.value().label());
221  result.second = (it != _valueIndexes[varId].end());
222  if(result.second)
223  {
224  result.first = _domains[varId][it->second];
225  }
226  }
227  return result;
228  }
229 
230 
231 
232  };
233  }
234  }
235 }
236 
237 
238 
239 
240 #endif /* STATEINFOENCODER_HH */
241 
const string & name() const
Definition: Variable.hh:124
VariableEncoderId encodeStateInfoRange(StateInfoIdIterator first, StateInfoIdIterator last)
StateInfoEncoder(VariableFactory &varFactory)
std::vector< std::vector< StateInfoId > > _domains
VariableEncoderId getVariableId(const Variable &variable) const
std::vector< StateInfoId > & getDomain(VariableEncoderId id)
std::pair< StateInfoId, bool > getStateInfoId(const Assignment &assignment) const
Variable::VariableVector VariableVector
Definition: Variable.hh:403
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
Definition: Assignment.hh:221
std::unordered_map< std::string, VariableEncoderId > _varDictionnary
Variable & getVariable(VariableEncoderId id) const
const std::string & label() const
Definition: Value.hh:113
const Value & encodeStateInfoInVariable(VariableEncoderId varId, StateInfoId id)
size_t numberOfAllocatedVariables() const
Definition: Variable.hh:481