OpendTect  6.3
bindatadesc.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: A.H.Bril
8  Date: Feb 2001
9  Contents: Binary data interpretation
10 ________________________________________________________________________
11 
12 */
13 
14 #include "basicmod.h"
15 #include "gendefs.h"
16 
17 #define mDeclBinDataDescConstr(T,ii,is) \
18  BinDataDesc( const T* ) { set( ii, is, sizeof(T) ); } \
19  BinDataDesc( const T& ) { set( ii, is, sizeof(T) ); }
20 
42 {
43 public:
44 
45  enum ByteCount { N1=1, N2=2, N4=4, N8=8 };
46 
47  BinDataDesc( bool ii=false, bool is=true,
48  ByteCount b=N4 )
49  : isint_(ii), issigned_(is), nrbytes_(b) {}
50  BinDataDesc( bool ii, bool is, int b )
51  : isint_(ii), issigned_(is),
52  nrbytes_(nearestByteCount(ii,b)) {}
53  BinDataDesc( unsigned char c1, unsigned char c2 )
54  { set(c1,c2); }
55  BinDataDesc( const char* s ) { set(s); }
56  virtual ~BinDataDesc() {}
57 
58  inline bool isInteger() const { return isint_; }
59  inline bool isSigned() const { return issigned_; }
60  inline ByteCount nrBytes() const { return nrbytes_; }
61  inline void set( bool ii, bool is, ByteCount b )
62  { isint_ = ii; issigned_ = is; nrbytes_ = b; }
63  inline void set( bool ii, bool is, int b )
64  { isint_ = ii; issigned_ = is;
65  nrbytes_ = nearestByteCount(ii,b); }
66  void setInteger( bool yn ) { isint_ = yn; }
67  void setSigned( bool yn ) { issigned_ = yn; }
68  void setNrBytes( ByteCount n ) { nrbytes_ = n; }
69  void setNrBytes( int n )
70  { nrbytes_ = nearestByteCount(isint_,n); }
71 
72  // dump/restore
73  virtual int maxStringifiedSize() const { return 18; }
74  virtual void toString(BufferString&) const;
75  virtual void set(const char*);
76  virtual void dump(unsigned char&,unsigned char&) const;
77  virtual void set(unsigned char,unsigned char);
78 
79  mDeclBinDataDescConstr(signed char,true,true)
80  mDeclBinDataDescConstr(short,true,true)
81  mDeclBinDataDescConstr(int,true,true)
82  mDeclBinDataDescConstr(unsigned char,true,false)
83  mDeclBinDataDescConstr(unsigned short,true,false)
84  mDeclBinDataDescConstr(unsigned int,true,false)
85  mDeclBinDataDescConstr(float,false,true)
86  mDeclBinDataDescConstr(double,false,true)
87 
88  inline bool operator ==( const BinDataDesc& dc ) const
89  { return isEqual(dc); }
90  inline bool operator !=( const BinDataDesc& dc ) const
91  { return !isEqual(dc); }
92  inline bool isEqual( const BinDataDesc& dc ) const
93  {
94  unsigned char c11=0, c12=0, c21=0, c22=0;
95  dump(c11,c12); dc.dump(c21,c22);
96  return c11 == c21 && c12 == c22;
97  }
98 
99  int sizeFor( int n ) const { return nrbytes_ * n; }
100  virtual bool convertsWellTo(const BinDataDesc&) const;
101 
102  static ByteCount nearestByteCount( bool is_int, int s )
103  {
104  if ( !is_int ) return s > 6 ? N8 : N4;
105  if ( s > 6 ) s = 8;
106  else if ( s > 2 ) s = 4;
107  else if ( s < 2 ) s = 1;
108  return (ByteCount)s;
109  }
110 
111  static int nextSize( bool is_int, int s )
112  {
113  if ( s < 0 || s > 8 ) return -1;
114  if ( s == 0 ) return is_int ? 1 : 4;
115  if ( !is_int ) return s == 4 ? 8 : -1;
116  return s == 1 ? 2 : ( s == 2 ? 4 : 8 );
117  }
118 
119 protected:
120 
121  bool isint_;
122  bool issigned_;
124 
125  void setFrom(unsigned char,bool);
126 
127 };
128 
129 #undef mDeclBinDataDescConstr
#define mExpClass(module)
Definition: commondefs.h:157
BinDataDesc(const char *s)
Definition: bindatadesc.h:55
BinDataDesc(bool ii, bool is, int b)
Definition: bindatadesc.h:50
ByteCount
Definition: bindatadesc.h:45
virtual ~BinDataDesc()
Definition: bindatadesc.h:56
bool isint_
Definition: bindatadesc.h:121
void setInteger(bool yn)
Definition: bindatadesc.h:66
static ByteCount nearestByteCount(bool is_int, int s)
Definition: bindatadesc.h:102
void setSigned(bool yn)
Definition: bindatadesc.h:67
bool isEqual(const BinDataDesc &dc) const
Definition: bindatadesc.h:92
static int nextSize(bool is_int, int s)
Definition: bindatadesc.h:111
ByteCount nrBytes() const
Definition: bindatadesc.h:60
BinDataDesc(bool ii=false, bool is=true, ByteCount b=N4)
Definition: bindatadesc.h:47
ByteCount nrbytes_
Definition: bindatadesc.h:123
void setNrBytes(int n)
Definition: bindatadesc.h:69
bool issigned_
Definition: bindatadesc.h:122
virtual void dump(unsigned char &, unsigned char &) const
bool operator!=(const ArrayNDInfo &a1, const ArrayNDInfo &a2)
Definition: arrayndinfo.h:60
virtual int maxStringifiedSize() const
Definition: bindatadesc.h:73
BufferString toString(const DBKey &ky)
Definition: dbkey.h:115
bool isInteger() const
Definition: bindatadesc.h:58
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
BinDataDesc(unsigned char c1, unsigned char c2)
Definition: bindatadesc.h:53
#define mDeclBinDataDescConstr(T, ii, is)
Definition: bindatadesc.h:17
int sizeFor(int n) const
Definition: bindatadesc.h:99
Description of binary data.
Definition: bindatadesc.h:41
bool isSigned() const
Definition: bindatadesc.h:59
void setNrBytes(ByteCount n)
Definition: bindatadesc.h:68

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