Add support for std::optional to PointerWrap
This commit is contained in:
parent
04e9279f3d
commit
a695b05b21
|
@ -19,6 +19,7 @@
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <optional>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
@ -144,6 +145,36 @@ public:
|
||||||
Do(x.second);
|
Do(x.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void Do(std::optional<T>& x)
|
||||||
|
{
|
||||||
|
bool present = x.has_value();
|
||||||
|
Do(present);
|
||||||
|
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case MODE_READ:
|
||||||
|
if (present)
|
||||||
|
{
|
||||||
|
x = std::make_optional<T>();
|
||||||
|
Do(x.value());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x = std::nullopt;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MODE_WRITE:
|
||||||
|
case MODE_MEASURE:
|
||||||
|
case MODE_VERIFY:
|
||||||
|
if (present)
|
||||||
|
Do(x.value());
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T, std::size_t N>
|
template <typename T, std::size_t N>
|
||||||
void DoArray(std::array<T, N>& x)
|
void DoArray(std::array<T, N>& x)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue