8#ifndef binpackeiostream_h_
9#define binpackeiostream_h_
23class char_traits :
public string_char_traits<Ch> {
27 static Ch eof () {
return EOF; }
28 static bool not_eof (
const int_type& a) {
return (a != EOF); }
29 static int_type to_int_type (Ch a) {
return static_cast<int_type
>(a); }
30 static bool eq_int_type (
const int_type& a,
const int_type& b) {
return a == b; }
31 static Ch to_char_type (
const int_type& a) {
return static_cast<char>(a); }
33typedef streambuf basic_streambuf;
34typedef istream basic_istream;
60 template <
class _Ch,
class _Tr = std::
char_traits<_Ch>>
62 class basic_streambuf :
public std::basic_streambuf<_Ch, _Tr> {
64 class basic_streambuf :
public streambuf {
67 basic_streambuf( std::ostream* o ) : _out( o ), _in( 0 ), _maxinbuf( 0 ) {
68 setbuf(
new _Ch[STD_ALLOC_SIZE], STD_ALLOC_SIZE );
70 basic_streambuf( std::istream* i ) : _out( 0 ), _in( i ), _maxinbuf( 0 ) {
71 setbuf(
new _Ch[STD_ALLOC_SIZE], STD_ALLOC_SIZE );
74 virtual ~basic_streambuf() {
86 typedef _Tr::int_type int_type;
93 virtual int overflow( int_type nCh = _Tr::eof() ) {
95 std::streamsize nsz = epptr() - pbase() + STD_ALLOC_SIZE;
96 _Ch* p =
new _Ch[nsz];
99 if ( !p )
return _Tr::eof();
102 std::streamsize osz = pptr() - pbase();
103 memcpy( p, pbase(), pptr() - pbase() );
111 if ( !_Tr::eq_int_type( _Tr::eof(), nCh ) )
113 *pptr() = _Tr::to_char_type( nCh );
114 pbump(
sizeof( _Tr::char_type ) );
121 virtual int_type underflow() {
122 if ( ( !_in ) || ( !_in->good() ) )
return _Tr::eof();
125 if ( gptr() != egptr() )
return _Tr::to_int_type( *gptr() );
129 _in->read( (_Ch*)( &
s ),
sizeof( std::streamsize ) );
130 if ( !_in->good() )
return _Tr::eof();
142 _in->read( eback(),
s );
143 setg( eback(), eback(), eback() +
s );
145 if ( gptr() != egptr() )
return _Tr::to_int_type( *gptr() );
153 *( (std::streamsize*)pbase() ) = pptr() - pbase() -
sizeof( std::streamsize );
156 _out->write( pbase(), pptr() - pbase() );
157 setp( pbase(), epptr() );
158 pbump(
sizeof( std::streamsize ) );
165 setg( eback(), egptr(), egptr() );
174 std::basic_streambuf<_Ch, _Tr>*
178 setbuf( _Ch* p, std::streamsize
s ) {
182 pbump(
sizeof( std::streamsize ) );
193 enum { STD_ALLOC_SIZE = 128 };
198 std::streamsize _maxinbuf;
206 template <
class _Ch,
class _Tr = std::
char_traits<_Ch>>
208 class basic_ostream :
public std::basic_ostream<_Ch, _Tr> {
210 class basic_ostream :
public ostream {
214 basic_ostream( std::basic_ostream<_Ch, _Tr>* o )
215 : std::basic_ostream<_Ch, _Tr>
217 basic_ostream( std::basic_ostream* o )
220 ( _buf =
new basic_streambuf<_Ch, _Tr>( o ) ) {
223 virtual ~basic_ostream() {
delete _buf; }
226 basic_streambuf<_Ch, _Tr>* _buf;
234 template <
class _Ch,
class _Tr = std::
char_traits<_Ch>>
236 class basic_istream :
public std::basic_istream<_Ch, _Tr> {
238 class basic_istream :
public istream {
242 basic_istream( std::basic_istream<_Ch, _Tr>* i )
243 : std::basic_istream<_Ch, _Tr>
245 basic_istream( std::basic_istream* i )
248 ( _buf =
new basic_streambuf<_Ch, _Tr>( i ) ) {
251 virtual ~basic_istream() {
delete _buf; }
254 basic_streambuf<_Ch, _Tr>* _buf;
257 template <
class _Ty,
class _Ch,
class _Tr>
258 inline basic_ostream<_Ch, _Tr>&
operator<<( basic_ostream<_Ch, _Tr>& o,
const _Ty
t ) {
259 int sz =
sizeof( _Ty );
260 o.write( (
const _Ch*)( &
t ), sz );
264 template <
class _Ty,
class _Ch,
class _Tr>
265 inline basic_istream<_Ch, _Tr>&
operator>>( basic_istream<_Ch, _Tr>& i, _Ty&
t ) {
266 int sz =
sizeof( _Ty );
267 i.read( (_Ch*)( &
t ), sz );
274 template <
class _Ch,
class _Tr = std::
char_traits<_Ch>>
275 class basic_ofstream :
public basic_ostream<_Ch, _Tr> {
277 basic_ofstream(
const char* fname )
278 : basic_ostream<_Ch, _Tr>
280 (
new std::basic_ofstream<_Ch, _Tr>( fname, std::ios::binary ) )
282 (
new std::ofstream( fname, std::ios::binary ) )
288 template <
class _Ch,
class _Tr = std::
char_traits<_Ch>>
289 class basic_ifstream :
public basic_istream<_Ch, _Tr> {
291 basic_ifstream(
const char* fname )
292 : basic_istream<_Ch, _Tr>
294 (
new std::basic_ifstream<_Ch, _Tr>( fname, std::ios::binary ) )
296 (
new std::ifstream( fname, std::ios::binary ) )
306 typedef basic_ostream<char, std::char_traits<char>> ostream;
307 typedef basic_istream<char, std::char_traits<char>> istream;
308 typedef basic_ofstream<char, std::char_traits<char>> ofstream;
309 typedef basic_ifstream<char, std::char_traits<char>> ifstream;
310 typedef basic_streambuf<char, std::char_traits<char>> streambuf;
std::istream & operator>>(std::istream &is, CosmicEventParser &ev)
ostream & operator<<(ostream &s, const EvtComplex &c)