30template<
class Inner,
typename T>
33#define LENGTH_PREFIXED_PROTO_HELPER(Inner, T) \
34 struct LengthPrefixedProtoHelper< Inner, T > \
36 static T read(const StoreDirConfig & store, typename Inner::ReadConn conn); \
37 static void write(const StoreDirConfig & store, typename Inner::WriteConn conn, const T & str); \
49 template<typename U> using S = typename Inner::template Serialise<U>; \
52template<
class Inner,
typename T>
53LENGTH_PREFIXED_PROTO_HELPER(
Inner, std::vector<T>);
55template<
class Inner,
typename T>
56LENGTH_PREFIXED_PROTO_HELPER(
Inner, std::set<T>);
58template<
class Inner,
typename... Ts>
59LENGTH_PREFIXED_PROTO_HELPER(
Inner, std::tuple<Ts...>);
61template<
class Inner,
typename K,
typename V>
62#define LENGTH_PREFIXED_PROTO_HELPER_X std::map<K, V>
63LENGTH_PREFIXED_PROTO_HELPER(
Inner, LENGTH_PREFIXED_PROTO_HELPER_X);
65template<
class Inner,
typename T>
70 std::vector<T> resSet;
71 auto size = readNum<size_t>(conn.from);
73 resSet.push_back(S<T>::read(
store, conn));
78template<
class Inner,
typename T>
80LengthPrefixedProtoHelper<Inner, std::vector<T>>::write(
81 const StoreDirConfig &
store,
typename Inner::WriteConn conn,
const std::vector<T> & resSet)
83 conn.to << resSet.size();
84 for (
auto &
key : resSet) {
89template<
class Inner,
typename T>
95 auto size = readNum<size_t>(conn.from);
97 resSet.insert(S<T>::read(
store, conn));
102template<
class Inner,
typename T>
107 conn.to << resSet.size();
108 for (
auto &
key : resSet) {
113template<
class Inner,
typename K,
typename V>
118 std::map<K, V> resMap;
119 auto size = readNum<size_t>(conn.from);
121 auto k = S<K>::read(
store, conn);
122 auto v = S<V>::read(
store, conn);
123 resMap.insert_or_assign(std::move(k), std::move(v));
128template<
class Inner,
typename K,
typename V>
131 const StoreDirConfig &
store,
typename Inner::WriteConn conn,
const std::map<K, V> & resMap)
133 conn.to << resMap.size();
134 for (
auto &
i : resMap) {
135 S<K>::write(
store, conn,
i.first);
136 S<V>::write(
store, conn,
i.second);
140template<
class Inner,
typename... Ts>
145 return std::tuple<Ts...> {
146 S<Ts>::read(
store, conn)...,
150template<
class Inner,
typename... Ts>
155 std::apply([&]<
typename... Us>(
const Us &...
args) {
ChunkedVector< std::string, 8192 > store
Definition lexer.l:1011
const T::key_type & key
Definition lexer.l:2763
auto i
Definition lexer.l:2745
Strings res
Definition lexer.l:2566
T Inner
Definition lexer.l:4920
std::vector< Expr * > args
Definition lexer.l:6126
Definition length-prefixed-protocol-helper.hh:31
Definition store-dir-config.hh:22