Stan  1.3
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Macros Pages
var.hpp
Go to the documentation of this file.
1 #ifndef __STAN__AGRAD__REV__VAR_HPP__
2 #define __STAN__AGRAD__REV__VAR_HPP__
3 
4 #include <ostream>
6 
7 namespace stan {
8  namespace agrad {
9 
10  // forward declare
11  static void recover_memory();
12  static void grad(chainable* vi);
13 
27  class var {
28  public:
29 
30  // FIXME: doc what this is for
31  typedef double Scalar;
32 
40  vari * vi_;
41 
52  return (vi_ == static_cast<vari*>(0U));
53  }
54 
60  explicit var(vari* vi)
61  : vi_(vi)
62  { }
63 
71  var()
72  : vi_(static_cast<vari*>(0U))
73  { }
74 
81  var(bool b) :
82  vi_(new vari(static_cast<double>(b))) {
83  }
84 
91  var(char c) :
92  vi_(new vari(static_cast<double>(c))) {
93  }
94 
101  var(short n) :
102  vi_(new vari(static_cast<double>(n))) {
103  }
104 
111  var(unsigned short n) :
112  vi_(new vari(static_cast<double>(n))) {
113  }
114 
121  var(int n) :
122  vi_(new vari(static_cast<double>(n))) {
123  }
124 
131  var(unsigned int n) :
132  vi_(new vari(static_cast<double>(n))) {
133  }
134 
141  var(long int n) :
142  vi_(new vari(static_cast<double>(n))) {
143  }
144 
151  var(unsigned long int n) :
152  vi_(new vari(static_cast<double>(n))) {
153  }
154 
161  var(unsigned long long n) :
162  vi_(new vari(static_cast<double>(n))) {
163  }
164 
171  var(long long n) :
172  vi_(new vari(static_cast<double>(n))) {
173  }
174 
181  var(float x) :
182  vi_(new vari(static_cast<double>(x))) {
183  }
184 
190  var(double x) :
191  vi_(new vari(x)) {
192  }
193 
200  var(long double x) :
201  vi_(new vari(static_cast<double>(x))) {
202  }
203 
209  inline double val() const {
210  return vi_->val_;
211  }
212 
221  inline double adj() const {
222  return vi_->adj_;
223  }
224 
237  void grad(std::vector<var>& x,
238  std::vector<double>& g) {
240  g.resize(x.size());
241  for (size_t i = 0; i < x.size(); ++i)
242  g[i] = x[i].vi_->adj_;
243  recover_memory();
244  }
245 
262  void grad() {
264  recover_memory();
265  }
266 
267  // POINTER OVERRIDES
268 
281  inline vari& operator*() {
282  return *vi_;
283  }
284 
295  inline vari* operator->() {
296  return vi_;
297  }
298 
299  // COMPOUND ASSIGNMENT OPERATORS
300 
311  inline var& operator+=(const var& b);
312 
323  inline var& operator+=(const double b);
324 
336  inline var& operator-=(const var& b);
337 
349  inline var& operator-=(const double b);
350 
362  inline var& operator*=(const var& b);
363 
375  inline var& operator*=(const double b);
376 
387  inline var& operator/=(const var& b);
388 
400  inline var& operator/=(const double b);
401 
410  friend std::ostream& operator<<(std::ostream& os, const var& v) {
411  return os << v.val() << ':' << v.adj();
412  }
413  };
414 
415  }
416 }
417 #endif

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