OpendTect  6.3
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 ________________________________________________________________________
10 
11 -*/
12 
13 #include "basicmod.h"
14 #include "commondefs.h"
15 #include "plftypes.h"
16 #include "od_iosfwd.h"
17 
18 
29 {
30 public:
31 
32  ascbinostream(od_ostream&,bool binary);
33  ascbinostream(od_ostream*,bool binary);
34  virtual ~ascbinostream();
35  bool isOK() const;
36  bool isBad() const;
37 
38 # define mDeclascbinostreamAddFns(typ) \
39  ascbinostream& add(typ,char post=od_tab); \
40  ascbinostream& add(typ,const char* post)
41 
43  mDeclascbinostreamAddFns(unsigned char);
52 
53  template <class T>
54  ascbinostream& addEOL( T t ) { return add( t, od_newline ); }
55 
56  template <class T,class IT>
57  inline ascbinostream& addArr(const T*,IT sz,const char* between="\t",
58  const char* post="\n");
60 
61  ascbinostream& addBin(const void*,od_stream_Count nrbytes);
62  template <class T>
63  inline ascbinostream& addBin( const T& t )
64  { return addBin( &t, sizeof(T) ); }
65 
66  od_ostream& stream() { return strm_; }
67 
68 protected:
69 
71  const bool binary_;
72  const bool strmmine_;
73 
74 };
75 
76 
80 {
81 public:
82 
83  ascbinistream(od_istream&,bool binary);
84  ascbinistream(od_istream*,bool binary);
85  virtual ~ascbinistream();
86  bool isOK() const;
87  bool isBad() const;
88 
89  ascbinistream& get(char&);
90  ascbinistream& get(unsigned char&);
91  ascbinistream& get(od_int16&);
92  ascbinistream& get(od_uint16&);
93  ascbinistream& get(od_int32&);
94  ascbinistream& get(od_uint32&);
95  ascbinistream& get(od_int64&);
96  ascbinistream& get(od_uint64&);
97  ascbinistream& get(float&);
98  ascbinistream& get(double&);
99 
100  template <class T,class IT>
101  inline ascbinistream& getArr(T* arr,IT sz);
103 
104  ascbinistream& getBin(void*,od_stream_Count nrbytes);
105  template <class T>
106  inline ascbinistream& getBin( T& t )
107  { return getBin( &t, sizeof(T) ); }
108 
109  od_istream& stream() { return strm_; }
110 
111 protected:
112 
114  const bool binary_;
115  const bool strmmine_;
116 
117 };
118 
119 
120 template <class T,class IT>
121 inline ascbinostream& ascbinostream::addArr( const T* arr, IT sz,
122  const char* between,
123  const char* post )
124 {
125  if ( binary_ )
126  return addBin( &sz, sizeof(IT) ).addBin( arr, sz * sizeof(T) );
127 
128  strm_ << sz;
129  for ( int idx=0; idx<sz; idx++ )
130  strm_ << arr[idx] << (idx == sz-1 ? post : between);
131 
132  return *this;
133 }
134 
135 
136 template <class T,class IT>
137 inline ascbinistream& ascbinistream::getArr( T* arr, IT sz )
138 {
139  if ( binary_ )
140  return getBin( arr, sz*sizeof(T) );
141 
142  for ( int idx=0; idx<sz; idx++ )
143  strm_ >> arr[idx];
144  return *this;
145 }
od_ostream & stream()
Definition: ascbinstream.h:66
#define mExpClass(module)
Definition: commondefs.h:157
ascbinostream & addEOL(T t)
Definition: ascbinstream.h:54
OD class for stream write common access to the user log file, or std::cout in batch progs...
Definition: od_ostream.h:25
#define od_int64
Definition: plftypes.h:34
const bool binary_
Definition: ascbinstream.h:71
od_istream & strm_
Definition: ascbinstream.h:113
od_ostream & strm_
Definition: ascbinstream.h:70
const bool binary_
Definition: ascbinstream.h:114
const bool strmmine_
Definition: ascbinstream.h:72
ascbinostream & addArr(const T *, IT sz, const char *between="\t", const char *post="\n")
Will write both sz and the array.
Definition: ascbinstream.h:121
od_uint64 od_stream_Count
Definition: od_iosfwd.h:16
OD class for stream read.
Definition: od_istream.h:23
#define od_uint32
Definition: plftypes.h:30
reads from a stream that was created in ascbinostream style.
Definition: ascbinstream.h:79
#define mDeclascbinostreamAddFns(typ)
Definition: ascbinstream.h:38
ascbinistream & getBin(T &t)
Definition: ascbinstream.h:106
const bool strmmine_
Definition: ascbinstream.h:115
#define od_int16
Definition: plftypes.h:25
ascbinostream & addBin(const void *, od_stream_Count nrbytes)
#define od_uint64
Definition: plftypes.h:35
#define od_int32
Definition: plftypes.h:29
ascbinostream & addBin(const T &t)
Definition: ascbinstream.h:63
od_istream & stream()
Definition: ascbinstream.h:109
#define od_uint16
Definition: plftypes.h:26
ascbinistream & getArr(T *arr, IT sz)
Will NOT read the sz! Read sz and allocate first.
Definition: ascbinstream.h:137
writes to a stream that can be Ascii or Binary.
Definition: ascbinstream.h:28
#define od_newline
Definition: od_iosfwd.h:23

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