1 #ifndef __STAN__META__TRAITS_HPP__
2 #define __STAN__META__TRAITS_HPP__
5 #include <boost/type_traits.hpp>
6 #include <boost/math/tools/promotion.hpp>
30 enum {
value = boost::is_convertible<T,double>::value };
49 template <
typename T,
int R,
int C>
74 struct is_vector<Eigen::Matrix<T,Eigen::Dynamic,1> > {
79 struct is_vector<Eigen::Matrix<T,1,Eigen::Dynamic> > {
85 template <
bool is_vec,
typename T>
86 struct scalar_type_helper {
91 struct scalar_type_helper<true, T> {
92 typedef typename scalar_type_helper<is_vector<typename T::value_type>::value,
typename T::value_type>::type type;
103 template <
typename T>
105 typedef typename scalar_type_helper<is_vector<T>::value, T>
::type type;
110 template <
typename T>
114 template <
typename T>
119 template <
typename T>
120 size_t length(
const Eigen::Matrix<T,Eigen::Dynamic,1>& v) {
123 template <
typename T>
124 size_t length(
const Eigen::Matrix<T,1,Eigen::Dynamic>& rv) {
128 template<
typename T,
bool is_vec>
142 template <
typename T>
147 template <
typename T1,
typename T2>
149 size_t result =
length(x1);
154 template <
typename T1,
typename T2,
typename T3>
155 size_t max_size(
const T1& x1,
const T2& x2,
const T3& x3) {
156 size_t result =
length(x1);
162 template <
typename T1,
typename T2,
typename T3,
typename T4>
163 size_t max_size(
const T1& x1,
const T2& x2,
const T3& x3,
const T4& x4) {
164 size_t result =
length(x1);
172 template <
typename T>
173 struct scalar_type<Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic> > {
177 template <
typename T>
184 template <
typename T>
188 template <
typename T>
190 enum { value =
true };
193 template <
typename T>
198 template <
typename T>
204 template <
typename T,
214 template <
int R,
int C>
220 if (is_array)
return x_[i];
227 template <
typename T,
bool is_array>
238 template <
int R,
int C>
239 VectorView(
const Eigen::Matrix<scalar_t,R,C>& m) : x_(&m(0)) { }
242 if (is_array)
return x_[i];
319 template<bool used, typename T = double, bool is_vec = stan::is_vector<T>::value>
324 throw std::runtime_error(
"used is false. this should never be called");
342 std::vector<double> x_;
354 template <
typename T1,
355 typename T2 = double,
356 typename T3 = double,
357 typename T4 = double,
358 typename T5 = double,
359 typename T6 =
double>
362 boost::math::tools::promote_args<typename scalar_type<T1>::type,