12 #include <type_traits> 58 void write(
const char *buffer,
size_t len);
59 template<
typename T>
void write(
const T& t);
60 template<
typename T>
void write(T& t);
62 size_t read(
char *buffer,
size_t len);
63 template<
typename T>
typename std::enable_if< std::is_arithmetic<T>::value,
size_t>::type
64 read(T *t) {
return read((
char *) t,
sizeof(T)); }
85 static void serialize(
BinaryStream &,
const std::string &);
91 static void serialize(
BinaryStream &,
const std::vector<T> &);
104 template<
typename...>
106 template<
typename... C>
112 template <
typename T>
113 using serialize_member_t = decltype( std::declval<T&>().serialize( std::declval<BinaryStream&>() ) );
115 template <
typename T>
118 template<
typename T,
typename =
void>
123 : std::integral_constant<bool, std::is_same<serialize_member_t<T>,void>::value && std::is_same<deserialize_member_t<T>, T>::value > { };
132 template <
typename T>
134 stream.
write((
const char *) &t,
sizeof(T));
138 template <
typename T>
144 template <
typename T>
154 template <
typename T>
162 template <
typename T>
164 return T::deserialize(stream);
168 template <
typename T>
169 typename std::enable_if< has_typeid<T>::value && std::is_class<T>::value && !has_serialization_members<T>::value, T >::type
stream_read(
BinaryStream &stream) {
176 binary_stream_helpers::stream_write<const T>(*
this, t);
179 binary_stream_helpers::stream_write<T>(*
this, t);
183 return binary_stream_helpers::stream_read<T>(*this);
std::enable_if< has_typeid< T >::value &&std::is_class< T >::value &&!has_serialization_members< T >::value, T >::type stream_read(BinaryStream &stream)
typename void_t_struct< C... >::type void_t
void write(const char *buffer, size_t len)
decltype(std::declval< T & >().serialize(std::declval< BinaryStream & >())) serialize_member_t
BinaryStream(int read_fd, int write_fd)
decltype(T::deserialize(std::declval< BinaryStream & >())) deserialize_member_t
BinaryStream & operator=(const BinaryStream &)=delete
static BinaryStream connectToUnixSocket(const char *)
std::enable_if< has_typeid< T >::value &&std::is_class< T >::value &&!has_serialization_members< T >::value >::type stream_write(BinaryStream &stream, T &t)
size_t read(char *buffer, size_t len)
std::enable_if< std::is_arithmetic< T >::value, size_t >::type read(T *t)