Stan  1.0
probability, sampling & optimization
var_context.hpp
Go to the documentation of this file.
1 #ifndef __STAN__IO__VAR_CONTEXT_HPP__
2 #define __STAN__IO__VAR_CONTEXT_HPP__
3 
4 #include <sstream>
5 #include <stdexcept>
6 #include <string>
7 #include <vector>
8 
9 namespace stan {
10 
11  namespace io {
12 
29  class var_context {
30  public:
31 
41  virtual bool contains_r(const std::string& name) const = 0;
42 
55  virtual std::vector<double> vals_r(const std::string& name) const = 0;
56 
65  virtual std::vector<size_t> dims_r(const std::string& name) const = 0;
66 
75  virtual bool contains_i(const std::string& name) const = 0;
76 
85  virtual std::vector<int> vals_i(const std::string& name) const = 0;
86 
95  virtual std::vector<size_t> dims_i(const std::string& name) const = 0;
96 
103  virtual void names_r(std::vector<std::string>& names) const = 0;
104 
111  virtual void names_i(std::vector<std::string>& names) const = 0;
112 
113  void add_vec(std::stringstream& msg,
114  const std::vector<size_t>& dims) const {
115  msg << '(';
116  for (size_t i = 0; i < dims.size(); ++i) {
117  if (i > 0) msg << ',';
118  msg << dims[i];
119  }
120  msg << ')';
121  }
122 
123  void validate_dims(const std::string& stage,
124  const std::string& name,
125  const std::string& base_type,
126  const std::vector<size_t>& dims_declared) const {
127  bool is_int_type = base_type == "int";
128  if (is_int_type) {
129  if (!contains_i(name)) {
130  std::stringstream msg;
131  msg << (contains_r(name)
132  ? "int variable contained non-int values"
133  : "variable does not exist" )
134  << "; processing stage=" << stage
135  << "; variable name=" << name
136  << "; base type=" << base_type;
137  throw std::runtime_error(msg.str());
138  }
139  } else {
140  if (!contains_r(name)) {
141  std::stringstream msg;
142  msg << "variable does not exist"
143  << "; processing stage=" << stage
144  << "; variable name=" << name
145  << "; base type=" << base_type;
146  throw std::runtime_error(msg.str());
147  }
148  }
149  std::vector<size_t> dims = dims_r(name);
150  if (dims.size() != dims_declared.size()) {
151  std::stringstream msg;
152  msg << "mismatch in number dimensions declared and found in context"
153  << "; processing stage=" << stage
154  << "; dims declared=";
155  add_vec(msg,dims_declared);
156  msg << "; dims found=";
157  add_vec(msg,dims);
158  throw std::runtime_error(msg.str());
159  }
160  for (size_t i = 0; i < dims.size(); ++i) {
161  if (dims_declared[i] != dims[i]) {
162  std::stringstream msg;
163  msg << "mismatch in dimension declared and found in context"
164  << "; processing stage=" << stage
165  << "; position="
166  << i
167  << "; dims declared=";
168  add_vec(msg,dims_declared);
169  msg << "; dims found=";
170  add_vec(msg,dims);
171  throw std::runtime_error(msg.str());
172  }
173  }
174  }
175 
176  static std::vector<size_t> to_vec() {
177  return std::vector<size_t>();
178  }
179  static std::vector<size_t> to_vec(size_t n1) {
180  std::vector<size_t> v(1);
181  v[0] = n1;
182  return v;
183  }
184  static std::vector<size_t> to_vec(size_t n1, size_t n2) {
185  std::vector<size_t> v(2);
186  v[0] = n1;
187  v[1] = n2;
188  return v;
189  }
190  static std::vector<size_t> to_vec(size_t n1, size_t n2,
191  size_t n3) {
192  std::vector<size_t> v(3);
193  v[0] = n1;
194  v[1] = n2;
195  v[2] = n3;
196  return v;
197  }
198  static std::vector<size_t> to_vec(size_t n1, size_t n2,
199  size_t n3, size_t n4) {
200  std::vector<size_t> v(4);
201  v[0] = n1;
202  v[1] = n2;
203  v[2] = n3;
204  v[3] = n4;
205  return v;
206  }
207  static std::vector<size_t> to_vec(size_t n1, size_t n2,
208  size_t n3, size_t n4,
209  size_t n5) {
210  std::vector<size_t> v(5);
211  v[0] = n1;
212  v[1] = n2;
213  v[2] = n3;
214  v[3] = n4;
215  v[4] = n5;
216  return v;
217  }
218  static std::vector<size_t> to_vec(size_t n1, size_t n2,
219  size_t n3, size_t n4,
220  size_t n5, size_t n6) {
221  std::vector<size_t> v(6);
222  v[0] = n1;
223  v[1] = n2;
224  v[2] = n3;
225  v[3] = n4;
226  v[4] = n5;
227  v[5] = n6;
228  return v;
229  }
230  static std::vector<size_t> to_vec(size_t n1, size_t n2,
231  size_t n3, size_t n4,
232  size_t n5, size_t n6,
233  size_t n7) {
234  std::vector<size_t> v(7);
235  v[0] = n1;
236  v[1] = n2;
237  v[2] = n3;
238  v[3] = n4;
239  v[4] = n5;
240  v[5] = n6;
241  v[6] = n7;
242  return v;
243  }
244  static std::vector<size_t> to_vec(size_t n1, size_t n2,
245  size_t n3, size_t n4,
246  size_t n5, size_t n6,
247  size_t n7, size_t n8) {
248  std::vector<size_t> v(8);
249  v[0] = n1;
250  v[1] = n2;
251  v[2] = n3;
252  v[3] = n4;
253  v[4] = n5;
254  v[5] = n6;
255  v[6] = n7;
256  v[7] = n8;
257  return v;
258  }
259  };
260 
261 
262  }
263 
264 }
265 
266 #endif
A var_reader reads array variables of integer and floating point type by name and dimension.
Definition: var_context.hpp:29
static std::vector< size_t > to_vec(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6)
virtual void names_i(std::vector< std::string > &names) const =0
Return a list of the names of the integer variables in the context.
void validate_dims(const std::string &stage, const std::string &name, const std::string &base_type, const std::vector< size_t > &dims_declared) const
virtual std::vector< size_t > dims_i(const std::string &name) const =0
Return the dimensions of the specified floating point variable.
static std::vector< size_t > to_vec()
static std::vector< size_t > to_vec(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5)
virtual bool contains_i(const std::string &name) const =0
Return true if the specified variable name has integer values.
void add_vec(std::stringstream &msg, const std::vector< size_t > &dims) const
static std::vector< size_t > to_vec(size_t n1, size_t n2)
static std::vector< size_t > to_vec(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6, size_t n7)
virtual void names_r(std::vector< std::string > &names) const =0
Return a list of the names of the floating point variables in the context.
static std::vector< size_t > to_vec(size_t n1, size_t n2, size_t n3, size_t n4)
static std::vector< size_t > to_vec(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6, size_t n7, size_t n8)
virtual std::vector< double > vals_r(const std::string &name) const =0
Return the floating point values for the variable of the specified variable name in last-index-major ...
virtual bool contains_r(const std::string &name) const =0
Return true if the specified variable name is defined.
static std::vector< size_t > to_vec(size_t n1)
static std::vector< size_t > to_vec(size_t n1, size_t n2, size_t n3)
virtual std::vector< size_t > dims_r(const std::string &name) const =0
Return the dimensions for the specified floating point variable.
virtual std::vector< int > vals_i(const std::string &name) const =0
Return the integer values for the variable of the specified name in last-index-major order or the emp...
Probability, optimization and sampling library.
Definition: agrad.cpp:6

     [ Stan Home Page ] © 2011–2012, Stan Development Team.