Stan Math Library  2.20.0
reverse mode automatic differentiation
get_base1.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_PRIM_MAT_FUN_GET_BASE1_HPP
2 #define STAN_MATH_PRIM_MAT_FUN_GET_BASE1_HPP
3 
6 #include <vector>
7 
8 namespace stan {
9 namespace math {
10 
26 template <typename T>
27 inline const T& get_base1(const std::vector<T>& x, size_t i,
28  const char* error_msg, size_t idx) {
29  check_range("[]", "x", x.size(), i, idx, error_msg);
30  return x[i - 1];
31 }
32 
49 template <typename T>
50 inline const T& get_base1(const std::vector<std::vector<T> >& x, size_t i1,
51  size_t i2, const char* error_msg, size_t idx) {
52  check_range("[]", "x", x.size(), i1, idx, error_msg);
53  return get_base1(x[i1 - 1], i2, error_msg, idx + 1);
54 }
55 
73 template <typename T>
74 inline const T& get_base1(const std::vector<std::vector<std::vector<T> > >& x,
75  size_t i1, size_t i2, size_t i3,
76  const char* error_msg, size_t idx) {
77  check_range("[]", "x", x.size(), i1, idx, error_msg);
78  return get_base1(x[i1 - 1], i2, i3, error_msg, idx + 1);
79 }
80 
99 template <typename T>
100 inline const T& get_base1(
101  const std::vector<std::vector<std::vector<std::vector<T> > > >& x,
102  size_t i1, size_t i2, size_t i3, size_t i4, const char* error_msg,
103  size_t idx) {
104  check_range("[]", "x", x.size(), i1, idx, error_msg);
105  return get_base1(x[i1 - 1], i2, i3, i4, error_msg, idx + 1);
106 }
107 
127 template <typename T>
128 inline const T& get_base1(
129  const std::vector<
130  std::vector<std::vector<std::vector<std::vector<T> > > > >& x,
131  size_t i1, size_t i2, size_t i3, size_t i4, size_t i5,
132  const char* error_msg, size_t idx) {
133  check_range("[]", "x", x.size(), i1, idx, error_msg);
134  return get_base1(x[i1 - 1], i2, i3, i4, i5, error_msg, idx + 1);
135 }
136 
157 template <typename T>
158 inline const T& get_base1(
159  const std::vector<std::vector<
160  std::vector<std::vector<std::vector<std::vector<T> > > > > >& x,
161  size_t i1, size_t i2, size_t i3, size_t i4, size_t i5, size_t i6,
162  const char* error_msg, size_t idx) {
163  check_range("[]", "x", x.size(), i1, idx, error_msg);
164  return get_base1(x[i1 - 1], i2, i3, i4, i5, i6, error_msg, idx + 1);
165 }
166 
188 template <typename T>
189 inline const T& get_base1(
190  const std::vector<std::vector<std::vector<
191  std::vector<std::vector<std::vector<std::vector<T> > > > > > >& x,
192  size_t i1, size_t i2, size_t i3, size_t i4, size_t i5, size_t i6, size_t i7,
193  const char* error_msg, size_t idx) {
194  check_range("[]", "x", x.size(), i1, idx, error_msg);
195  return get_base1(x[i1 - 1], i2, i3, i4, i5, i6, i7, error_msg, idx + 1);
196 }
197 
220 template <typename T>
221 inline const T& get_base1(
222  const std::vector<std::vector<std::vector<std::vector<
223  std::vector<std::vector<std::vector<std::vector<T> > > > > > > >& x,
224  size_t i1, size_t i2, size_t i3, size_t i4, size_t i5, size_t i6, size_t i7,
225  size_t i8, const char* error_msg, size_t idx) {
226  check_range("[]", "x", x.size(), i1, idx, error_msg);
227  return get_base1(x[i1 - 1], i2, i3, i4, i5, i6, i7, i8, error_msg, idx + 1);
228 }
229 
250 template <typename T>
251 inline Eigen::Matrix<T, 1, Eigen::Dynamic> get_base1(
252  const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& x, size_t m,
253  const char* error_msg, size_t idx) {
254  check_range("[]", "rows of x", x.rows(), m, idx, error_msg);
255  return x.block(m - 1, 0, 1, x.cols());
256 }
257 
275 template <typename T>
276 inline const T& get_base1(
277  const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& x, size_t m,
278  size_t n, const char* error_msg, size_t idx) {
279  check_range("[]", "rows of x", x.rows(), m, idx, error_msg);
280  check_range("[]", "cols of x", x.cols(), n, idx + 1, error_msg);
281  return x(m - 1, n - 1);
282 }
283 
299 template <typename T>
300 inline const T& get_base1(const Eigen::Matrix<T, Eigen::Dynamic, 1>& x,
301  size_t m, const char* error_msg, size_t idx) {
302  check_range("[]", "x", x.size(), m, idx, error_msg);
303  return x(m - 1);
304 }
305 
321 template <typename T>
322 inline const T& get_base1(const Eigen::Matrix<T, 1, Eigen::Dynamic>& x,
323  size_t n, const char* error_msg, size_t idx) {
324  check_range("[]", "x", x.size(), n, idx, error_msg);
325  return x(n - 1);
326 }
327 
328 } // namespace math
329 } // namespace stan
330 #endif
void check_range(const char *function, const char *name, int max, int index, int nested_level, const char *error_msg)
Check if specified index is within range.
Definition: check_range.hpp:24
const T & get_base1(const std::vector< T > &x, size_t i, const char *error_msg, size_t idx)
Return a reference to the value of the specified vector at the specified base-one index...
Definition: get_base1.hpp:27

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