57 #include "../general/endian_traits.h"
64 virtual void read(
char* ptr, std::size_t size ) = 0;
70 virtual void write(
const char* ptr, std::size_t size ) = 0;
78 template<
template<
typename T,
typename =std::allocator<T> >
class Seq,
79 typename Alloc=std::allocator<char> >
83 void read(
char* ptr, std::size_t size ){
84 if( content.size() < size )
throw(
"");
85 std::copy_n(content.begin(),size,ptr);
86 content.erase(content.begin(),content.begin()+size);
88 void write(
const char* ptr, std::size_t size ){
89 content.insert(content.end(),ptr,ptr+size);
91 Seq<char,Alloc>&
data() {
return content; }
92 const Seq<char,Alloc>&
data()
const {
return content; }
94 Seq<char,Alloc> content;
100 template<
typename ConstInputIterator>
107 void read(
char* ptr, std::size_t sz ) {
108 std::copy_n(cur,sz,ptr);
109 std::advance(cur,sz);
112 ConstInputIterator
current()
const {
return cur; }
114 ConstInputIterator cur;
117 template<
typename ConstInputIterator>
126 template<
typename OutputIterator>
132 void write(
const char* ptr, std::size_t sz ) {
133 cur = std::copy_n(ptr,sz,cur);
136 OutputIterator
current()
const {
return cur; }
141 template<
typename OutputIterator>
155 std::size_t
size()
const {
return sum; }
163 template<
typename T,
typename... Args>
174 typename std::enable_if<endian_traits<T>::convert ==
false>::type* =
nullptr>
176 stream.
read(
reinterpret_cast<char*
>(&dest),
sizeof(
T));
183 typename std::enable_if<endian_traits<T>::convert ==
true>::type* =
nullptr>
185 detail::endian_converter<
sizeof(
T)> conv;
186 stream.
read(conv.data.buf,
sizeof(
T));
188 std::memcpy(
reinterpret_cast<char*
>(&dest),
189 conv.data.buf,
sizeof(
T));
196 typename std::enable_if<endian_traits<T>::convert ==
false>::type* =
nullptr>
198 stream.
write(
reinterpret_cast<const char*
>(&src),
sizeof(
T));
205 typename std::enable_if<endian_traits<T>::convert ==
true>::type* =
nullptr>
206 ostream&
operator<<(ostream& stream,
const T& src) {
207 detail::endian_converter<
sizeof(
T)> conv;
208 std::memcpy(conv.data.buf,
209 reinterpret_cast<const char*
>(&src),
sizeof(
T));
211 stream.write(conv.data.buf,
sizeof(
T));
215 template<
typename F,
typename S>
218 stream >> pair.first >> pair.second;
221 template<
typename F,
typename S>
224 stream << pair.first << pair.second;
240 stream << cx.real() << cx.imag();
INT cur_
Definition: bin.h:59
const Seq< char, Alloc > & data() const
Definition: stream.h:92
void write(const char *ptr, std::size_t size)
Definition: stream.h:88
void read(char *ptr, std::size_t size)
Definition: stream.h:83
Seq< char, Alloc > & data()
Definition: stream.h:91
~container_stream()
Definition: stream.h:82
~iitr_stream()
Definition: stream.h:106
iitr_stream(const iitr_stream &)=default
iitr_stream(ConstInputIterator cur_)
Definition: stream.h:104
void read(char *ptr, std::size_t sz)
Definition: stream.h:107
ConstInputIterator current() const
Definition: stream.h:112
virtual ~iostream()
Definition: stream.h:75
virtual ~istream()
Definition: stream.h:63
virtual void read(char *ptr, std::size_t size)=0
std::size_t size() const
Definition: stream.h:155
~ocount_stream()
Definition: stream.h:153
void write(const char *, std::size_t size)
Definition: stream.h:156
ocount_stream(std::size_t off=0u)
Definition: stream.h:152
~oitr_stream()
Definition: stream.h:131
OutputIterator current() const
Definition: stream.h:136
void write(const char *ptr, std::size_t sz)
Definition: stream.h:132
oitr_stream(OutputIterator begin)
Definition: stream.h:130
oitr_stream(const oitr_stream &)=default
virtual void write(const char *ptr, std::size_t size)=0
virtual ~ostream()
Definition: stream.h:69
istream & operator>>(istream &stream, smalluint &sml)
Definition: comm_tcp.h:103
ostream & operator<<(ostream &stream, const smalluint &sml)
Definition: comm_tcp.h:127
oitr_stream< OutputIterator > make_ostream(OutputIterator cur)
Definition: stream.h:142
std::size_t streamed_size()
Definition: stream.h:161
iitr_stream< ConstInputIterator > make_istream(ConstInputIterator begin)
Definition: stream.h:118