Stan  2.5.0
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
filtered_values.hpp
Go to the documentation of this file.
1 #ifndef STAN__COMMON__RECORDER__FILTERED_VALUES_HPP
2 #define STAN__COMMON__RECORDER__FILTERED_VALUES_HPP
3 
5 #include <ostream>
6 #include <string>
7 #include <stdexcept>
8 #include <vector>
9 
10 namespace stan {
11  namespace common {
12  namespace recorder {
13 
14  template <class InternalVector>
16  private:
17  size_t N_, M_, N_filter_;
18  std::vector<size_t> filter_;
19  values<InternalVector> values_;
20  std::vector<double> tmp;
21 
22  public:
23 
24  filtered_values(const size_t N,
25  const size_t M,
26  const std::vector<size_t>& filter)
27  : N_(N), M_(M), N_filter_(filter.size()), filter_(filter),
28  values_(N_filter_, M_), tmp(N_filter_) {
29  for (size_t n = 0; n < N_filter_; n++)
30  if (filter.at(n) >= N_)
31  throw std::out_of_range("filter is looking for elements out of range");
32  }
33 
34  filtered_values(const size_t N,
35  const std::vector<InternalVector>& x,
36  const std::vector<size_t>& filter)
37  : N_(N), M_(0), filter_(filter), N_filter_(filter.size()),
38  values_(x), tmp(N_filter_) {
39  if (x.size() != filter.size())
40  throw std::length_error("filter provided does not match dimensions of the storage");
41  if (N_filter_ > 0)
42  M_ = x[0].size();
43  for (size_t n = 0; n < N_filter_; n++)
44  if (filter.at(n) >= N_)
45  throw std::out_of_range("filter is looking for elements out of range");
46  }
47 
48  void operator()(const std::vector<std::string>& x) {
49  values_(x);
50  }
51 
52  template <class T>
53  void operator()(const std::vector<T>& x) {
54  if (x.size() != N_)
55  throw std::length_error("vector provided does not match the parameter length");
56  for (size_t n = 0; n < N_filter_; n++)
57  tmp[n] = x[filter_[n]];
58  values_(tmp);
59  }
60 
61  void operator()(const std::string x) {
62  values_(x);
63  }
64 
65  void operator()() {
66  values_();
67  }
68 
69  bool is_recording() const {
70  return values_.is_recording();
71  }
72 
73  const std::vector<InternalVector>& x() {
74  return values_.x();
75  }
76  };
77 
78  }
79  }
80 }
81 
82 #endif
const std::vector< InternalVector > & x()
filtered_values(const size_t N, const std::vector< InternalVector > &x, const std::vector< size_t > &filter)
void operator()(const std::vector< std::string > &x)
int size(const std::vector< T > &x)
Definition: size.hpp:11
void operator()(const std::vector< T > &x)
filtered_values(const size_t N, const size_t M, const std::vector< size_t > &filter)

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