Face Engine SDK  5.17.0
A face detection, recognition and tracking engine.
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
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value==false >::type >::ValueType
V ValueType
Result value type.
Definition: ResultValue.h:103
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value==false >::type >::ResultValue
ResultValue(R result, V &&value) noexcept
Initializes result.
Definition: ResultValue.h:116
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value==false >::type >::takeValue
V && takeValue() noexcept
Gets result value as rvalue.
Definition: ResultValue.h:136
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value==false >::type >::operator->
const V * operator->() const noexcept
Gets result value.
Definition: ResultValue.h:144
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value==false >::type >::EnumType
R EnumType
Result enumeration type.
Definition: ResultValue.h:100
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value==false >::type >::m_value
V m_value
Actual value.
Definition: ResultValue.h:149
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value==false >::type >::getValue
const V & getValue() const noexcept
Gets result value.
Definition: ResultValue.h:125
fsdk
SDK namespace.
Definition: IAGSEstimator.h:8
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::m_value
V m_value
Actual value.
Definition: ResultValue.h:84
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::operator->
const V * operator->() const noexcept
Gets result value.
Definition: ResultValue.h:79
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::takeValue
V && takeValue() noexcept
Gets result value as rvalue.
Definition: ResultValue.h:71
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::EnumType
R EnumType
Result enumeration type.
Definition: ResultValue.h:26
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::ResultValue
ResultValue(R result, V &&value) noexcept
Initializes result.
Definition: ResultValue.h:51
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::ResultValue
ResultValue(R result) noexcept
Initializes result.
Definition: ResultValue.h:34
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::getValue
const V & getValue() const noexcept
Gets result value.
Definition: ResultValue.h:60
fsdk::Result< R >::isOk
bool isOk() const noexcept
Checks for a success.
Definition: Result.h:62
fsdk::Result
A structure that encapsulates an action result enumeration.
Definition: Result.h:27
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::ValueType
V ValueType
Result value type.
Definition: ResultValue.h:29
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::ResultValue
ResultValue(R result, const V &value) noexcept
Initializes result.
Definition: ResultValue.h:42
fsdk::makeResultValue
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
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value==false >::type >::ResultValue
ResultValue(R result) noexcept
Initializes result.
Definition: ResultValue.h:108
fsdk::ResultValue
Addon for Result to output some value aside the result. Specialization for copiable types.
Definition: ResultValue.h:21