Face Engine SDK  5.17.0
A face detection, recognition and tracking engine.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ResultValue.h
1 #pragma once
2 
3 #include <fsdk/Types/Result.h>
4 
5 #include <cassert>
6 #include <type_traits>
7 #include <utility>
8 
9 namespace fsdk {
20  template <typename R, typename V, class Enable = void>
21  struct ResultValue : Result<R> {};
22 
23  template <typename R, typename V>
24  struct ResultValue<R, V, typename std::enable_if<std::is_copy_constructible<V>::value>::type> : Result<R> {
26  typedef R EnumType;
27 
29  typedef V ValueType;
30 
34  ResultValue(R result) noexcept
35  : Result<R>(result) {
36  }
37 
42  ResultValue(R result, const V& value) noexcept
43  : Result<R>(result)
44  , m_value(value) {
45  }
46 
51  ResultValue(R result, V&& value) noexcept
52  : Result<R>(result)
53  , m_value(std::move(value)) {
54  }
55 
60  const V& getValue() const noexcept {
61  assert(this->isOk() && "Acessing value of erroneous result.");
62  return m_value;
63  }
64 
71  V&& takeValue() noexcept {
72  return std::move(m_value);
73  }
74 
79  const V* operator->() const noexcept {
80  return &getValue();
81  }
82 
83  protected:
84  V m_value;
85  };
86 
96  template <typename R, typename V>
97  struct ResultValue<R, V, typename std::enable_if<std::is_copy_constructible<V>::value == false>::type> :
98  Result<R> {
100  typedef R EnumType;
101 
103  typedef V ValueType;
104 
108  ResultValue(R result) noexcept
109  : Result<R>(result) {
110  }
111 
116  ResultValue(R result, V&& value) noexcept
117  : Result<R>(result)
118  , m_value(std::move(value)) {
119  }
120 
125  const V& getValue() const noexcept {
126  assert(this->isOk() && "Acessing value of erroneous result.");
127  return m_value;
128  }
129 
136  V&& takeValue() noexcept {
137  return std::move(m_value);
138  }
139 
144  const V* operator->() const noexcept {
145  return &getValue();
146  }
147 
148  protected:
150  };
151 
162  template <typename R, typename V>
164  makeResultValue(R result, V&& value) noexcept {
166  result,
167  std::forward<V>(value));
168  }
169 } // namespace fsdk
V && takeValue() noexcept
Gets result value as rvalue.
Definition: ResultValue.h:136
ResultValue(R result, V &&value) noexcept
Initializes result.
Definition: ResultValue.h:51
A structure that encapsulates an action result enumeration.
Definition: Result.h:27
ResultValue(R result, const V &value) noexcept
Initializes result.
Definition: ResultValue.h:42
const V & getValue() const noexcept
Gets result value.
Definition: ResultValue.h:60
V && takeValue() noexcept
Gets result value as rvalue.
Definition: ResultValue.h:71
const V & getValue() const noexcept
Gets result value.
Definition: ResultValue.h:125
ResultValue< R, typename std::remove_const< typename std::remove_reference< V >::type >::type > makeResultValue(R result, V &&value) noexcept
Addon for Result to output some value aside the result.
Definition: ResultValue.h:164
Addon for Result to output some value aside the result. Specialization for copiable types...
Definition: ResultValue.h:21
const V * operator->() const noexcept
Gets result value.
Definition: ResultValue.h:144
ResultValue(R result, V &&value) noexcept
Initializes result.
Definition: ResultValue.h:116
ResultValue(R result) noexcept
Initializes result.
Definition: ResultValue.h:34
ResultValue(R result) noexcept
Initializes result.
Definition: ResultValue.h:108
const V * operator->() const noexcept
Gets result value.
Definition: ResultValue.h:79
bool isOk() const noexcept
Checks for a success.
Definition: Result.h:62