FARGOS/VISTA Object Management Environment Core  ..
FARGOS/VISTA Object Management Environment Core Table of Contents
OMEstring.h
Go to the documentation of this file.
1 #ifndef _OME_STRING_H
2 # define _OME_STRING_H "$Id: OMEstring.h 406 2020-07-12 05:07:33Z geoff $"
3 
11 # include <string>
12 
13 # ifdef __CWTYPE__
14 # define HAVE_WIDE_CHARS
15 # endif
16 
17 # include <OMErefCount.h>
18 
20 #if __cplusplus >= 201703
21  : uint_fast8_t
22 #endif
23 {
32 # ifdef SYSTEM390
34 # else
36 # endif
37 };
38 
41 inline constexpr uint_fast8_t UTF8characterLength(uint_fast8_t firstByte)
42 {
43  return ( (OME_EXPECT_TRUE((firstByte & 0x80) == 0) ? 1 /* regular ASCII */ :
44  ( ((firstByte & 0xe0) == 0xc0) ? 2 :
45  ( ((firstByte & 0xf0) == 0xe0) ? 3 :
46  4 ))));
47 #if 0
48  if ((firstByte & 0xf8) == 0xf0) {
49  return (4);
50  }
51 #endif
52 }
53 
54 extern uint_fast8_t UTF8characterLength(const void *charPtr) NONNULL_PARAMETERS(1);
58 inline uint_fast8_t UTF8characterLength(const void *charPtr)
59 {
60  const unsigned char *ucp = reinterpret_cast<const unsigned char *>(charPtr);
61  uint_fast8_t firstByte = *ucp;
62  return (UTF8characterLength(firstByte));
63 }
64 
65 // OMEstringStorage is used internally by OMEstring, thus all of its
66 // members are private and OMEstring is listed as a friend.
67 
68 typedef const void *OMEstringInROM;
69 
72 class OMEstringStorage final : public OMEreferenceCount
73 {
74  friend class OMEstring;
76 
77  typedef uint_fast32_t OMEstringCharSet_t;
78 
79 private:
80  union {
81  _STD string *str;
83 # ifdef HAVE_WIDE_CHARS
84  _STD wstring *wstr;
85 # endif
86  } stringData;
88 
89  // default initializer
91 
92  explicit OMEstringStorage(const char *s, uint_fast8_t impliedCharSet = OME_DEFAULT_CHARSET) NONNULL_CLASS_PARAMETERS(2);
93 
94  explicit OMEstringStorage(OMEstringInROM textSegmentString, ssize_t l = -1, uint_fast8_t impliedCharSet = OME_DEFAULT_CHARSET);
95 
96  explicit OMEstringStorage(const unsigned char *s, ssize_t l = -1, uint_fast8_t impliedCharSet = OME_CHARSET_UNDEFINED) NONNULL_CLASS_PARAMETERS(2);
97 
98  explicit OMEstringStorage(size_t l, uint_fast8_t impliedCharSet = OME_CHARSET_UNDEFINED);
99 
100  // destructor
102 
103  static constexpr bool stringIsInROM(OMEstringCharSet_t c)
104  {
105  return ((c & OME_CHARSET_STRING_IN_ROM) != 0);
106  }
107 
108  static constexpr bool stringIsMBCS(OMEstringCharSet_t c)
109  {
110  return ((c & OME_CHARSET_MASK_WIDE_CHARS) != 0);
111  }
112 
114  {
115  return ((c >> 8) & 0xffffff);
116  }
117 
118  void noteCharacterSet(uint_fast8_t c)
119  {
120  // retain existing flag for string-in-ROM
123  }
124 
125  void determineCharacterSet();
126 
127  uint_fast8_t getCharacterSet() const
128  {
130  }
131 
132  size_t length() const OME_PURE_FUNCTION;
133 
134  size_t lengthInCharacters() const OME_PURE_FUNCTION; // deal with multi-byte character sets
135 
136  // CONVERSION
137  operator const char *() const OME_PURE_FUNCTION;
138 
139  operator const unsigned char *() const OME_PURE_FUNCTION;
140 
141  // COMPARISON
142  bool operator==(const OMEstringStorage &arg) const;
143 
144  bool operator!=(const OMEstringStorage &arg) const;
145 
146  bool operator<(const OMEstringStorage &arg) const;
147 
148  bool operator>(const OMEstringStorage &arg) const;
149 
150  bool operator<=(const OMEstringStorage &arg) const;
151 
152  bool operator>=(const OMEstringStorage &arg) const;
153 
154  bool operator==(const char *arg) const;
155 
156  bool operator!=(const char *arg) const;
157 
158 // OMEstringStorage &operator+=(const OMEstringStorage &rop);
159 
160  OMEstringStorage *operator+(const OMEstringStorage &rop) const;
161 
162 
163  virtual OMEreferenceCount *deepCopy() const override;
164 
165  ssize_t substr(const unsigned char *sub, size_t len, size_t startOffset = 0) const;
166 
167  ssize_t substr(const char *sub, size_t len, size_t startOffset = 0) const
168  {
169  return (substr(reinterpret_cast<const unsigned char *>(sub), len, startOffset));
170  }
171 
172  ssize_t substr(const OMEstringStorage &sub, size_t startOffset = 0) const;
173 
174  ssize_t lastSubstr(const unsigned char *sub, size_t len, size_t startOffset = ~static_cast<size_t>(0)) const;
175 
176  ssize_t lastSubstr(const OMEstringStorage &sub, size_t startOffset = ~static_cast<size_t>(0)) const;
177 
178 
179  unsigned char midchar(size_t offset) const;
180 
181  uint32_t midMBCSchar(size_t offset) const;
182 
183  class OMEstring *midstr(size_t offset, size_t len) const;
184 
185  class OMEstring *midMBCSstr(size_t offset, size_t len) const;
186 
187  class OMEstring *reverse();
188 
189  class OMEstring *reverseMBCS();
190 
191  void truncateToLength(size_t newLen);
192 
193  template <typename STREAMTYPE> STREAMTYPE &outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent = 0, uint8_t includeTypePrefix = 0) const;
194 
195  template <typename STREAMTYPE> STREAMTYPE &outputOnStreamAsHex(STREAMTYPE &outputStream, int_fast16_t indent = 0,
196  bool dense = false) const;
197 }; // end class OMEstringStorage
198 
199 
200 template <typename STREAMTYPE> inline STREAMTYPE &OMEstringStorage::outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent, uint8_t includeTypePrefix) const
201 {
202  for (int_fast16_t count = 0; count < indent; ++count) {
203  outputStream << " ";
204  }
205  if (charSet == OME_CHARSET_BINARY) {
206  if ((includeTypePrefix & OME_DISABLE_QUOTE_OUTPUT) == 0) {
207  outputStream << "\"";
208  }
209  if (includeTypePrefix & OME_ESCAPE_UNPRINTABLE) {
210  size_t l = this->length();
211  const unsigned char *d = static_cast<const unsigned char *>(*this);
212  for (size_t i = 0; i < l; ++i) {
213  unsigned char c = d[i];
214  if (isprint(c)) {
215  outputStream << c;
216  }
217  else {
218  char bfr[8];
219  snprintf(bfr, sizeof(bfr), "\\%o", c);
220  outputStream << bfr;
221  }
222  }
223  }
224  else {
225  outputStream << "[binary data]";
226  }
227  if ((includeTypePrefix & OME_DISABLE_QUOTE_OUTPUT) == 0) {
228  outputStream << "\"";
229  }
230  return (outputStream);
231  }
232  if (stringIsInROM(charSet)) {
233  // TO DO: deal with Multi-Byte Character Set
234  if ((includeTypePrefix & OME_DISABLE_QUOTE_OUTPUT) == 0) {
235  outputStream << "\"";
236  }
237  outputStream << static_cast<const char *>(stringData.romString);
238  if ((includeTypePrefix & OME_DISABLE_QUOTE_OUTPUT) == 0) {
239  outputStream << "\"";
240  }
241  return (outputStream);
242  }
243 
244  if (stringIsMBCS(charSet)) {
245 #ifdef HAVE_WIDE_CHARS
246  if ((includeTypePrefix & OME_DISABLE_QUOTE_OUTPUT) == 0) {
247  outputStream << "\"";
248  }
249  outputStream << stringData.wstr->c_str();
250  if ((includeTypePrefix & OME_DISABLE_QUOTE_OUTPUT) == 0) {
251  outputStream << "\"";
252  }
253 #else
254  outputStream << "[WIDESTRING]";
255 #endif
256  }
257  else {
258  if ((includeTypePrefix & OME_DISABLE_QUOTE_OUTPUT) == 0) {
259  outputStream << "\"";
260  }
261  outputStream << stringData.str->c_str();
262  if ((includeTypePrefix & OME_DISABLE_QUOTE_OUTPUT) == 0) {
263  outputStream << "\"";
264  }
265  // outputStream << *(stringData.str);
266  }
267  return (outputStream);
268 }
269 
270 
271 template <typename STREAMTYPE> inline STREAMTYPE &OMEstringStorage::outputOnStreamAsHex(STREAMTYPE &outputStream,
272  int_fast16_t indent, bool dense) const
273 {
274  for (int_fast16_t count = 0; count < indent; ++count) {
275  outputStream << " ";
276  }
277 
278  const size_t len = length();
279  const unsigned char *ucp = static_cast<const unsigned char *>(*this);
280  for (size_t i = 0; i < len; ++i) {
281  if (dense == false) {
282  if ((i & 0xf) == 0) {
283  if (i != 0) {
284  outputStream << "\n";
285  for (int_fast16_t count = 0; count < indent; ++count) {
286  outputStream << " ";
287  }
288  }
289  }
290  else {
291  outputStream << " ";
292  }
293  }
294  uint8_t c = *(ucp++);
295  uint8_t b = (c >> 4) & 0xf;
296  outputStream << OMEhexDigits[b] << OMEhexDigits[c & 0xf];
297  }
298  if (dense == false) {
299  outputStream << "\n";
300  }
301  return (outputStream);
302 }
303 
304 
305 class OME_DLL_EXPORT OMEstring final : public OMEreferenceToData<OMEstringStorage>
306 {
307  friend class OMEstringStorage;
308 
309 private:
311  {
312  // used by deepCopy()
313  data = s;
314  }
315 
316 public:
317  static const OMEstring nullOMEstring;
318 
319  // default initializer
321  {
322  data = new OMEstringStorage();
323  }
324 
325  // copy initializer
327  {
328 // data = org.data;
329 // addReadOnlyReference();
330  }
331 
332  explicit OMEstring(const char *s, uint_fast8_t impliedCharSet = OME_DEFAULT_CHARSET)
333  {
334  data = new OMEstringStorage(s, impliedCharSet);
335  }
336 
337  explicit OMEstring(const unsigned char *s, ssize_t l = -1, uint_fast8_t impliedCharSet = OME_CHARSET_UNDEFINED)
338  {
339  data = new OMEstringStorage(s, l, impliedCharSet);
340  }
341 
342  explicit OMEstring(OMEstringInROM s, ssize_t l = -1, uint_fast8_t impliedCharSet = OME_DEFAULT_CHARSET)
343  {
344  data = new OMEstringStorage(s, l, impliedCharSet);
345  }
346 
347  explicit OMEstring(size_t l, uint_fast8_t impliedCharSet = OME_CHARSET_UNDEFINED)
348  {
349  data = new OMEstringStorage(l, impliedCharSet);
350  }
351 
352  // assignment
354  {
355  if (this->data == arg.data) {
356  return (*this); // assignment to self...
357  }
358  arg.data->addReadOnlyReference(); // make sure it doesn't disappear...
359  dropReference(arg.data);
360  return (*this);
361  }
362 
364 
366  {
367  OMEstringStorage *storageCopy = static_cast<OMEstringStorage *>(data->deepCopy());
368  OMEstring *copy = new OMEstring(storageCopy);
369  return (copy);
370  }
371 
372  OMEstring &operator=(const char *s)
373  {
374  OMEstringStorage *newStorage = new OMEstringStorage(s);
375  dropReference(newStorage);
376  return (*this);
377  }
378 
379  OMEstring &operator=(const unsigned char *s)
380  {
381  OMEstringStorage *newStorage = new OMEstringStorage(s, -1);
382  dropReference(newStorage);
383  return (*this);
384  }
385 
386  inline void noteCharacterSet(uint_fast8_t c)
387  {
388  data->noteCharacterSet(c);
389  }
390 
391  inline void determineCharacterSet()
392  {
393  data->determineCharacterSet();
394  }
395 
396  inline uint_fast8_t getCharacterSet() const
397  {
398  return (data->getCharacterSet());
399  }
400 
401  inline size_t length() const
402  {
403  return (data->length());
404  }
405 
406  // CONVERSION
407  inline operator const char *() const
408  {
409  // cast to character string
410  return (static_cast<const char *>(*data));
411  }
412 
413  inline operator const unsigned char *() const
414  {
415  // cast to character string
416  return (static_cast<const unsigned char *>(*data));
417  }
418 
419  OMEstring *printableCopy() const;
420 
421 
422  // COMPARISON
423  inline bool operator==(const OMEstring &arg) const
424  {
425  if (data == arg.data) {
426  return (true); // fast path
427  }
428  if (data->length() != arg.data->length()) {
429  return (false);
430  }
431  return (*data == *arg.data);
432  }
433 
434  inline bool operator!=(const OMEstring &arg) const
435  {
436  if (data == arg.data) {
437  return (false); // fast path
438  }
439  if (data->length() != arg.data->length()) {
440  return (true);
441  }
442  return (*data != *arg.data);
443  }
444 
445  inline bool operator<(const OMEstring &arg) const OME_ALWAYS_INLINE
446  {
447  return (*data < *arg.data);
448  }
449 
450  inline bool operator>(const OMEstring &arg) const OME_ALWAYS_INLINE
451  {
452  return (*data > *arg.data);
453  }
454 
455  inline bool operator<=(const OMEstring &arg) const OME_ALWAYS_INLINE
456  {
457  return (*data <= *arg.data);
458  }
459 
460  inline bool operator>=(const OMEstring &arg) const OME_ALWAYS_INLINE
461  {
462  return (*data >= *arg.data);
463  }
464 
465  inline bool operator==(const char *arg) const OME_ALWAYS_INLINE
466  {
467  return (*data == arg);
468  }
469 
470  inline bool operator!=(const char *arg) const OME_ALWAYS_INLINE
471  {
472  return (*data != arg);
473  }
474 
475  inline bool operator==(const unsigned char *arg) const OME_ALWAYS_INLINE
476  {
477  return (*data == (const char *) arg);
478  }
479 
480  inline bool operator!=(const unsigned char *arg) const OME_ALWAYS_INLINE
481  {
482  return (*data != (const char *) arg);
483  }
484 
485  // CONCATENATION
486  OMEstring *operator+(const OMEstring &rop) const;
487 
488  OMEstring &operator+=(const OMEstring &rop);
489 
490  inline ssize_t substr(const OMEstring &sub, size_t startOffset = 0) const
491  {
492  return (data->substr(*(sub.data), startOffset));
493  }
494 
495  inline ssize_t lastSubstr(const OMEstring &sub, size_t startOffset = ~static_cast<size_t>(0)) const
496  {
497  return (data->lastSubstr(*(sub.data), startOffset));
498  }
499 
500  inline ssize_t substr(const unsigned char *sub, size_t len = ~static_cast<size_t>(0), size_t startOffset = 0) const
501  {
502  return (data->substr(sub, len, startOffset));
503  }
504 
505  inline ssize_t substr(const char *sub, size_t len = ~static_cast<size_t>(0), size_t startOffset = 0) const
506  {
507  return (data->substr(reinterpret_cast<const unsigned char *>(sub), len, startOffset));
508  }
509 
510  inline ssize_t lastSubstr(const unsigned char *sub, size_t len = ~static_cast<size_t>(0), size_t startOffset = ~static_cast<size_t>(0)) const
511  {
512  return (data->lastSubstr(sub, len, startOffset));
513  }
514 
515  // character-set aware access
516  inline unsigned char midchar(size_t offset) const
517  {
518  return (data->midchar(offset));
519  }
520 
521  inline OMEstring *midstr(size_t offset, size_t len) const
522  {
523  return (data->midstr(offset, len));
524  }
525 
526  inline OMEstring *reverse() const
527  {
528  return (data->reverse());
529  }
530 
531  inline void truncateToLength(size_t newLen)
532  {
534  data->truncateToLength(newLen);
535  }
536 
547  template <typename STREAMTYPE> STREAMTYPE &outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent = 0, uint8_t includeTypePrefix = 0) const
548  {
549  data->outputOnStream(outputStream, indent, includeTypePrefix);
550  return (outputStream);
551  }
552 
564  template <typename STREAMTYPE> STREAMTYPE &outputOnStreamAsHex(STREAMTYPE &outputStream, int_fast16_t indent = 0,
565  bool dense = false) const
566  {
567  data->outputOnStreamAsHex(outputStream, indent, dense);
568  return (outputStream);
569  }
570 }; // end class OMEstring
571 
572 
575 template <typename STREAMTYPE> inline STREAMTYPE &operator<<(STREAMTYPE &outputStream, const OMEstring &data)
576 {
577  data.outputOnStream(outputStream, 0, OME_DISABLE_QUOTE_OUTPUT);
578  return (outputStream);
579 }
580 
581 ssize_t findSubstring(const unsigned char *source, size_t srcLen,
582  const unsigned char *subString, size_t subLen);
583 
584 ssize_t findLastSubstring(const unsigned char *source, size_t srcLen,
585  const unsigned char *subString, size_t subLen);
586 
587 OMEstring *convertCaseOfString(const OMEstring &str, uint_fast8_t toLower = 0);
588 
589 int caseInsensitiveCompare(const OMEstring &str1, const OMEstring &str2,
590  bool fuzzy = false);
591 
592 OMEstring *substituteText(const OMEstring &srcStr, const class OMEassoc &v);
593 
594 OMEstring *OMEbinaryToBase64(const OMEstring &source,
595  bool breakIntoLines = true);
596 
597 OMEstring *OMEbase64ToBinary(const OMEstring &source);
598 
599 size_t OMEhexToBinary(const unsigned char *src, size_t srcLen, unsigned char *dest, size_t destLen);
600 
601 OMEstring *OMEhexToBinary(const OMEstring &source);
602 
603 OMEstring *OMEbinaryToHex(const OMEstring &source);
604 
605 OMEstring *OMEbinaryToHex(const unsigned char *source, size_t sourceLen);
606 
608 
609 OMEstring *OMEmakeSafeURI(const OMEstring &source);
610 
613 #endif
614 /* vim: set expandtab shiftwidth=4 tabstop=4: */
OMEstring::operator<
bool operator<(const OMEstring &arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:445
OMErefCount.h
OME reference count implementation.
OMEstringStorage
Reference-counted storage for OMEstring objects.
Definition: OMEstring.h:72
OMEstring::operator>
bool operator>(const OMEstring &arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:450
OMEstringStorage::~OMEstringStorage
~OMEstringStorage()
Definition: OMEstring.cpp:256
OMEstringStorage::noteCharacterSet
void noteCharacterSet(uint_fast8_t c)
Definition: OMEstring.h:118
OMEstring::substr
ssize_t substr(const OMEstring &sub, size_t startOffset=0) const
Definition: OMEstring.h:490
l
Ïúíþ ð Ø ˜ ˜ __text __TEXT € __apple_names __DWARF __apple_objc __DWARF __apple_namespac__DWARF H X __apple_types __DWARF l
Definition: tmp3.o.cpp:1
OMEstringStorage::romString
OMEstringInROM romString
Definition: OMEstring.h:82
OMEstring::lastSubstr
ssize_t lastSubstr(const unsigned char *sub, size_t len=~static_cast< size_t >(0), size_t startOffset=~static_cast< size_t >(0)) const
Definition: OMEstring.h:510
OME_DISABLE_QUOTE_OUTPUT
@ OME_DISABLE_QUOTE_OUTPUT
Definition: OMEmanifests.h:110
OMEprofileCounter< uint32_t >
s
const char s[]
Definition: t.cpp:4
OMEstringStorage::reverse
class OMEstring * reverse()
Definition: OMEstring.cpp:525
OMEstring::operator!=
bool operator!=(const OMEstring &arg) const
Definition: OMEstring.h:434
OMEstringStorage::midMBCSstr
class OMEstring * midMBCSstr(size_t offset, size_t len) const
Definition: OMEstring.cpp:497
OMEstring::deepCopy
OMEstring * deepCopy() const
Definition: OMEstring.h:365
OMEstringStorage::outputOnStream
STREAMTYPE & outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent=0, uint8_t includeTypePrefix=0) const
Definition: OMEstring.h:200
OMEstringStorage::lengthInCharacters
size_t lengthInCharacters() const OME_PURE_FUNCTION
Definition: OMEstring.cpp:417
OMEstringStorage::substr
ssize_t substr(const unsigned char *sub, size_t len, size_t startOffset=0) const
Definition: OMEstring.cpp:776
OMEstringStorage::stringData
union OMEstringStorage::@27 stringData
OMEstringStorage::operator<=
bool operator<=(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:640
OMEstring::operator=
OMEstring & operator=(const char *s)
Definition: OMEstring.h:372
OMEstring.h
OME string implementation.
OMEstring::reverse
OMEstring * reverse() const
Definition: OMEstring.h:526
OMEstring::OMEstringStorage
friend class OMEstringStorage
Definition: OMEstring.h:307
OMEassoc
Implements associative array of OMEtype elements.
Definition: OMEassoc.h:112
operator<<
STREAMTYPE & operator<<(STREAMTYPE &outputStream, const OMEstring &data)
Output an OMEstring to an output stream.
Definition: OMEstring.h:575
UTF8characterLength
constexpr uint_fast8_t UTF8characterLength(uint_fast8_t firstByte)
Return the number of bytes needed to represent the UTF character.
Definition: OMEstring.h:41
OMEstring
Implements text and binary string storage.
Definition: OMEstring.h:305
stderr
#define stderr
Definition: tmp.o.cpp:3115
OME_CHARSET_UNICODE
@ OME_CHARSET_UNICODE
Definition: OMEstring.h:31
OMEstring::OMEstring
OMEstring(const OMEstring &org)
Definition: OMEstring.h:326
OMEreferenceToData< OMEstringStorage >::data
OMEstringStorage * data
Definition: OMErefCount.h:82
OME_CHARSET_ASCII
@ OME_CHARSET_ASCII
Definition: OMEstring.h:28
OMEstringStorage::OMEstringCharSet_t
uint_fast32_t OMEstringCharSet_t
Definition: OMEstring.h:77
OME_character_set_t
OME_character_set_t
Definition: OMEstring.h:19
OMEstringStorage::operator!=
bool operator!=(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:585
OMEstring::determineCharacterSet
void determineCharacterSet()
Definition: OMEstring.h:391
OMEstringInROM
const typedef void * OMEstringInROM
Points to immovable, read-only string data.
Definition: OMEstring.h:68
OMEhexDigits
const unsigned char OMEhexDigits[]
Definition: OMEstring.cpp:19
OMEstring::operator<=
bool operator<=(const OMEstring &arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:455
OMEstringStorage::stringIsInROM
static constexpr bool stringIsInROM(OMEstringCharSet_t c)
Definition: OMEstring.h:103
NONNULL_CLASS_PARAMETERS
#define NONNULL_CLASS_PARAMETERS(...)
Mark a function as never returning a null pointer.
Definition: compiler_hints.h:337
OMEstringStorage::stringIsMBCS
static constexpr bool stringIsMBCS(OMEstringCharSet_t c)
Definition: OMEstring.h:108
OMEstringStorage::operator>=
bool operator>=(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:700
NONNULL_PARAMETERS
#define NONNULL_PARAMETERS(...)
Mark parameters to a function as not permitting null pointers.
Definition: compiler_hints.h:335
OMEstring::truncateToLength
void truncateToLength(size_t newLen)
Definition: OMEstring.h:531
OME_CHARSET_MASK_CHARSET
@ OME_CHARSET_MASK_CHARSET
Definition: OMEstring.h:25
OMEreferenceToData
Templated type-specific reference to a reference-counted object.
Definition: OMErefCount.h:79
OMEreferenceCount
Base class for reference-counted data.
Definition: OMErefCount.h:31
OMEstring::midchar
unsigned char midchar(size_t offset) const
Definition: OMEstring.h:516
OMEstring::operator!=
bool operator!=(const unsigned char *arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:480
OMEstring::OMEstring
OMEstring(OMEstringStorage *s)
Definition: OMEstring.h:310
OMEstring::OMEstring
OMEstring()
Definition: OMEstring.h:320
_OME_STRING_H
#define _OME_STRING_H
Definition: OMEstring.h:2
OMEstringStorage::operator<
bool operator<(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:611
srcID
const char srcID[]
Definition: catSym.c:17
OMEstring::operator>=
bool operator>=(const OMEstring &arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:460
OMEstring::noteCharacterSet
void noteCharacterSet(uint_fast8_t c)
Definition: OMEstring.h:386
OMEstringStorage::truncateToLength
void truncateToLength(size_t newLen)
Definition: OMEstring.cpp:325
findSubstring
ssize_t findSubstring(const unsigned char *source, size_t srcLen, const unsigned char *subString, size_t subLen)
Searches for a substring within a buffer.
Definition: OMEstring.cpp:60
OMEstring::~OMEstring
~OMEstring()
Definition: OMEstring.h:363
noteDeepCopy
void noteDeepCopy()
Definition: OMEassoc.cpp:74
OMEstringStorage::length
size_t length() const OME_PURE_FUNCTION
Definition: OMEstring.cpp:309
OME_DEFAULT_CHARSET
@ OME_DEFAULT_CHARSET
Definition: OMEstring.h:35
OME_EXPECT_TRUE
#define OME_EXPECT_TRUE(expr)
Annotation macro for conditional expression expected to be true.
Definition: compiler_hints.h:541
MAX_CHARS_IN_A_BYTE
#define MAX_CHARS_IN_A_BYTE
Definition: OMEstring.cpp:14
OMEstring::operator!=
bool operator!=(const char *arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:470
OMEstring::getCharacterSet
uint_fast8_t getCharacterSet() const
Definition: OMEstring.h:396
OMEstringStorage::operator==
bool operator==(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:560
OMEstringStorage::reverseMBCS
class OMEstring * reverseMBCS()
OMEhexToBinary
size_t OMEhexToBinary(const unsigned char *src, size_t srcLen, unsigned char *dest, size_t destLen)
Convert hexadecimal text to binary.
Definition: OMEbase64.cpp:225
OMEbase64ToBinary
OMEstring * OMEbase64ToBinary(const OMEstring &source)
Convert base-64 encoded text to its binary representation.
Definition: OMEbase64.cpp:156
OMEstringStorage::operator>
bool operator>(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:672
OMEstring::nullOMEstring
static const OMEstring nullOMEstring
Definition: OMEstring.h:317
OMEstring::midstr
OMEstring * midstr(size_t offset, size_t len) const
Definition: OMEstring.h:521
OMEstring::length
size_t length() const
Definition: OMEstring.h:401
OME_USED
const char srcID[] OME_USED
Definition: tick_time.cpp:24
substituteText
OMEstring * substituteText(const OMEstring &srcStr, const class OMEassoc &v)
OMEstring::outputOnStreamAsHex
STREAMTYPE & outputOnStreamAsHex(STREAMTYPE &outputStream, int_fast16_t indent=0, bool dense=false) const
Output the contents of an OMEstring object to an output stream as a collection of hexadecimal charact...
Definition: OMEstring.h:564
OMEstring::OMEstring
OMEstring(size_t l, uint_fast8_t impliedCharSet=OME_CHARSET_UNDEFINED)
Definition: OMEstring.h:347
operator+
OMEtype operator+(const OMEtype &lArg, const OMEtype &rArg)
Definition: OMEtype_operators.cpp:33691
OME_CHARSET_MASK_WIDE_CHARS
@ OME_CHARSET_MASK_WIDE_CHARS
Definition: OMEstring.h:27
OMEbinaryToHex
OMEstring * OMEbinaryToHex(const OMEstring &source)
Convert a string of binary data into a text string of hexadecimal characters.
Definition: OMEbase64.cpp:279
OMEstringStorage::lastSubstr
ssize_t lastSubstr(const unsigned char *sub, size_t len, size_t startOffset=~static_cast< size_t >(0)) const
Definition: OMEstring.cpp:808
OMEreferenceCount::addReadOnlyReference
void addReadOnlyReference()
Definition: OMErefCount.cpp:139
OMEstringStorage::operator+
OMEstringStorage * operator+(const OMEstringStorage &rop) const
Definition: OMEstring.cpp:388
OMEstringStorage::str
_STD string * str
Definition: OMEstring.h:81
OMEstringStorage::midMBCSchar
uint32_t midMBCSchar(size_t offset) const
Definition: OMEstring.cpp:438
OMEstring::operator==
bool operator==(const char *arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:465
OMEstringStorage::midchar
unsigned char midchar(size_t offset) const
Definition: OMEstring.cpp:431
OMEstringStorage::charSet
OMEstringCharSet_t charSet
Definition: OMEstring.h:87
OME_ALWAYS_INLINE
#define OME_ALWAYS_INLINE
Tell the compiler to alway inline a function, regardless of optimization level.
Definition: compiler_hints.h:364
OMEreferenceToData::dropReference
void dropReference(C *newData=nullptr) OME_ALWAYS_INLINE
Definition: OMErefCount.h:91
OME_CHARSET_BINARY
@ OME_CHARSET_BINARY
Definition: OMEstring.h:30
OMEstring::lastSubstr
ssize_t lastSubstr(const OMEstring &sub, size_t startOffset=~static_cast< size_t >(0)) const
Definition: OMEstring.h:495
operator+=
OMEtype & operator+=(OMEtype &lArg, const OMEtype &rArg)
Definition: OMEtype_operators.cpp:21683
OMEstring::operator==
bool operator==(const unsigned char *arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:475
OMEstring::operator==
bool operator==(const OMEstring &arg) const
Definition: OMEstring.h:423
OMEstring::operator=
OMEstring & operator=(const OMEstring &arg)
Definition: OMEstring.h:353
OMEstring::printableCopy
OMEstring * printableCopy() const
Definition: OMEstring.cpp:751
_STD
#define _STD
Definition: OMEmanifests.h:146
OMEstringStorage::determineCharacterSet
void determineCharacterSet()
Definition: OMEstring.cpp:540
OMEdebugInfo.h
OME debug and profiling interfaces.
OMEreferenceToData::getUniqueReference
void getUniqueReference()
Force unique reference to the data, which will trigger duplication if necessary (copy-on-write).
Definition: OMErefCount.h:127
OMEstringStorage::midstr
class OMEstring * midstr(size_t offset, size_t len) const
Definition: OMEstring.cpp:462
OME_DLL_EXPORT
#define OME_DLL_EXPORT
Definition: compiler_hints.h:464
OMEbinaryToBase64
OMEstring * OMEbinaryToBase64(const OMEstring &source, bool breakIntoLines=true)
Convert binary data to base64 text encoding.
Definition: OMEbase64.cpp:112
OMEreferenceCount::dropReference
int_fast32_t dropReference()
Definition: OMErefCount.cpp:144
OMEstring::outputOnStream
STREAMTYPE & outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent=0, uint8_t includeTypePrefix=0) const
Output an OMEstring to an output stream.
Definition: OMEstring.h:547
OMEstringStorage::OMEstringStorage
OMEstringStorage()
Definition: OMEstring.cpp:177
OMEstring::OMEstring
OMEstring(OMEstringInROM s, ssize_t l=-1, uint_fast8_t impliedCharSet=OME_DEFAULT_CHARSET)
Definition: OMEstring.h:342
OMEstring::OMEstring
OMEstring(const unsigned char *s, ssize_t l=-1, uint_fast8_t impliedCharSet=OME_CHARSET_UNDEFINED)
Definition: OMEstring.h:337
OMEstring::operator+
OMEstring * operator+(const OMEstring &rop) const
Definition: OMEstring.cpp:850
OMEstring::OMEstring
OMEstring(const char *s, uint_fast8_t impliedCharSet=OME_DEFAULT_CHARSET)
Definition: OMEstring.h:332
OME_CHARSET_STRING_IN_ROM
@ OME_CHARSET_STRING_IN_ROM
Definition: OMEstring.h:26
OME_CHARSET_EBCDIC
@ OME_CHARSET_EBCDIC
Definition: OMEstring.h:29
caseInsensitiveCompare
int caseInsensitiveCompare(const OMEstring &str1, const OMEstring &str2, bool fuzzy=false)
Definition: utils.cpp:447
OMEstringStorage::deepCopy
virtual OMEreferenceCount * deepCopy() const override
Definition: OMEstring.cpp:274
convertCaseOfString
OMEstring * convertCaseOfString(const OMEstring &str, uint_fast8_t toLower=0)
Definition: utils.cpp:411
OME_CHARSET_UNDEFINED
@ OME_CHARSET_UNDEFINED
Definition: OMEstring.h:24
OMEstringStorage::outputOnStreamAsHex
STREAMTYPE & outputOnStreamAsHex(STREAMTYPE &outputStream, int_fast16_t indent=0, bool dense=false) const
Definition: OMEstring.h:271
OMEstring::operator+=
OMEstring & operator+=(const OMEstring &rop)
Definition: OMEstring.cpp:833
OMEstringStorage::getCharacterSet
uint_fast8_t getCharacterSet() const
Definition: OMEstring.h:127
OMEconvertURIescapes
OMEstring * OMEconvertURIescapes(const OMEstring &source)
Convert Uniform Resource Identifier escape sequences.
Definition: OMEbase64.cpp:314
OMEhexDigits
const unsigned char OMEhexDigits[]
Definition: OMEstring.cpp:19
OMEstring::substr
ssize_t substr(const char *sub, size_t len=~static_cast< size_t >(0), size_t startOffset=0) const
Definition: OMEstring.h:505
OMEstringStorage::OMEstring
friend class OMEstring
Definition: OMEstring.h:74
OMEstring::substr
ssize_t substr(const unsigned char *sub, size_t len=~static_cast< size_t >(0), size_t startOffset=0) const
Definition: OMEstring.h:500
OMEstring::operator=
OMEstring & operator=(const unsigned char *s)
Definition: OMEstring.h:379
OMEmakeSafeURI
OMEstring * OMEmakeSafeURI(const OMEstring &source)
Escape any special characters in an Uniform Resource Identifier.
Definition: OMEbase64.cpp:366
OME_ESCAPE_UNPRINTABLE
@ OME_ESCAPE_UNPRINTABLE
Definition: OMEmanifests.h:113
OME_PURE_FUNCTION
#define OME_PURE_FUNCTION
Mark as an idempotent function that can access global variables.
Definition: compiler_hints.h:388
findLastSubstring
ssize_t findLastSubstring(const unsigned char *source, size_t srcLen, const unsigned char *subString, size_t subLen)
Definition: OMEstring.cpp:153
OMEstringStorage::ROMstringLen
static constexpr OMEstringCharSet_t ROMstringLen(OMEstringCharSet_t c)
Definition: OMEstring.h:113
Generated: Fri Jul 31 2020 18:19:15
Support Information