16 template <
typename... Params>
19 auto args_data =
pack(args...);
20 output.insert(output.end(), std::make_move_iterator(args_data.begin()), std::make_move_iterator(args_data.end()));
24 template <
typename... Params>
29 auto current_offset =
kWordSize *
sizeof...(args);
31 auto process = [&](
auto elem) {
33 const auto data_size = data.size();
36 offset_data.reserve(offset_data.size() + data_size);
37 offset_data.insert(offset_data.end(), std::make_move_iterator(data.begin()),
38 std::make_move_iterator(data.end()));
41 current_offset += data_size;
43 output.insert(output.end(), std::make_move_iterator(data.begin()), std::make_move_iterator(data.end()));
48 output.insert(output.end(), std::make_move_iterator(offset_data.begin()),
49 std::make_move_iterator(offset_data.end()));
53 template <
unsigned N, std::enable_if_t<(N <= 32)>* =
nullptr>
54 static
bytes packElemement(dev::FixedHash<N> hash) {
56 data.insert(data.end(), 32 - N, 0);
57 data.insert(data.end(), hash.begin(), hash.end());
61 template <
typename T, std::enable_if_t<std::numeric_limits<T>::is_
integer>* =
nullptr>
72 data =
pack(value.size());
75 data.insert(data.end(), value.begin(), value.end());
83 template <
typename... Params>
86 auto process = [&](
auto& elem) {
87 const auto begin = input.begin() + i *
kWordSize;
88 const auto end = input.begin() + (i + 1) *
kWordSize;
100 out = dev::fromBigEndian<T>(input);
103 template <
unsigned N, std::enable_if_t<(N <= 32)>* =
nullptr>
104 static
void unpackElement(const
bytes& input, dev::FixedHash<N>& hash) {
105 bytes stripped(input.begin() + 32 - N, input.end());
106 hash = dev::FixedHash<N>(stripped);
111 static
bytes getFunction(const std::
string& function) {
112 return dev::sha3(function.c_str()).ref().cropped(0, 4).toBytes();
115 const static
size_t kWordSize = 32;
Definition: encoding_solidity.hpp:11
static constexpr uint8_t kStartPrefix
Definition: encoding_solidity.hpp:13
static bytes packFunctionCall(const std::string &function, const Params &... args)
PACKING ///.
Definition: encoding_solidity.hpp:17
static void staticUnpack(const bytes &input, Params &... args)
PACKING ///.
Definition: encoding_solidity.hpp:84
static constexpr uint8_t kStartPrefixSize
Definition: encoding_solidity.hpp:14
static bytes packElemement(const bytes &value)
Definition: encoding_solidity.hpp:68
static const size_t kWordSize
Definition: encoding_solidity.hpp:115
static void unpackElement(const bytes &input, u256 &out)
Definition: encoding_solidity.hpp:96
static bytes pack(const Params &... args)
Definition: encoding_solidity.hpp:25
static bytes packElemement(dev::FixedHash< N > hash)
Definition: encoding_solidity.hpp:54
static bytes packElemement(bool flag)
Definition: encoding_solidity.hpp:66
static bytes packElemement(T num)
Definition: encoding_solidity.hpp:62
static bytes getFunction(const std::string &function)
UNPACKING ///.
Definition: encoding_solidity.hpp:111
static void unpackElement(const bytes &input, T &out)
Definition: encoding_solidity.hpp:99
static constexpr std::enable_if_t<!std::is_enum_v< N >, bool > is_integer(Signedness sig)
Definition: CommonData.h:333
std::vector<::byte > bytes
Definition: Common.h:46
void toBigEndian(T _val, Out &o_out)
Definition: CommonData.h:105
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
Definition: Common.h:98
Definition: default_construct_copyable_movable.hpp:10
std::vector< byte > bytes
Definition: types.hpp:53