@@ -190,6 +190,8 @@ template<typename X> const X& ReadWriteAsHelper(const X& x) { return x; }
190
190
191
191
#define READWRITE (...) (::SerReadWriteMany(s, ser_action, __VA_ARGS__))
192
192
#define READWRITEAS (type, obj ) (::SerReadWriteMany(s, ser_action, ReadWriteAsHelper<type>(obj)))
193
+ #define SER_READ (obj, code ) ::SerRead(s, ser_action, obj, [&](Stream& s, typename std::remove_const<Type>::type& obj) { code; })
194
+ #define SER_WRITE (obj, code ) ::SerWrite(s, ser_action, obj, [&](Stream& s, const Type& obj) { code; })
193
195
194
196
/* *
195
197
* Implement three methods for serializable objects. These are actually wrappers over
@@ -1100,6 +1102,28 @@ inline void SerReadWriteMany(Stream& s, CSerActionUnserialize ser_action, Args&&
1100
1102
::UnserializeMany (s, args...);
1101
1103
}
1102
1104
1105
+ template <typename Stream, typename Type, typename Fn>
1106
+ inline void SerRead (Stream& s, CSerActionSerialize ser_action, Type&&, Fn&&)
1107
+ {
1108
+ }
1109
+
1110
+ template <typename Stream, typename Type, typename Fn>
1111
+ inline void SerRead (Stream& s, CSerActionUnserialize ser_action, Type&& obj, Fn&& fn)
1112
+ {
1113
+ fn (s, std::forward<Type>(obj));
1114
+ }
1115
+
1116
+ template <typename Stream, typename Type, typename Fn>
1117
+ inline void SerWrite (Stream& s, CSerActionSerialize ser_action, Type&& obj, Fn&& fn)
1118
+ {
1119
+ fn (s, std::forward<Type>(obj));
1120
+ }
1121
+
1122
+ template <typename Stream, typename Type, typename Fn>
1123
+ inline void SerWrite (Stream& s, CSerActionUnserialize ser_action, Type&&, Fn&&)
1124
+ {
1125
+ }
1126
+
1103
1127
template <typename I>
1104
1128
inline void WriteVarInt (CSizeComputer &s, I n)
1105
1129
{
0 commit comments