Go to the documentation of this file.
2 # define _OME_STRING_H "$Id: OMEstring.h 406 2020-07-12 05:07:33Z geoff $"
14 # define HAVE_WIDE_CHARS
20 #if __cplusplus >= 201703
44 ( ((firstByte & 0xe0) == 0xc0) ? 2 :
45 ( ((firstByte & 0xf0) == 0xe0) ? 3 :
48 if ((firstByte & 0xf8) == 0xf0) {
60 const unsigned char *ucp =
reinterpret_cast<const unsigned char *
>(charPtr);
61 uint_fast8_t firstByte = *ucp;
83 # ifdef HAVE_WIDE_CHARS
115 return ((c >> 8) & 0xffffff);
154 bool operator==(const
char *arg) const;
156 bool operator!=(const
char *arg) const;
165 ssize_t
substr(const
unsigned char *sub,
size_t len,
size_t startOffset = 0) const;
167 ssize_t
substr(const
char *sub,
size_t len,
size_t startOffset = 0)
const
169 return (
substr(
reinterpret_cast<const unsigned char *
>(sub), len, startOffset));
174 ssize_t
lastSubstr(
const unsigned char *sub,
size_t len,
size_t startOffset = ~
static_cast<size_t>(0))
const;
179 unsigned char midchar(
size_t offset)
const;
193 template <
typename STREAMTYPE> STREAMTYPE &
outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent = 0, uint8_t includeTypePrefix = 0)
const;
195 template <
typename STREAMTYPE> STREAMTYPE &
outputOnStreamAsHex(STREAMTYPE &outputStream, int_fast16_t indent = 0,
196 bool dense =
false)
const;
202 for (int_fast16_t count = 0; count < indent; ++count) {
207 outputStream <<
"\"";
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];
219 snprintf(bfr,
sizeof(bfr),
"\\%o", c);
225 outputStream <<
"[binary data]";
228 outputStream <<
"\"";
230 return (outputStream);
235 outputStream <<
"\"";
237 outputStream << static_cast<const char *>(
stringData.romString);
239 outputStream <<
"\"";
241 return (outputStream);
245 #ifdef HAVE_WIDE_CHARS
247 outputStream <<
"\"";
251 outputStream <<
"\"";
254 outputStream <<
"[WIDESTRING]";
259 outputStream <<
"\"";
263 outputStream <<
"\"";
267 return (outputStream);
272 int_fast16_t indent,
bool dense)
const
274 for (int_fast16_t count = 0; count < indent; ++count) {
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) {
284 outputStream <<
"\n";
285 for (int_fast16_t count = 0; count < indent; ++count) {
294 uint8_t c = *(ucp++);
295 uint8_t b = (c >> 4) & 0xf;
298 if (dense ==
false) {
299 outputStream <<
"\n";
301 return (outputStream);
355 if (this->data == arg.
data) {
388 data->noteCharacterSet(c);
393 data->determineCharacterSet();
398 return (data->getCharacterSet());
403 return (data->length());
407 inline operator const char *()
const
410 return (
static_cast<const char *
>(*data));
413 inline operator const unsigned char *()
const
416 return (
static_cast<const unsigned char *
>(*data));
425 if (data == arg.
data) {
431 return (*data == *arg.
data);
436 if (data == arg.
data) {
442 return (*data != *arg.
data);
447 return (*data < *arg.data);
452 return (*data > *arg.data);
457 return (*data <= *arg.data);
462 return (*data >= *arg.data);
467 return (*data == arg);
472 return (*data != arg);
477 return (*data == (
const char *) arg);
482 return (*data != (
const char *) arg);
492 return (data->substr(*(sub.
data), startOffset));
497 return (data->lastSubstr(*(sub.
data), startOffset));
500 inline ssize_t
substr(
const unsigned char *sub,
size_t len = ~
static_cast<size_t>(0),
size_t startOffset = 0)
const
502 return (data->substr(sub, len, startOffset));
505 inline ssize_t
substr(
const char *sub,
size_t len = ~
static_cast<size_t>(0),
size_t startOffset = 0)
const
507 return (data->substr(
reinterpret_cast<const unsigned char *
>(sub), len, startOffset));
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
512 return (data->lastSubstr(sub, len, startOffset));
516 inline unsigned char midchar(
size_t offset)
const
518 return (data->midchar(offset));
523 return (data->midstr(offset, len));
528 return (data->reverse());
534 data->truncateToLength(newLen);
547 template <
typename STREAMTYPE> STREAMTYPE &
outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent = 0, uint8_t includeTypePrefix = 0)
const
549 data->outputOnStream(outputStream, indent, includeTypePrefix);
550 return (outputStream);
564 template <
typename STREAMTYPE> STREAMTYPE &
outputOnStreamAsHex(STREAMTYPE &outputStream, int_fast16_t indent = 0,
565 bool dense =
false)
const
567 data->outputOnStreamAsHex(outputStream, indent, dense);
568 return (outputStream);
575 template <
typename STREAMTYPE>
inline STREAMTYPE &
operator<<(STREAMTYPE &outputStream,
const OMEstring &data)
578 return (outputStream);
581 ssize_t
findSubstring(
const unsigned char *source,
size_t srcLen,
582 const unsigned char *subString,
size_t subLen);
585 const unsigned char *subString,
size_t subLen);
595 bool breakIntoLines =
true);
599 size_t OMEhexToBinary(
const unsigned char *src,
size_t srcLen,
unsigned char *dest,
size_t destLen);
bool operator<(const OMEstring &arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:445
OME reference count implementation.
Reference-counted storage for OMEstring objects.
Definition: OMEstring.h:72
bool operator>(const OMEstring &arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:450
~OMEstringStorage()
Definition: OMEstring.cpp:256
void noteCharacterSet(uint_fast8_t c)
Definition: OMEstring.h:118
ssize_t substr(const OMEstring &sub, size_t startOffset=0) const
Definition: OMEstring.h:490
Ïúíþ ð Ø ˜ ˜ __text __TEXT € __apple_names __DWARF __apple_objc __DWARF __apple_namespac__DWARF H X __apple_types __DWARF l
Definition: tmp3.o.cpp:1
OMEstringInROM romString
Definition: OMEstring.h:82
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
Definition: OMEmanifests.h:110
const char s[]
Definition: t.cpp:4
class OMEstring * reverse()
Definition: OMEstring.cpp:525
bool operator!=(const OMEstring &arg) const
Definition: OMEstring.h:434
class OMEstring * midMBCSstr(size_t offset, size_t len) const
Definition: OMEstring.cpp:497
OMEstring * deepCopy() const
Definition: OMEstring.h:365
STREAMTYPE & outputOnStream(STREAMTYPE &outputStream, int_fast16_t indent=0, uint8_t includeTypePrefix=0) const
Definition: OMEstring.h:200
size_t lengthInCharacters() const OME_PURE_FUNCTION
Definition: OMEstring.cpp:417
ssize_t substr(const unsigned char *sub, size_t len, size_t startOffset=0) const
Definition: OMEstring.cpp:776
union OMEstringStorage::@27 stringData
bool operator<=(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:640
OMEstring & operator=(const char *s)
Definition: OMEstring.h:372
OME string implementation.
OMEstring * reverse() const
Definition: OMEstring.h:526
friend class OMEstringStorage
Definition: OMEstring.h:307
Implements associative array of OMEtype elements.
Definition: OMEassoc.h:112
STREAMTYPE & operator<<(STREAMTYPE &outputStream, const OMEstring &data)
Output an OMEstring to an output stream.
Definition: OMEstring.h:575
constexpr uint_fast8_t UTF8characterLength(uint_fast8_t firstByte)
Return the number of bytes needed to represent the UTF character.
Definition: OMEstring.h:41
Implements text and binary string storage.
Definition: OMEstring.h:305
#define stderr
Definition: tmp.o.cpp:3115
@ OME_CHARSET_UNICODE
Definition: OMEstring.h:31
OMEstring(const OMEstring &org)
Definition: OMEstring.h:326
OMEstringStorage * data
Definition: OMErefCount.h:82
@ OME_CHARSET_ASCII
Definition: OMEstring.h:28
uint_fast32_t OMEstringCharSet_t
Definition: OMEstring.h:77
OME_character_set_t
Definition: OMEstring.h:19
bool operator!=(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:585
void determineCharacterSet()
Definition: OMEstring.h:391
const typedef void * OMEstringInROM
Points to immovable, read-only string data.
Definition: OMEstring.h:68
const unsigned char OMEhexDigits[]
Definition: OMEstring.cpp:19
bool operator<=(const OMEstring &arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:455
static constexpr bool stringIsInROM(OMEstringCharSet_t c)
Definition: OMEstring.h:103
#define NONNULL_CLASS_PARAMETERS(...)
Mark a function as never returning a null pointer.
Definition: compiler_hints.h:337
static constexpr bool stringIsMBCS(OMEstringCharSet_t c)
Definition: OMEstring.h:108
bool operator>=(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:700
#define NONNULL_PARAMETERS(...)
Mark parameters to a function as not permitting null pointers.
Definition: compiler_hints.h:335
void truncateToLength(size_t newLen)
Definition: OMEstring.h:531
@ OME_CHARSET_MASK_CHARSET
Definition: OMEstring.h:25
Templated type-specific reference to a reference-counted object.
Definition: OMErefCount.h:79
Base class for reference-counted data.
Definition: OMErefCount.h:31
unsigned char midchar(size_t offset) const
Definition: OMEstring.h:516
bool operator!=(const unsigned char *arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:480
OMEstring(OMEstringStorage *s)
Definition: OMEstring.h:310
OMEstring()
Definition: OMEstring.h:320
#define _OME_STRING_H
Definition: OMEstring.h:2
bool operator<(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:611
const char srcID[]
Definition: catSym.c:17
bool operator>=(const OMEstring &arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:460
void noteCharacterSet(uint_fast8_t c)
Definition: OMEstring.h:386
void truncateToLength(size_t newLen)
Definition: OMEstring.cpp:325
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()
Definition: OMEstring.h:363
void noteDeepCopy()
Definition: OMEassoc.cpp:74
size_t length() const OME_PURE_FUNCTION
Definition: OMEstring.cpp:309
@ OME_DEFAULT_CHARSET
Definition: OMEstring.h:35
#define OME_EXPECT_TRUE(expr)
Annotation macro for conditional expression expected to be true.
Definition: compiler_hints.h:541
#define MAX_CHARS_IN_A_BYTE
Definition: OMEstring.cpp:14
bool operator!=(const char *arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:470
uint_fast8_t getCharacterSet() const
Definition: OMEstring.h:396
bool operator==(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:560
class OMEstring * reverseMBCS()
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
OMEstring * OMEbase64ToBinary(const OMEstring &source)
Convert base-64 encoded text to its binary representation.
Definition: OMEbase64.cpp:156
bool operator>(const OMEstringStorage &arg) const
Definition: OMEstring.cpp:672
static const OMEstring nullOMEstring
Definition: OMEstring.h:317
OMEstring * midstr(size_t offset, size_t len) const
Definition: OMEstring.h:521
size_t length() const
Definition: OMEstring.h:401
const char srcID[] OME_USED
Definition: tick_time.cpp:24
OMEstring * substituteText(const OMEstring &srcStr, const class OMEassoc &v)
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(size_t l, uint_fast8_t impliedCharSet=OME_CHARSET_UNDEFINED)
Definition: OMEstring.h:347
OMEtype operator+(const OMEtype &lArg, const OMEtype &rArg)
Definition: OMEtype_operators.cpp:33691
@ OME_CHARSET_MASK_WIDE_CHARS
Definition: OMEstring.h:27
OMEstring * OMEbinaryToHex(const OMEstring &source)
Convert a string of binary data into a text string of hexadecimal characters.
Definition: OMEbase64.cpp:279
ssize_t lastSubstr(const unsigned char *sub, size_t len, size_t startOffset=~static_cast< size_t >(0)) const
Definition: OMEstring.cpp:808
void addReadOnlyReference()
Definition: OMErefCount.cpp:139
OMEstringStorage * operator+(const OMEstringStorage &rop) const
Definition: OMEstring.cpp:388
_STD string * str
Definition: OMEstring.h:81
uint32_t midMBCSchar(size_t offset) const
Definition: OMEstring.cpp:438
bool operator==(const char *arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:465
unsigned char midchar(size_t offset) const
Definition: OMEstring.cpp:431
OMEstringCharSet_t charSet
Definition: OMEstring.h:87
#define OME_ALWAYS_INLINE
Tell the compiler to alway inline a function, regardless of optimization level.
Definition: compiler_hints.h:364
void dropReference(C *newData=nullptr) OME_ALWAYS_INLINE
Definition: OMErefCount.h:91
@ OME_CHARSET_BINARY
Definition: OMEstring.h:30
ssize_t lastSubstr(const OMEstring &sub, size_t startOffset=~static_cast< size_t >(0)) const
Definition: OMEstring.h:495
OMEtype & operator+=(OMEtype &lArg, const OMEtype &rArg)
Definition: OMEtype_operators.cpp:21683
bool operator==(const unsigned char *arg) const OME_ALWAYS_INLINE
Definition: OMEstring.h:475
bool operator==(const OMEstring &arg) const
Definition: OMEstring.h:423
OMEstring & operator=(const OMEstring &arg)
Definition: OMEstring.h:353
OMEstring * printableCopy() const
Definition: OMEstring.cpp:751
#define _STD
Definition: OMEmanifests.h:146
void determineCharacterSet()
Definition: OMEstring.cpp:540
OME debug and profiling interfaces.
void getUniqueReference()
Force unique reference to the data, which will trigger duplication if necessary (copy-on-write).
Definition: OMErefCount.h:127
class OMEstring * midstr(size_t offset, size_t len) const
Definition: OMEstring.cpp:462
#define OME_DLL_EXPORT
Definition: compiler_hints.h:464
OMEstring * OMEbinaryToBase64(const OMEstring &source, bool breakIntoLines=true)
Convert binary data to base64 text encoding.
Definition: OMEbase64.cpp:112
int_fast32_t dropReference()
Definition: OMErefCount.cpp:144
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()
Definition: OMEstring.cpp:177
OMEstring(OMEstringInROM s, ssize_t l=-1, uint_fast8_t impliedCharSet=OME_DEFAULT_CHARSET)
Definition: OMEstring.h:342
OMEstring(const unsigned char *s, ssize_t l=-1, uint_fast8_t impliedCharSet=OME_CHARSET_UNDEFINED)
Definition: OMEstring.h:337
OMEstring * operator+(const OMEstring &rop) const
Definition: OMEstring.cpp:850
OMEstring(const char *s, uint_fast8_t impliedCharSet=OME_DEFAULT_CHARSET)
Definition: OMEstring.h:332
@ OME_CHARSET_STRING_IN_ROM
Definition: OMEstring.h:26
@ OME_CHARSET_EBCDIC
Definition: OMEstring.h:29
int caseInsensitiveCompare(const OMEstring &str1, const OMEstring &str2, bool fuzzy=false)
Definition: utils.cpp:447
virtual OMEreferenceCount * deepCopy() const override
Definition: OMEstring.cpp:274
OMEstring * convertCaseOfString(const OMEstring &str, uint_fast8_t toLower=0)
Definition: utils.cpp:411
@ OME_CHARSET_UNDEFINED
Definition: OMEstring.h:24
STREAMTYPE & outputOnStreamAsHex(STREAMTYPE &outputStream, int_fast16_t indent=0, bool dense=false) const
Definition: OMEstring.h:271
OMEstring & operator+=(const OMEstring &rop)
Definition: OMEstring.cpp:833
uint_fast8_t getCharacterSet() const
Definition: OMEstring.h:127
OMEstring * OMEconvertURIescapes(const OMEstring &source)
Convert Uniform Resource Identifier escape sequences.
Definition: OMEbase64.cpp:314
const unsigned char OMEhexDigits[]
Definition: OMEstring.cpp:19
ssize_t substr(const char *sub, size_t len=~static_cast< size_t >(0), size_t startOffset=0) const
Definition: OMEstring.h:505
friend class OMEstring
Definition: OMEstring.h:74
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=(const unsigned char *s)
Definition: OMEstring.h:379
OMEstring * OMEmakeSafeURI(const OMEstring &source)
Escape any special characters in an Uniform Resource Identifier.
Definition: OMEbase64.cpp:366
@ OME_ESCAPE_UNPRINTABLE
Definition: OMEmanifests.h:113
#define OME_PURE_FUNCTION
Mark as an idempotent function that can access global variables.
Definition: compiler_hints.h:388
ssize_t findLastSubstring(const unsigned char *source, size_t srcLen, const unsigned char *subString, size_t subLen)
Definition: OMEstring.cpp:153
static constexpr OMEstringCharSet_t ROMstringLen(OMEstringCharSet_t c)
Definition: OMEstring.h:113