1 #ifndef STAN_IO_ARRAY_VAR_CONTEXT_HPP 2 #define STAN_IO_ARRAY_VAR_CONTEXT_HPP 5 #include <boost/throw_exception.hpp> 19 for (
size_t i = 0;
i < dims.size(); ++
i)
32 std::pair<std::vector<double>,
35 std::pair<std::vector<int>,
42 return vars_r_.find(name) != vars_r_.end();
52 const std::vector<T>&
array,
53 const std::vector<std::vector<size_t> >&
dims) {
55 size_t num_par = names.size();
56 if (num_par >
dims.size()) {
57 std::stringstream
msg;
58 msg <<
"size of vector of dimensions (found " <<
dims.size() <<
") " 59 <<
"should be no smaller than number of parameters (found " 63 for (
size_t i = 0;
i < num_par;
i++)
65 size_t array_len = array.size();
66 if (total > array_len) {
67 std::stringstream
msg;
68 msg <<
"array is not long enough for all elements: " << array_len
70 << total <<
" is needed.";
76 const std::vector<double>&
values,
77 const std::vector<std::vector<size_t> >&
dims) {
81 for (
size_t i = 0;
i < names.size();
i++) {
83 std::vector<double>
v(values.begin() +
start, values.begin() +
end);
85 = std::pair<std::vector<double>,
86 std::vector<size_t> >(
v,
dims[
i]);
91 const std::vector<int>&
values,
92 const std::vector<std::vector<size_t> >&
dims) {
96 for (
size_t i = 0;
i < names.size();
i++) {
98 std::vector<int>
v(values.begin() +
start, values.begin() +
end);
100 = std::pair<std::vector<int>,
101 std::vector<size_t> >(
v,
dims[
i]);
115 const std::vector<double>& values_r,
116 const std::vector<std::vector<size_t> >& dim_r) {
117 add_r(names_r, values_r, dim_r);
128 const std::vector<int>& values_i,
129 const std::vector<std::vector<size_t> >& dim_i) {
130 add_i(names_i, values_i, dim_i);
139 const std::vector<double>& values_r,
140 const std::vector<std::vector<size_t> >& dim_r,
141 const std::vector<std::string>&
names_i,
142 const std::vector<int>& values_i,
143 const std::vector<std::vector<size_t> >& dim_i) {
144 add_i(names_i, values_i, dim_i);
145 add_r(names_r, values_r, dim_r);
169 return vars_i_.find(name) != vars_i_.end();
181 return (vars_r_.find(name)->second).first;
183 std::vector<int> vec_int = (vars_i_.find(name)->second).first;
184 std::vector<double> vec_r(vec_int.size());
185 for (
size_t ii = 0; ii < vec_int.size(); ii++) {
186 vec_r[ii] = vec_int[ii];
202 return (vars_r_.find(name)->second).
second;
204 return (vars_i_.find(name)->second).
second;
218 return (vars_i_.find(name)->second).first;
232 return (vars_i_.find(name)->second).
second;
245 for (std::map<std::string,
246 std::pair<std::vector<double>,
247 std::vector<size_t> > >
248 ::const_iterator
it = vars_r_.begin();
249 it != vars_r_.end(); ++
it)
250 names.push_back((*it).first);
261 for (std::map<std::string,
262 std::pair<std::vector<int>,
263 std::vector<size_t> > >
264 ::const_iterator
it = vars_i_.begin();
265 it != vars_i_.end(); ++
it)
266 names.push_back((*it).first);
276 bool remove(
const std::string&
name) {
277 return (vars_i_.erase(
name) > 0)
278 || (vars_r_.erase(
name) > 0);
std::vector< int > vals_i(const std::string &name) const
std::map< std::string, std::pair< std::vector< int >, std::vector< size_t > > > vars_i_
std::vector< size_t > dims_i(const std::string &name) const
virtual void names_i(std::vector< std::string > &names) const
std::vector< int > const empty_vec_i_
array_var_context(const std::vector< std::string > &names_r, const std::vector< double > &values_r, const std::vector< std::vector< size_t > > &dim_r, const std::vector< std::string > &names_i, const std::vector< int > &values_i, const std::vector< std::vector< size_t > > &dim_i)
void add_r(const std::vector< std::string > &names, const std::vector< double > &values, const std::vector< std::vector< size_t > > &dims)
std::vector< size_t > dims_r(const std::string &name) const
bool contains_i(const std::string &name) const
std::map< std::string, std::pair< std::vector< double >, std::vector< size_t > > > vars_r_
std::vector< size_t > const empty_vec_ui_
array_var_context(const std::vector< std::string > &names_i, const std::vector< int > &values_i, const std::vector< std::vector< size_t > > &dim_i)
virtual void names_r(std::vector< std::string > &names) const
bool contains_r_only(const std::string &name) const
std::vector< double > const empty_vec_r_
void invalid_argument(const char *function, const char *name, const T &y, const char *msg1, const char *msg2)
bool contains_r(const std::string &name) const
T product(std::vector< T > dims)
std::vector< double > vals_r(const std::string &name) const
array_var_context(const std::vector< std::string > &names_r, const std::vector< double > &values_r, const std::vector< std::vector< size_t > > &dim_r)
void validate(const std::vector< std::string > &names, const std::vector< T > &array, const std::vector< std::vector< size_t > > &dims)
void add_i(const std::vector< std::string > &names, const std::vector< int > &values, const std::vector< std::vector< size_t > > &dims)