OpendTect  6.6
ascbinstream.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: Bert
8  Date: Oct 2013
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "basicmod.h"
15 #include "commondefs.h"
16 #include "plftypes.h"
17 #include "od_iosfwd.h"
18 
19 
30 {
31 public:
32 
33  ascbinostream(od_ostream&,bool binary);
34  ascbinostream(od_ostream*,bool binary);
35  virtual ~ascbinostream();
36  bool isOK() const;
37  bool isBad() const;
38 
39 # define mDeclascbinostreamAddFns(typ) \
40  ascbinostream& add(typ,char post=od_tab); \
41  ascbinostream& add(typ,const char* post)
42 
44  mDeclascbinostreamAddFns(unsigned char);
53 
54  template <class T>
55  ascbinostream& addEOL( T t ) { return add( t, od_newline ); }
56 
57  template <class T,class IT>
58  inline ascbinostream& addArr(const T*,IT sz,const char* between="\t",
59  const char* post="\n");
61 
62  ascbinostream& addBin(const void*,od_stream_Count nrbytes);
63  template <class T>
64  inline ascbinostream& addBin( const T& t )
65  { return addBin( &t, sizeof(T) ); }
66 
67  od_ostream& stream() { return strm_; }
68 
69 protected:
70 
72  const bool binary_;
73  const bool strmmine_;
74 
75 };
76 
77 
81 {
82 public:
83 
84  ascbinistream(od_istream&,bool binary);
85  ascbinistream(od_istream*,bool binary);
86  virtual ~ascbinistream();
87  bool isOK() const;
88  bool isBad() const;
89 
90  ascbinistream& get(char&);
91  ascbinistream& get(unsigned char&);
98  ascbinistream& get(float&);
99  ascbinistream& get(double&);
100 
101  template <class T,class IT>
102  inline ascbinistream& getArr(T* arr,IT sz);
104 
106  template <class T>
107  inline ascbinistream& getBin( T& t )
108  { return getBin( &t, sizeof(T) ); }
109 
110  od_istream& stream() { return strm_; }
111 
112 protected:
113 
115  const bool binary_;
116  const bool strmmine_;
117 
118 };
119 
120 
121 template <class T,class IT>
122 inline ascbinostream& ascbinostream::addArr( const T* arr, IT sz,
123  const char* between,
124  const char* post )
125 {
126  if ( binary_ )
127  return addBin( &sz, sizeof(IT) ).addBin( arr, sz * sizeof(T) );
128 
129  strm_ << sz;
130  for ( int idx=0; idx<sz; idx++ )
131  strm_ << arr[idx] << (idx == sz-1 ? post : between);
132 
133  return *this;
134 }
135 
136 
137 template <class T,class IT>
138 inline ascbinistream& ascbinistream::getArr( T* arr, IT sz )
139 {
140  if ( binary_ )
141  return getBin( arr, sz*sizeof(T) );
142 
143  for ( int idx=0; idx<sz; idx++ )
144  strm_ >> arr[idx];
145  return *this;
146 }
147 
148 
ascbinistream::get
ascbinistream & get(double &)
od_uint64
#define od_uint64
Definition: plftypes.h:36
ascbinistream::get
ascbinistream & get(int64_t &)
od_newline
#define od_newline
Definition: od_iosfwd.h:24
commondefs.h
ascbinistream::isBad
bool isBad() const
od_int64
#define od_int64
Definition: plftypes.h:35
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
od_istream
OD class for stream read common access to the std::cin.
Definition: od_istream.h:24
ascbinistream::get
ascbinistream & get(float &)
plftypes.h
ascbinistream::isOK
bool isOK() const
mDeclascbinostreamAddFns
#define mDeclascbinostreamAddFns(typ)
Definition: ascbinstream.h:39
ascbinostream::addArr
ascbinostream & addArr(const T *, IT sz, const char *between="\t", const char *post="\n")
Will write both sz and the array.
Definition: ascbinstream.h:122
ascbinostream::ascbinostream
ascbinostream(od_ostream *, bool binary)
ascbinistream::get
ascbinistream & get(char &)
ascbinistream
reads from a stream that was created in ascbinostream style.
Definition: ascbinstream.h:81
ascbinistream::get
ascbinistream & get(unsigned short &)
ascbinistream::getArr
ascbinistream & getArr(T *arr, IT sz)
Will NOT read the sz! Read sz and allocate first.
Definition: ascbinstream.h:138
ascbinistream::binary_
const bool binary_
Definition: ascbinstream.h:115
ascbinostream::strmmine_
const bool strmmine_
Definition: ascbinstream.h:73
ascbinistream::stream
od_istream & stream()
Definition: ascbinstream.h:110
ascbinostream::addBin
ascbinostream & addBin(const void *, od_stream_Count nrbytes)
od_int16
#define od_int16
Definition: plftypes.h:26
ascbinistream::ascbinistream
ascbinistream(od_istream *, bool binary)
ascbinostream::isBad
bool isBad() const
od_uint16
#define od_uint16
Definition: plftypes.h:27
ascbinistream::get
ascbinistream & get(unsigned int &)
ascbinistream::getBin
ascbinistream & getBin(void *, od_stream_Count nrbytes)
ascbinistream::get
ascbinistream & get(uint64_t &)
ascbinostream::addEOL
ascbinostream & addEOL(T t)
Definition: ascbinstream.h:55
od_int32
#define od_int32
Definition: plftypes.h:30
od_iosfwd.h
od_stream_Count
od_uint64 od_stream_Count
Definition: od_iosfwd.h:17
ascbinistream::~ascbinistream
virtual ~ascbinistream()
ascbinostream::~ascbinostream
virtual ~ascbinostream()
ascbinostream
writes to a stream that can be Ascii or Binary.
Definition: ascbinstream.h:30
ascbinostream::addBin
ascbinostream & addBin(const T &t)
Definition: ascbinstream.h:64
ascbinistream::ascbinistream
ascbinistream(od_istream &, bool binary)
ascbinostream::isOK
bool isOK() const
ascbinostream::stream
od_ostream & stream()
Definition: ascbinstream.h:67
ascbinostream::binary_
const bool binary_
Definition: ascbinstream.h:72
od_uint32
#define od_uint32
Definition: plftypes.h:31
ascbinistream::get
ascbinistream & get(int &)
ascbinistream::getBin
ascbinistream & getBin(T &t)
Definition: ascbinstream.h:107
ascbinistream::get
ascbinistream & get(unsigned char &)
ascbinistream::get
ascbinistream & get(short &)
od_ostream
OD class for stream write common access to the user log file, or std::cout in other than od_main.
Definition: od_ostream.h:26
ascbinistream::strmmine_
const bool strmmine_
Definition: ascbinstream.h:116
ascbinistream::strm_
od_istream & strm_
Definition: ascbinstream.h:114
ascbinostream::ascbinostream
ascbinostream(od_ostream &, bool binary)
ascbinostream::strm_
od_ostream & strm_
Definition: ascbinstream.h:71

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021