Stan  1.3
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Macros Pages
check_greater_or_equal.hpp
Go to the documentation of this file.
1 #ifndef __STAN__MATH__ERROR_HANDLING__CHECK_GREATER_OR_EQUAL_HPP__
2 #define __STAN__MATH__ERROR_HANDLING__CHECK_GREATER_OR_EQUAL_HPP__
3 
7 
8 namespace stan {
9  namespace math {
10 
11  namespace {
12  template <typename T_y,
13  typename T_low,
14  typename T_result,
15  class Policy,
16  bool is_vec>
17  struct greater_or_equal {
18  static bool check(const char* function,
19  const T_y& y,
20  const T_low& low,
21  const char* name,
22  T_result* result,
23  const Policy&) {
24  using stan::length;
25  VectorView<const T_low> low_vec(low);
26  for (size_t n = 0; n < length(low); n++) {
27  if (!(y >= low_vec[n]))
28  return dom_err(function,y,name,
29  " is %1%, but must be greater than ",
30  low_vec[n],result,Policy());
31  }
32  return true;
33  }
34  };
35 
36  template <typename T_y,
37  typename T_low,
38  typename T_result,
39  class Policy>
40  struct greater_or_equal<T_y, T_low, T_result, Policy, true> {
41  static bool check(const char* function,
42  const T_y& y,
43  const T_low& low,
44  const char* name,
45  T_result* result,
46  const Policy&) {
47  using stan::length;
48  using stan::get;
49  VectorView<const T_low> low_vec(low);
50  for (size_t n = 0; n < length(y); n++) {
51  if (!(get(y,n) >= low_vec[n]))
52  return dom_err_vec(n,function,y,name,
53  " is %1%, but must be greater than or equal to ",
54  low_vec[n],result,Policy());
55  }
56  return true;
57  }
58  };
59  }
60  template <typename T_y, typename T_low, typename T_result, class Policy>
61  inline bool check_greater_or_equal(const char* function,
62  const T_y& y,
63  const T_low& low,
64  const char* name,
65  T_result* result,
66  const Policy&) {
67  return greater_or_equal<T_y,T_low,T_result,Policy,is_vector_like<T_y>::value>::check(function,y,low,name,result,Policy());
68  }
69  template <typename T_y, typename T_low, typename T_result>
70  inline bool check_greater_or_equal(const char* function,
71  const T_y& y,
72  const T_low& low,
73  const char* name,
74  T_result* result) {
75  return check_greater_or_equal(function,y,low,name,result,
76  default_policy());
77  }
78  template <typename T_y, typename T_low>
79  inline bool check_greater_or_equal(const char* function,
80  const T_y& y,
81  const T_low& low,
82  const char* name) {
83  return check_greater_or_equal<T_y,T_low,typename scalar_type<T_y>::type *>
84  (function,y,low,name,0,default_policy());
85  }
86 
87  }
88 }
89 #endif

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