| Face Engine SDK 5.12.0 A face detection, recognition and tracking engine.

ResultValue.h
1 #pragma once
2
3 #include <fsdk/Types/Result.h>
4
5 #include <type_traits>
6 #include <utility>
7 #include <cassert>
8
9 namespace fsdk
10 {
21 template<
22 typename R,
23 typename V,
24 class Enable = void>
25 struct ResultValue: Result<R> {};
26
27 template<
28 typename R,
29 typename V>
30 struct ResultValue<R, V, typename std::enable_if<std::is_copy_constructible<V>::value>::type>
31 : Result<R>
32 {
34 typedef R EnumType;
35
37 typedef V ValueType;
38
42 ResultValue(R result) noexcept
43 : Result<R>(result)
44 {}
45
50 ResultValue(R result, const V& value) noexcept
51 : Result<R>(result)
52 , m_value(value)
53 {}
54
59 ResultValue(R result, V&& value) noexcept
60 : Result<R>(result)
61 , m_value(std::move(value))
62 {}
63
68 const V& getValue() const noexcept {
69 assert(this->isOk() && "Acessing value of erroneous result.");
70 return m_value;
71 }
72
79 V&& takeValue() noexcept {
80 return std::move(m_value);
81 }
82
87 const V* operator -> () const noexcept {
88 return &getValue();
89 }
90
91 protected:
92 V m_value;
93 };
94
104 template<
105 typename R,
106 typename V>
107 struct ResultValue<R, V, typename std::enable_if<std::is_copy_constructible<V>::value == false>::type>
108 : Result<R>
109 {
111 typedef R EnumType;
112
114 typedef V ValueType;
115
119 ResultValue(R result) noexcept
120 : Result<R>(result)
121 {}
122
127 ResultValue(R result, V&& value) noexcept
128 : Result<R>(result)
129 , m_value(std::move(value))
130 {}
131
136 const V& getValue() const noexcept {
137 assert(this->isOk() && "Acessing value of erroneous result.");
138 return m_value;
139 }
140
147 V&& takeValue() noexcept {
148 return std::move(m_value);
149 }
150
155 const V* operator -> () const noexcept {
156 return &getValue();
157 }
158
159 protected:
160 V m_value;
161 };
162
173 template<
174 typename R,
175 typename V>
176 inline ResultValue<R,
177 typename std::remove_const<typename std::remove_reference<V>::type>::type>
178 makeResultValue(R result, V&& value) noexcept {
179 return ResultValue<R,
180 typename std::remove_const<typename std::remove_reference<V>::type>::type>(
181 result,
182 std::forward<V>(value));
183 }
184 }
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:114
fsdk
SDK namespace.
Definition: IAGSEstimator.h:8
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:147
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:59
fsdk::Result
A structure that encapsulates an action result enumeration.
Definition: Result.h:29
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:111
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::EnumType
R EnumType
Result enumeration type.
Definition: ResultValue.h:34
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:50
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:68
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:160
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:79
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:136
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:178
fsdk::ResultValue
Addon for Result to output some value aside the result. Specialization for copiable types...
Definition: ResultValue.h:25
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:127
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:42
fsdk::ResultValue< R, V, typename std::enable_if< std::is_copy_constructible< V >::value >::type >::ValueType
V ValueType
Result value type.
Definition: ResultValue.h:37
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:119
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:92
fsdk::Result< R >::isOk
bool isOk() const noexcept
Checks for a success.
Definition: Result.h:63