check_vector.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_PRIM_MAT_ERR_CHECK_VECTOR_HPP
2 #define STAN_MATH_PRIM_MAT_ERR_CHECK_VECTOR_HPP
3 
7 #include <sstream>
8 #include <string>
9 
10 namespace stan {
11 namespace math {
12 
13 /**
14  * Check if the matrix is either a
15  * row vector or column vector.
16  *
17  * This function checks the runtime size of the matrix to check
18  * whether it is a row or column vector.
19  *
20  * @tparam T Scalar type of the matrix
21  * @tparam R Compile time rows of the matrix
22  * @tparam C Compile time columns of the matrix
23  *
24  * @param function Function name (for error messages)
25  * @param name Variable name (for error messages)
26  * @param x Matrix
27  *
28  * @throw <code>std::invalid_argument</code> if x is not a row or column
29  * vector.
30  */
31 template <typename T, int R, int C>
32 inline void check_vector(const char* function, const char* name,
33  const Eigen::Matrix<T, R, C>& x) {
34  if (R == 1)
35  return;
36  if (C == 1)
37  return;
38  if (x.rows() == 1 || x.cols() == 1)
39  return;
40 
41  std::ostringstream msg;
42  msg << ") has " << x.rows() << " rows and " << x.cols()
43  << " columns but it should be a vector so it should "
44  << "either have 1 row or 1 column";
45  std::string msg_str(msg.str());
46  invalid_argument(function, name, typename scalar_type<T>::type(), "(",
47  msg_str.c_str());
48 }
49 
50 } // namespace math
51 } // namespace stan
52 #endif
const XML_Char * name
Definition: expat.h:151
void check_vector(const char *function, const char *name, const Eigen::Matrix< T, R, C > &x)
const double C
#define R(x)
void invalid_argument(const char *function, const char *name, const T &y, const char *msg1, const char *msg2)
enum BeamMode string