Branch data Line data Source code
1 : : // Copyright (c) The Bitcoin Core developers
2 : : // Distributed under the MIT software license, see the accompanying
3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 : :
5 : : #ifndef MP_PROXY_TYPE_CHRONO_H
6 : : #define MP_PROXY_TYPE_CHRONO_H
7 : :
8 : : #include <mp/util.h>
9 : :
10 : : #include <chrono>
11 : :
12 : : namespace mp {
13 : : //! Overload CustomBuildField and CustomReadField to serialize std::chrono
14 : : //! parameters and return values as numbers.
15 : : template <class Rep, class Period, typename Value, typename Output>
16 : 0 : void CustomBuildField(TypeList<std::chrono::duration<Rep, Period>>, Priority<1>, InvokeContext& invoke_context, Value&& value,
17 : : Output&& output)
18 : : {
19 : : static_assert(std::numeric_limits<decltype(output.get())>::lowest() <= std::numeric_limits<Rep>::lowest(),
20 : : "capnp type does not have enough range to hold lowest std::chrono::duration value");
21 : : static_assert(std::numeric_limits<decltype(output.get())>::max() >= std::numeric_limits<Rep>::max(),
22 : : "capnp type does not have enough range to hold highest std::chrono::duration value");
23 : 0 : output.set(value.count());
24 : 0 : }
25 : :
26 : : template <class Rep, class Period, typename Input, typename ReadDest>
27 [ # # ]: 0 : decltype(auto) CustomReadField(TypeList<std::chrono::duration<Rep, Period>>, Priority<1>, InvokeContext& invoke_context,
28 : : Input&& input, ReadDest&& read_dest)
29 : : {
30 [ # # ]: 0 : return read_dest.construct(input.get());
31 : : }
32 : : } // namespace mp
33 : :
34 : : #endif // MP_PROXY_TYPE_CHRONO_H
|