OpendTect  6.6
bufstring.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: 12-4-2000
9  Contents: Variable buffer length strings with minimum size.
10  RCS: $Id$
11 ________________________________________________________________________
12 
13 -*/
14 
15 #include "basicmod.h"
16 #include "fixedstring.h"
17 #include "string2.h"
18 class QString;
19 
40 {
41 public:
42 
43  inline BufferString();
44  inline BufferString(const char*);
45  BufferString(const OD::String&);
46  BufferString(int minlen,bool setnull);
48  template <class T>
49  inline explicit BufferString(const T&);
50  template <class T>
51  inline BufferString(const char*,const T&,
52  const char* s=nullptr);
53  BufferString(const QString&);
54  virtual ~BufferString();
55  inline BufferString& operator=( const BufferString& b )
56  { return assignTo(b.buf_); }
57  inline BufferString& operator=( const char* s )
58  { return assignTo(s); }
59  inline BufferString& operator=( const FixedString& s )
60  { return assignTo(s.str()); }
61  inline BufferString& operator=( const OD::String& s )
62  { return assignTo(s.str()); }
63  template <class T>
64  inline BufferString& operator=(const T&);
65 
66  inline operator const char*() const { return buf(); }
67 
68  inline bool operator==(const BufferString&) const;
69  inline bool operator!=(const BufferString&) const;
70  inline bool operator==(const char*) const;
71  inline bool operator!=(const char*) const;
72  inline bool operator==(const OD::String&) const;
73  inline bool operator!=(const OD::String&) const;
74  inline bool operator==(const FixedString&) const;
75  inline bool operator!=(const FixedString&) const;
76 
77  inline char* getCStr()
78  { return const_cast<char*>(const_cast<BufferString*>(this)->gtBuf()); }
79  mDeprecated("Use getCStr")
80  void fill(char*,int maxnrchar) const;
82 
83  inline char& operator []( int idx ) { return getCStr()[idx]; }
84  inline char& first() { return getCStr()[0]; }
85  inline char& last() { return getCStr()[size()-1]; }
86  char* find(char);
87  char* find(const char*);
88  inline const char* find(char) const;
89  inline const char* find(const char*) const;
90  char* findLast(char);
91  char* findLast(const char*);
92  inline const char* findLast(char) const;
93  inline const char* findLast(const char*) const;
94 
96  BufferString& set(const char*);
97  BufferString& set( const OD::String& s ) { return set(s.str()); }
98  template <class T>
99  BufferString& set(const T&);
100  BufferString& set(float,int nrdec);
101  BufferString& set(double,int nrdec);
102  BufferString& setLim(float,int maxnrchars);
103  BufferString& setLim(double,int maxnrchars);
104 
106  BufferString& add(const char*);
107  BufferString& add( const OD::String& s ) { return add(s.str()); }
108  BufferString& add(const QString&);
109  template <class T>
110  BufferString& add(const T&);
111  BufferString& add(float,int nrdec);
112  BufferString& add(double,int nrdec);
113  BufferString& addLim(float,int maxnrchars);
114  BufferString& addLim(double,int maxnrchars);
115 
116  BufferString& addSpace(int nrspaces=1);
117  BufferString& addTab(int nrtabs=1);
118  BufferString& addNewLine(int nrnewlines=1);
119 
120  inline unsigned int bufSize() const { return len_; }
121  bool setBufSize(unsigned int);
122  inline unsigned int minBufSize() const { return minlen_; }
123  void setMinBufSize(unsigned int);
124 
125  BufferString& replace(char from,char to);
126  BufferString& replace(const char* from,const char* to);
128  inline BufferString& remove( const char* s ) { return replace(s,nullptr); }
130 
131  BufferString& insertAt(int idx, const char*);
132  //< If idx >= size(), pads spaces
133  BufferString& replaceAt(int idx, const char*,bool cutoff=true);
134  //< If idx >= size(), pads spaces
137  BufferString& embed(char open,char close);
138  BufferString& unEmbed(char open,char close);
139  inline BufferString& quote( char q='\'' ) { return embed(q,q); }
140  inline BufferString& unQuote( char q='\'' ) { return unEmbed(q,q); }
141 
142  enum CleanType { OnlyAlphaNum, AllowDots,
143  NoSpaces, NoFileSeps, NoSpecialChars };
144  BufferString& clean(CleanType ct=OnlyAlphaNum);
145 
146  static const BufferString& empty();
147 
148 protected:
149 
150  char* buf_;
151  unsigned int len_;
152  const unsigned int minlen_;
153 
154  BufferString& assignTo(const char*);
155 
156  const char* gtBuf() const;
157  inline const char* gtStr() const;
158 
159 private:
160 
161  void init();
162  inline void destroy() { delete [] buf_; buf_ = nullptr; }
163  BufferString& addArr32Chars(const char*,int);
164 
165 public:
166 
167  // use add instead
168  inline BufferString& operator+=( const char* s ) { return add( s ); }
169  inline BufferString& operator+=( const OD::String& s )
170  { return add(s.str()); }
171  template <class T>
172  inline BufferString& operator+=( const T& t ) { return add( t ); }
173 
174 };
175 
176 
177 #ifndef __win__
178 
179 // Avoid silent conversion to BufferString from any type.
180 
183 inline bool operator==(const char*,const BufferString&)
184 { OD_Undef_const_char_eq_bs_finder(); return false; }
185 inline bool operator!=(const char*,const BufferString&)
186 { OD_Undef_const_char_neq_bs_finder(); return true; }
187 
188 #endif
189 
190 
191 #define mBufferStringSimpConstrInitList \
192  buf_(nullptr), len_(0), minlen_(mMaxFilePathLength+1)
193 
196 inline BufferString::BufferString( const char* s )
200 
201 template <class T> inline
204 { add( t ); }
205 
206 template <class T> inline
207 BufferString::BufferString( const char* s1, const T& t, const char* s2 )
209 { *this += s1; *this += t; *this += s2; }
210 
211 inline const char* BufferString::gtStr() const
212 { return buf_ && *buf_ ? const_cast<char*>( buf_ ) : nullptr; }
213 
214 inline bool BufferString::operator==( const BufferString& s ) const
215 { return isEqual( s.buf_ ); }
216 inline bool BufferString::operator!=( const BufferString& s ) const
217 { return !isEqual( s.buf_ ); }
218 inline bool BufferString::operator==( const char* s ) const
219 { return isEqual( s ); }
220 inline bool BufferString::operator!=( const char* s ) const
221 { return !isEqual( s ); }
222 inline bool BufferString::operator==( const FixedString& s ) const
223 { return isEqual( s.str() ); }
224 inline bool BufferString::operator!=( const FixedString& s ) const
225 { return !isEqual( s.str() ); }
226 inline bool BufferString::operator==( const OD::String& s ) const
227 { return isEqual( s.str() ); }
228 inline bool BufferString::operator!=( const OD::String& s ) const
229 { return !isEqual( s.str() ); }
230 
231 inline const char* BufferString::find( char c ) const
232 { return OD::String::find( c ); }
233 inline const char* BufferString::find( const char* s ) const
234 { return OD::String::find( s ); }
235 inline const char* BufferString::findLast( char c ) const
236 { return OD::String::findLast( c ); }
237 inline const char* BufferString::findLast( const char* s ) const
238 { return OD::String::findLast( s ); }
239 
240 template <class T> inline BufferString& BufferString::operator=( const T& t )
241 { return set( t ); }
242 
243 template <class T> inline BufferString& BufferString::add( const T& t )
244 { return add( toString(t) ); }
245 
246 inline BufferString& BufferString::set( const char* s )
247 { setEmpty(); return add( s ); }
248 
249 template <class T> inline BufferString& BufferString::set( const T& t )
250 { setEmpty(); return add( t ); }
251 
252 inline BufferString& BufferString::set( float f, int nrdec )
253 { setEmpty(); return add( f, nrdec ); }
254 
255 inline BufferString& BufferString::set( double d, int nrdec )
256 { setEmpty(); return add( d, nrdec ); }
257 
258 inline BufferString& BufferString::setLim( float f, int maxnrchars )
259 { setEmpty(); return addLim( f, maxnrchars ); }
260 
261 inline BufferString& BufferString::setLim( double d, int maxnrchars )
262 { setEmpty(); return addLim( d, maxnrchars ); }
263 
264 
270 {
271 public:
272 
273  StringPair(const char* str1, const char* str2)
274  : first_(str1), second_(str2) {}
275  StringPair(const char* compstr);
276 
277  static char separator() { return '|'; }
278 
279  const BufferString& first() const { return first_; }
280  BufferString& first() { return first_; }
281  const BufferString& second() const { return second_; }
282  BufferString& second() { return second_; }
283 
284  const OD::String& getCompString() const;
285  const OD::String& getCompString(bool withwhitespace) const;
286 
287 protected:
288 
291 
292 };
293 
StringPair::second
BufferString & second()
Definition: bufstring.h:282
mBufferStringSimpConstrInitList
#define mBufferStringSimpConstrInitList
Definition: bufstring.h:191
BufferString::add
BufferString & add(char)
BufferString::operator!=
bool operator!=(const BufferString &) const
Definition: bufstring.h:216
BufferString::last
char & last()
Definition: bufstring.h:85
BufferString::addArr32Chars
BufferString & addArr32Chars(const char *, int)
OD_Undef_const_char_neq_bs_finder
void OD_Undef_const_char_neq_bs_finder()
StringPair::first
BufferString & first()
Definition: bufstring.h:280
BufferString::operator=
BufferString & operator=(const OD::String &s)
Definition: bufstring.h:61
BufferString::addLim
BufferString & addLim(double, int maxnrchars)
BufferString::assignTo
BufferString & assignTo(const char *)
BufferString::trimBlanks
BufferString & trimBlanks()
removes front and back whitespaces
Conv::to
T to(const F &fr)
Definition: convert.h:34
BufferString::gtStr
const char * gtStr() const
Definition: bufstring.h:211
BufferString::replace
BufferString & replace(const char *from, const char *to)
BufferString::minlen_
const unsigned int minlen_
Definition: bufstring.h:152
BufferString::addSpace
BufferString & addSpace(int nrspaces=1)
string2.h
BufferString::destroy
void destroy()
Definition: bufstring.h:162
BufferString::BufferString
BufferString(const BufferString &)
BufferString::unEmbed
BufferString & unEmbed(char open, char close)
BufferString::unQuote
BufferString & unQuote(char q='\'')
Definition: bufstring.h:140
BufferString::quote
BufferString & quote(char q='\'')
Definition: bufstring.h:139
fixedstring.h
BufferString::empty
static const BufferString & empty()
StringPair::first
const BufferString & first() const
Definition: bufstring.h:279
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
BufferString::add
BufferString & add(const char *)
BufferString::len_
unsigned int len_
Definition: bufstring.h:151
BufferString::find
char * find(char)
BufferString::clean
BufferString & clean(CleanType ct=OnlyAlphaNum)
BufferString::CleanType
CleanType
Definition: bufstring.h:142
StringPair::StringPair
StringPair(const char *str1, const char *str2)
Definition: bufstring.h:273
OD::String::isEqual
bool isEqual(const char *, CaseSensitivity c=CaseSensitive) const
OD_Undef_const_char_eq_bs_finder
void OD_Undef_const_char_eq_bs_finder()
BufferString::bufSize
unsigned int bufSize() const
Definition: bufstring.h:120
BufferString::addNewLine
BufferString & addNewLine(int nrnewlines=1)
BufferString::BufferString
BufferString()
Definition: bufstring.h:194
BufferString::add
BufferString & add(double, int nrdec)
OD::String::find
const char * find(char) const
BufferString::set
BufferString & set(const char *)
Definition: bufstring.h:246
BufferString::replaceAt
BufferString & replaceAt(int idx, const char *, bool cutoff=true)
BufferString::getCStr
char * getCStr()
Definition: bufstring.h:77
BufferString::embed
BufferString & embed(char open, char close)
BufferString::gtBuf
const char * gtBuf() const
StringPair
A StringPair has two strings, first() and second(). The getCompString() function concatanates the two...
Definition: bufstring.h:270
find
const BufferString * find(const BufferStringSet &, const char *)
BufferString::toLower
BufferString & toLower()
StringPair::getCompString
const OD::String & getCompString() const
BufferString::add
BufferString & add(const OD::String &s)
Definition: bufstring.h:107
OD::String::str
const char * str() const
Definition: odstring.h:47
BufferString::remove
BufferString & remove(const char *s)
Definition: bufstring.h:128
BufferString::set
BufferString & set(const OD::String &s)
Definition: bufstring.h:97
mDeprecated
#define mDeprecated(msg)
Definition: plfdefs.h:215
BufferString::addLim
BufferString & addLim(float, int maxnrchars)
BufferString::OnlyAlphaNum
@ OnlyAlphaNum
Definition: bufstring.h:142
BufferString::setBufSize
bool setBufSize(unsigned int)
operator!=
bool operator!=(const char *, const BufferString &)
Definition: bufstring.h:185
FixedString
OD::String that holds an existing text string.
Definition: fixedstring.h:29
BufferString::toUpper
BufferString & toUpper()
BufferString::BufferString
BufferString(int minlen, bool setnull)
BufferString::setLim
BufferString & setLim(float, int maxnrchars)
Definition: bufstring.h:258
Conv::set
void set(T &_to, const F &fr)
template based type conversion
Definition: convert.h:27
BufferString::operator=
BufferString & operator=(const char *s)
Definition: bufstring.h:57
BufferString::addTab
BufferString & addTab(int nrtabs=1)
BufferString::findLast
char * findLast(const char *)
BufferString::operator+=
BufferString & operator+=(const OD::String &s)
Definition: bufstring.h:169
BufferString::setMinBufSize
void setMinBufSize(unsigned int)
BufferString
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size.
Definition: bufstring.h:40
BufferString::operator+=
BufferString & operator+=(const T &t)
Definition: bufstring.h:172
BufferString::insertAt
BufferString & insertAt(int idx, const char *)
BufferString::find
char * find(const char *)
BufferString::replace
BufferString & replace(char from, char to)
BufferString::findLast
char * findLast(char)
BufferString::buf_
char * buf_
Definition: bufstring.h:150
StringPair::separator
static char separator()
Definition: bufstring.h:277
OD::String
encapsulates the read-access-only part of strings in OD.
Definition: odstring.h:31
BufferString::setEmpty
BufferString & setEmpty()
StringPair::getCompString
const OD::String & getCompString(bool withwhitespace) const
StringPair::second
const BufferString & second() const
Definition: bufstring.h:281
OD::String::findLast
const char * findLast(char) const
BufferString::operator+=
BufferString & operator+=(const char *s)
Definition: bufstring.h:168
BufferString::operator==
bool operator==(const BufferString &) const
Definition: bufstring.h:214
BufferString::~BufferString
virtual ~BufferString()
BufferString::BufferString
BufferString(const QString &)
BufferString::init
void init()
BufferString::add
BufferString & add(const QString &)
BufferString::add
BufferString & add(float, int nrdec)
StringPair::first_
BufferString first_
Definition: bufstring.h:289
BufferString::minBufSize
unsigned int minBufSize() const
Definition: bufstring.h:122
operator==
bool operator==(const char *, const BufferString &)
Definition: bufstring.h:183
BufferString::operator=
BufferString & operator=(const FixedString &s)
Definition: bufstring.h:59
BufferString::remove
BufferString & remove(char)
BufferString::operator=
BufferString & operator=(const BufferString &b)
Definition: bufstring.h:55
toString
BufferString toString(const BufferStringSet &bss)
Definition: bufstringset.h:156
StringPair::second_
BufferString second_
Definition: bufstring.h:290
StringPair::StringPair
StringPair(const char *compstr)
BufferString::first
char & first()
Definition: bufstring.h:84

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