autoppl  v0.8
A C++ template library for probabilistic programming
value.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <cstddef>
4 
5 namespace ppl {
6 namespace util {
7 
8 template <class ValueType, class ShapeType>
9 constexpr auto make_val(size_t rows=1, size_t cols=1)
10 {
11  static_cast<void>(rows);
12  static_cast<void>(cols);
13  if constexpr (std::is_same_v<ShapeType, scl>) {
14  return nullptr;
15  } else {
16  using map_t = ad::util::shape_to_raw_view_t<ValueType, ShapeType>;
17  return map_t(nullptr, rows, cols);
18  }
19 }
20 
21 template <class T>
22 constexpr size_t size(const T& x)
23 {
24  if constexpr (std::is_pointer_v<std::decay_t<T>>) {
25  return 1;
26  } else {
27  return x.size();
28  }
29 }
30 
31 template <class T>
32 constexpr size_t rows(const T& x)
33 {
34  if constexpr (std::is_pointer_v<std::decay_t<T>>) {
35  return 1;
36  } else {
37  return x.rows();
38  }
39 }
40 
41 template <class T>
42 constexpr size_t cols(const T& x)
43 {
44  if constexpr (std::is_pointer_v<std::decay_t<T>>) {
45  return 1;
46  } else {
47  return x.cols();
48  }
49 }
50 
51 template <class T>
52 auto& get(T&& x) {
53  if constexpr (std::is_pointer_v<std::decay_t<T>>) {
54  return *x;
55  } else {
56  return x;
57  }
58 }
59 
60 template <class T, class ValPtrType>
61 void bind(T& x, ValPtrType begin, size_t rows=1, size_t cols=1)
62 {
63  static_cast<void>(rows);
64  static_cast<void>(cols);
65  using raw_t = std::decay_t<T>;
66  if constexpr (std::is_pointer_v<raw_t>) {
67  x = begin;
68  } else {
69  new (&x) raw_t(begin, rows, cols);
70  }
71 }
72 
73 template <class T>
74 constexpr inline auto to_array(const T& x)
75 {
76  using x_t = std::decay_t<decltype(x)>;
77  if constexpr (std::is_arithmetic_v<x_t>) return x;
78  else return x.array();
79 }
80 
81 } // namespace util
82 } // namespace ppl
ppl::util::get
auto & get(T &&x)
Definition: value.hpp:52
shape_traits.hpp
ppl::util::bind
void bind(T &x, ValPtrType begin, size_t rows=1, size_t cols=1)
Definition: value.hpp:61
ppl::util::cols
constexpr size_t cols(const T &x)
Definition: value.hpp:42
ppl::util::size
constexpr size_t size(const T &x)
Definition: value.hpp:22
ppl::util::to_array
constexpr auto to_array(const T &x)
Definition: value.hpp:74
ppl
Definition: bounded.hpp:11
ppl::util::rows
constexpr size_t rows(const T &x)
Definition: value.hpp:32
ppl::util::make_val
constexpr auto make_val(size_t rows=1, size_t cols=1)
Definition: value.hpp:9