OpendTect  6.6
separstr.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: May 1995
9  Contents: String with a separator between the items
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "basicmod.h"
15 #include "stringbuilder.h"
16 #include "fixedstring.h"
17 #include "convert.h"
18 
19 class BufferStringSet;
20 class DBKey;
21 
36 {
37 public:
38 
39  SeparStringSB( const char* escapedstr=nullptr,
40  char separ=',' )
41  { initSep( separ ); initRep( escapedstr ); }
43  : rep_(ss.rep_) { initSep( ss.sep_[0] ); }
44 
46  SeparStringSB& operator=(const char* escapedstr);
47 
48  inline bool isEmpty() const { return rep_.isEmpty(); }
49  inline void setEmpty() { rep_.setEmpty(); }
50 
51  int size() const;
52  FixedString operator[](int) const;
53  FixedString from(int) const;
54 
55  od_int16 getI16Value(int) const;
56  od_uint16 getUI16Value(int) const;
57  od_int32 getIValue(int) const;
58  od_uint32 getUIValue(int) const;
59  od_int64 getI64Value(int) const;
60  od_uint64 getUI64Value(int) const;
61  float getFValue(int) const;
62  double getDValue(int) const;
63  bool getYN(int) const;
64 
65  int indexOf(const char* unescapedstr) const;
66 
69  SeparStringSB& add(const DBKey&,bool withsurvloc=true);
70  SeparStringSB& add(const char* unescapedstr);
71  inline SeparStringSB& add( const OD::String& ods )
72  { return add( ods.buf() ); }
73  template <class T>
74  inline SeparStringSB& add( T t )
75  { return add( toString(t) ); }
76 
78  { setEmpty(); return add( bss ); }
80  { setEmpty(); return add( s ); }
81  SeparStringSB& set( const char* unescapedstr )
82  { setEmpty(); return add( unescapedstr ); }
83  inline SeparStringSB& set( const OD::String& ods )
84  { return set( ods.buf() ); }
85  template <class T>
86  inline SeparStringSB& set( T t )
87  { setEmpty(); return add( t ); }
88 
89  template <class T>
90  inline SeparStringSB& operator +=( T t ) { return add( t ); }
91  template <class T>
92  inline SeparStringSB& operator +=( const OD::String& ods )
93  { return add( ods.buf() ); }
94 
95  inline operator const char*() const
96  { return buf(); }
97 
98  inline char* getCStr() { return rep_.getCStr(256); }
100  inline const char* str() const { return rep_.result(); }
102  inline const char* buf() const
103  { const char* ret = str(); if ( !ret ) ret = ""; return ret; }
105  StringBuilder& rep() { return rep_; }
107 
108  inline const char* unescapedStr() const { return getUnescaped(buf()); }
112  inline char sepChar() const { return *sep_; }
113  inline const char* sepStr() const { return sep_; }
114  void setSepChar(char);
115 
116 private:
117 
118  char sep_[2];
120 
121  void initRep(const char*);
122  inline void initSep( char s ) { sep_[0] = s; sep_[1] = '\0'; }
123 
125 
126  const char* getEscaped(const char* unescapedstr,char sep) const;
127  const char* getUnescaped(const char* escapedstartptr,
128  const char* nextsep=nullptr) const;
129 
130  const char* findSeparator(const char*) const;
131 };
132 
133 
134 
136 {
137 public:
138 
139  SeparString( const char* escapedstr=nullptr,
140  char separ=',' )
141  { initSep( separ ); initRep( escapedstr ); }
143  : rep_(ss.rep_) { initSep( ss.sep_[0] ); }
144 
146  SeparString& operator=(const char* escapedstr);
147 
148  inline bool isEmpty() const { return rep_.isEmpty(); }
149  inline void setEmpty() { rep_.setEmpty(); }
150 
151  int size() const;
152  FixedString operator[](int) const;
153  FixedString from(int) const;
154 
155  int getIValue(int) const;
156  od_uint32 getUIValue(int) const;
157  od_int64 getI64Value(int) const;
159  float getFValue(int) const;
160  double getDValue(int) const;
161  bool getYN(int) const;
162 
163  int indexOf(const char* unescapedstr) const;
164 
167  SeparString& add(const char* unescapedstr);
168  inline SeparString& add( const OD::String& ods )
169  { return add( ods.buf() ); }
170  template <class T>
171  inline SeparString& add( T t )
172  { return add( toString(t) ); }
173 
174  template <class T>
175  inline SeparString& operator +=( T t ) { return add( t ); }
176  template <class T>
177  inline SeparString& operator +=( const OD::String& ods )
178  { return add( ods.buf() ); }
179 
180  inline operator const char*() const
181  { return buf(); }
182 
183  inline char* getCStr() { return rep_.getCStr(); }
185  inline const char* buf() const { return rep_.buf(); }
187  BufferString& rep() { return rep_; }
189  const OD::String& rep() const { return rep_; }
191 
192  inline const char* unescapedStr() const { return getUnescaped(buf()); }
196  inline char sepChar() const { return *sep_; }
197  inline const char* sepStr() const { return sep_; }
198  void setSepChar(char);
199 
200 private:
201 
202  char sep_[2];
204 
205  void initRep(const char*);
206  inline void initSep( char s ) { sep_[0] = s; sep_[1] = '\0'; }
207 
209 
210  const char* getEscaped(const char* unescapedstr,char sep) const;
211  const char* getUnescaped(const char* escapedstartptr,
212  const char* nextsep=nullptr) const;
213 
214  const char* findSeparator(const char*) const;
215 };
216 
217 
223 {
224 public:
225 
226  FileMultiString(const char* escapedstr=nullptr)
227  : SeparString(escapedstr, separator() ) {}
228  template <class T> FileMultiString( const T& t )
229  : SeparString(t,separator()) {}
230 
231  static char separator() { return '`'; }
232 
233  // The function template overloading add(const SeparString&) in the base
234  // class needs an exact match! Passing a derived object would make the
235  // template function convert it to (const char*).
236  inline FileMultiString& add( const FileMultiString& fms )
237  { return add( (SeparString&)fms ); }
238  template <class T> inline
239  FileMultiString& operator +=( T t ) { return add( t ); }
240  inline FileMultiString& operator +=( const OD::String& ods )
241  { return add( ods.buf() ); }
242 
243  template <class T> inline
245  { SeparString::add( t ); return *this; }
246  inline FileMultiString& add( const OD::String& ods )
247  { return add( ods.buf() ); }
248 
249 };
250 
od_uint64
#define od_uint64
Definition: plftypes.h:36
FileMultiString::add
FileMultiString & add(T t)
Definition: separstr.h:244
SeparStringSB::operator=
SeparStringSB & operator=(const SeparStringSB &)
SeparStringSB::sepChar
char sepChar() const
Definition: separstr.h:112
StringBuilder
Builds a string by adding strings. Much faster than string manipulation. Only supports adding.
Definition: stringbuilder.h:20
SeparString::initRep
void initRep(const char *)
SeparStringSB::getEscaped
const char * getEscaped(const char *unescapedstr, char sep) const
SeparStringSB::indexOf
int indexOf(const char *unescapedstr) const
SeparString::sepStr
const char * sepStr() const
Definition: separstr.h:197
MultiID::add
MultiID & add(int i)
Definition: multiid.h:64
SeparStringSB::setEmpty
void setEmpty()
Definition: separstr.h:49
SeparString::add
SeparString & add(const BufferStringSet &)
Concatenation.
SeparStringSB::set
SeparStringSB & set(const BufferStringSet &bss)
Definition: separstr.h:77
SeparString::sep_
char sep_[2]
Definition: separstr.h:202
SeparString::rep_
BufferString rep_
Definition: separstr.h:203
SeparStringSB::add
SeparStringSB & add(T t)
Definition: separstr.h:74
SeparString::getEscaped
const char * getEscaped(const char *unescapedstr, char sep) const
SeparString::operator[]
FixedString operator[](int) const
Output unescaped.
SeparString::unescapedStr
const char * unescapedStr() const
Definition: separstr.h:192
BufferStringSet
Set of BufferString objects.
Definition: bufstringset.h:26
SeparString::rep
const OD::String & rep() const
Output escaped.
Definition: separstr.h:189
SeparStringSB::add
SeparStringSB & add(const BufferStringSet &)
Concatenation.
od_int64
#define od_int64
Definition: plftypes.h:35
SeparStringSB::SeparStringSB
SeparStringSB(const char *escapedstr=nullptr, char separ=',')
Definition: separstr.h:39
fixedstring.h
SeparStringSB::add
SeparStringSB & add(const SeparStringSB &)
Concatenation.
SeparStringSB::initRep
void initRep(const char *)
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
SeparStringSB::isEmpty
bool isEmpty() const
Definition: separstr.h:48
SeparString::indexOf
int indexOf(const char *unescapedstr) const
SeparStringSB::from
FixedString from(int) const
Output escaped.
SeparString::buf
const char * buf() const
Output escaped.
Definition: separstr.h:185
SeparStringSB::getCStr
char * getCStr()
Output escaped.
Definition: separstr.h:98
CompoundKey::setEmpty
void setEmpty()
Definition: compoundkey.h:40
FileMultiString
SeparString with backquotes as separators, use in most ascii files.
Definition: separstr.h:223
SeparString::add
SeparString & add(T t)
Definition: separstr.h:171
SeparString::sepChar
char sepChar() const
Definition: separstr.h:196
SeparString::getDValue
double getDValue(int) const
SeparStringSB::add
SeparStringSB & add(const OD::String &ods)
Definition: separstr.h:71
SeparStringSB::add
SeparStringSB & add(const char *unescapedstr)
SeparStringSB::setSepChar
void setSepChar(char)
SeparString::getUIValue
unsigned int getUIValue(int) const
SeparString::size
int size() const
SeparString::add
SeparString & add(const SeparString &)
Concatenation.
SeparStringSB::getDValue
double getDValue(int) const
SeparStringSB::getYN
bool getYN(int) const
SeparString::isEmpty
bool isEmpty() const
Definition: separstr.h:148
SeparStringSB::retstr_
BufferString retstr_
Definition: separstr.h:124
SeparStringSB::size
int size() const
SeparStringSB::sepStr
const char * sepStr() const
Definition: separstr.h:113
SeparStringSB::getUI64Value
uint64_t getUI64Value(int) const
SeparStringSB::getUnescaped
const char * getUnescaped(const char *escapedstartptr, const char *nextsep=nullptr) const
SeparString::operator=
SeparString & operator=(const char *escapedstr)
SeparString::findSeparator
const char * findSeparator(const char *) const
SeparString::add
SeparString & add(const OD::String &ods)
Definition: separstr.h:168
stringbuilder.h
CompoundKey::operator+=
CompoundKey & operator+=(const char *)
Definition: compoundkey.h:66
SeparString::getUI64Value
uint64_t getUI64Value(int) const
DBKey
Definition: dbkey.h:21
SeparString::retstr_
BufferString retstr_
Definition: separstr.h:208
od_int16
#define od_int16
Definition: plftypes.h:26
SeparStringSB::str
const char * str() const
Output escaped.
Definition: separstr.h:100
SeparStringSB::rep_
StringBuilder rep_
Definition: separstr.h:119
OD::String::buf
const char * buf() const
Definition: odstring.h:46
SeparString
Definition: separstr.h:136
SeparStringSB::set
SeparStringSB & set(const OD::String &ods)
Definition: separstr.h:83
SeparString::from
FixedString from(int) const
Output escaped.
FileMultiString::add
FileMultiString & add(const OD::String &ods)
Definition: separstr.h:246
SeparString::getCStr
char * getCStr()
Output escaped.
Definition: separstr.h:183
FixedString
OD::String that holds an existing text string.
Definition: fixedstring.h:29
FileMultiString::add
FileMultiString & add(const FileMultiString &fms)
Definition: separstr.h:236
SeparString::getFValue
float getFValue(int) const
SeparString::getI64Value
int64_t getI64Value(int) const
SeparStringSB::add
SeparStringSB & add(const DBKey &, bool withsurvloc=true)
od_uint16
#define od_uint16
Definition: plftypes.h:27
Conv::set
void set(T &_to, const F &fr)
template based type conversion
Definition: convert.h:27
SeparStringSB::getUI16Value
unsigned short getUI16Value(int) const
convert.h
FileMultiString::separator
static char separator()
Definition: separstr.h:231
SeparStringSB::getI16Value
short getI16Value(int) const
SeparStringSB
List encoded in a string.
Definition: separstr.h:36
SeparStringSB::set
SeparStringSB & set(const SeparStringSB &s)
Definition: separstr.h:79
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
SeparStringSB::rep
StringBuilder & rep()
Output escaped.
Definition: separstr.h:105
FileMultiString::FileMultiString
FileMultiString(const T &t)
Definition: separstr.h:228
SeparString::operator=
SeparString & operator=(const SeparString &)
SeparStringSB::buf
const char * buf() const
Output escaped.
Definition: separstr.h:102
SeparStringSB::set
SeparStringSB & set(T t)
Definition: separstr.h:86
SeparString::SeparString
SeparString(const char *escapedstr=nullptr, char separ=',')
Definition: separstr.h:139
SeparStringSB::unescapedStr
const char * unescapedStr() const
Definition: separstr.h:108
od_int32
#define od_int32
Definition: plftypes.h:30
SeparStringSB::getIValue
int getIValue(int) const
SeparStringSB::operator=
SeparStringSB & operator=(const char *escapedstr)
OD::String
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:31
SeparString::setEmpty
void setEmpty()
Definition: separstr.h:149
CompoundKey::buf
const char * buf() const
Definition: compoundkey.h:43
SeparString::getYN
bool getYN(int) const
SeparStringSB::getI64Value
int64_t getI64Value(int) const
SeparString::rep
BufferString & rep()
Output escaped.
Definition: separstr.h:187
SeparString::getIValue
int getIValue(int) const
SeparStringSB::getFValue
float getFValue(int) const
FileMultiString::FileMultiString
FileMultiString(const char *escapedstr=nullptr)
Definition: separstr.h:226
SeparString::SeparString
SeparString(const SeparString &ss)
Definition: separstr.h:142
SeparString::initSep
void initSep(char s)
Definition: separstr.h:206
SeparStringSB::initSep
void initSep(char s)
Definition: separstr.h:122
SeparString::getUnescaped
const char * getUnescaped(const char *escapedstartptr, const char *nextsep=nullptr) const
SeparStringSB::operator[]
FixedString operator[](int) const
Output unescaped.
SeparString::add
SeparString & add(const char *unescapedstr)
SeparStringSB::SeparStringSB
SeparStringSB(const SeparStringSB &ss)
Definition: separstr.h:42
SeparStringSB::set
SeparStringSB & set(const char *unescapedstr)
Definition: separstr.h:81
SeparStringSB::sep_
char sep_[2]
Definition: separstr.h:118
od_uint32
#define od_uint32
Definition: plftypes.h:31
SeparString::setSepChar
void setSepChar(char)
SeparStringSB::findSeparator
const char * findSeparator(const char *) const
toString
BufferString toString(const BufferStringSet &bss)
Definition: bufstringset.h:156
SeparStringSB::getUIValue
unsigned int getUIValue(int) const

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