Fission FSN
Loading...
Searching...
No Matches
fsStr.h
Go to the documentation of this file.
1/********************************************************************
2*
3* File: fsStr.h
4*
5* Purpose: String
6*
7*********************************************************************/
8
9#ifndef fsStrhdr
10#define fsStrhdr
11
12#include <string>
13
14#include "fsBaseTypes.h"
15
16class fsStr;
17fsStr operator+(const fsChar* pLHS, const fsStr& pRHS);
18fsStr operator+(const fsStr& pLHS, const fsChar* pRHS);
19fsBool operator==(const fsChar* pLHS, const fsStr& pRhs);
20fsBool operator!=(const fsChar* pLHS, const fsStr& pRhs);
21
22class fsStr
23{
24public:
25
26 typedef std::string::size_type sizeT;
27
28 static constexpr sizeT npos = std::string::npos; // Non-position in string. Similar to STL.
29 static constexpr fsChar mNewLineChar{'\n'};
30 static constexpr fsChar mLineFeedChar{'\r'};
31 static constexpr fsChar mTabChar{'\t'};
32 static constexpr fsChar mSpaceChar{' '};
33
34 fsStr(const char* data, sizeT len);
35 const fsU8* ptrGet() const;
36
37 fsS32 count(fsChar pChar) const;
38
39 fsBool isAlphaNumeric() const;
40 static fsBool isDigit(fsChar pC);
41
42 void formattingRemove();
43 void removeXmlTags();
44
45 fsBool emptyGet() const { return mImpl.empty(); }
46 // Raw storage size in bytes. Use this for binary payloads and byte-oriented parsing.
47 sizeT dataSizeGet() const { return mImpl.size(); }
48 // Legacy text-length helper intended for human-readable string length, not raw storage size.
49 // This should not be mixed with byte-oriented indexing or offsets from operator[], erase(),
50 // find()/rfind(), substr-style slicing, or external APIs that expect a byte count.
51 sizeT lengthGet() const;
52
53 void erase(sizeT pOff = 0, sizeT pCount = npos) { mImpl.erase(pOff, pCount); }
54 void eraseToLast(const fsStr& pMatch);
55 void eraseFromLast(const fsStr& pMatch);
56 // Parser helpers that consume from the front of the string.
57 fsStr chomp(const fsStr& pTerm);
58 fsStr chunk();
59 // ASCII whitespace trimming used by legacy parsers/config readers.
62 // Trims by the legacy text-length semantics above, while the underlying storage remains byte-oriented.
63 void trimToLength(fsS32 pNumChars);
64
65 void copy(const char* pString);
66 void copy(const char* pString, fsS32 pStart, fsS32 pCount);
67 void hTMLCodesReplace();
68 void stringSet(const char* str, int len);
69 void downcase();
70 void upcase();
71 fsBool compare(const char* pString, int len) const;
72
73 sizeT find(const char* pSub, sizeT pOffset = 0) const { return mImpl.find(pSub, pOffset); }
74 sizeT find(const char pSub, sizeT pOffset = 0) const { return mImpl.find(pSub, pOffset); }
75 sizeT find(const fsStr& pSub, sizeT pOffset = 0) const { return mImpl.find(pSub.mImpl, pOffset); }
76 sizeT rfind(const fsChar* pSub, sizeT pOffset = npos) const { return mImpl.rfind(pSub, pOffset); }
77 sizeT rfind(const fsChar pSub, sizeT pOffset = npos) const { return mImpl.rfind(pSub, pOffset); }
78 sizeT rfind(const fsStr& pSub, sizeT pOffset = npos) const { return mImpl.rfind(pSub.mImpl, pOffset); }
79 sizeT find_first_of(const fsStr& pSub, sizeT pOffset = 0) const { return mImpl.find_first_of(pSub.mImpl, pOffset); }
80
81 void replaceAll(const fsStr& pFind, const fsStr& pReplace);
82 void replaceFirst(const fsStr& pFind, const fsStr& pReplace);
83
84 fsF32 toF32() const;
85 fsS32 toS32() const;
86 fsU32 toU32() const;
87 fsS64 toS64() const;
88
89 // Underlying UTF-8/byte buffer.
90 // Use with byte-oriented APIs only; dataSizeGet() is the matching size accessor.
91 const char *utf8Get() const { return mImpl.c_str(); }
92
93 fsBool operator<(const fsStr& pRHS) const { return mImpl < pRHS.mImpl; }
94
95 fsBool operator!=(const fsStr& pRHS) const { return mImpl != pRHS.mImpl; }
96 fsBool operator!=(const fsChar* pRHS) const { return mImpl != pRHS; }
97
98 fsBool operator==(const fsStr& pRHS) const { return mImpl == pRHS.mImpl; }
99 fsBool operator==(const fsChar* pRHS) const { return mImpl == pRHS; }
100
101 fsStr& operator+=(const fsStr& pRHS)
102 {
103 mImpl += pRHS.mImpl;
104 return *this;
105 }
106
108 {
109 mImpl += pRHS;
110 return *this;
111 }
112
113 fsStr& operator+=(fsS32 pUnicode);
114
115 // fsStr& operator=( fsChar pRHS ) { mImpl = pRHS; return *this; }
116
117 // Byte-oriented indexing into the underlying storage.
118 // Do not combine with lengthGet() unless the caller is known to be ASCII-only.
119 const fsChar& operator[](sizeT pIndex) const { return mImpl.operator[](pIndex); }
120 fsChar& operator[](sizeT pIndex) { return mImpl.operator[](pIndex); }
121
122 const fsStr operator+(const fsStr& pRHS) const { return fsStr(*this) += pRHS; }
123
124 fsStr() {}
125 fsStr(const fsChar* pStr) : mImpl(pStr) {}
126 fsStr(fsChar pChar) : mImpl(1, pChar) {}
127 fsStr(fsS32 pInt) : mImpl(std::to_string(pInt)) {}
128 fsStr(fsU32 pInt) : mImpl(std::to_string(pInt)) {}
129 fsStr(fsU64 pInt) : mImpl(std::to_string(pInt)) {}
130 fsStr(fsS64 pInt) : mImpl(std::to_string(pInt)) {}
131 fsStr(fsF32 pFlt) : mImpl(std::to_string(pFlt)) {}
132protected:
133
134private:
135
136 static const fsStr mLessThanStr;
137 static const fsStr mGreaterThanStr;
138 static const fsStr mLineBreakStr;
139
140 static const fsStr mLessThanCode;
141 static const fsStr mGreaterThanCode;
142 static const fsStr mAmpersandCode;
143 static const fsStr mHardSpaceCode;
144 static const fsStr mHyphenCode;
145 static const fsStr mQuoteCode;
146 static const fsStr mAposCode;
147
148 std::string mImpl;
149};
150
151#endif
Definition fsStr.h:23
sizeT rfind(const fsChar *pSub, sizeT pOffset=npos) const
Definition fsStr.h:76
void removeXmlTags()
Definition fsStr.cpp:71
static constexpr fsChar mSpaceChar
Definition fsStr.h:32
void downcase()
Definition fsStr.cpp:412
fsStr(const char *data, sizeT len)
Definition fsStr.cpp:28
fsU32 toU32() const
Definition fsStr.cpp:444
fsStr chomp(const fsStr &pTerm)
Definition fsStr.cpp:266
fsBool operator<(const fsStr &pRHS) const
Definition fsStr.h:93
void trimToLength(fsS32 pNumChars)
Definition fsStr.cpp:357
fsS64 toS64() const
Definition fsStr.cpp:449
fsStr & operator+=(const fsStr &pRHS)
Definition fsStr.h:101
static fsBool isDigit(fsChar pC)
Definition fsStr.cpp:120
void upcase()
Definition fsStr.cpp:420
void eraseFromLast(const fsStr &pMatch)
Definition fsStr.cpp:257
std::string::size_type sizeT
Definition fsStr.h:26
sizeT lengthGet() const
Definition fsStr.cpp:221
void replaceFirst(const fsStr &pFind, const fsStr &pReplace)
Definition fsStr.cpp:454
fsBool isAlphaNumeric() const
Definition fsStr.cpp:397
fsStr(fsU32 pInt)
Definition fsStr.h:128
void trailingWhitespaceTrim()
Definition fsStr.cpp:343
sizeT find(const char pSub, sizeT pOffset=0) const
Definition fsStr.h:74
void hTMLCodesReplace()
Definition fsStr.cpp:98
fsBool operator!=(const fsStr &pRHS) const
Definition fsStr.h:95
fsBool emptyGet() const
Definition fsStr.h:45
void erase(sizeT pOff=0, sizeT pCount=npos)
Definition fsStr.h:53
void stringSet(const char *str, int len)
Definition fsStr.cpp:392
fsBool operator==(const fsChar *pRHS) const
Definition fsStr.h:99
fsS32 toS32() const
Definition fsStr.cpp:439
fsBool compare(const char *pString, int len) const
Definition fsStr.cpp:428
sizeT rfind(const fsChar pSub, sizeT pOffset=npos) const
Definition fsStr.h:77
fsStr(fsU64 pInt)
Definition fsStr.h:129
static constexpr fsChar mNewLineChar
Definition fsStr.h:29
const char * utf8Get() const
Definition fsStr.h:91
fsStr(const fsChar *pStr)
Definition fsStr.h:125
sizeT rfind(const fsStr &pSub, sizeT pOffset=npos) const
Definition fsStr.h:78
fsStr(fsS64 pInt)
Definition fsStr.h:130
void eraseToLast(const fsStr &pMatch)
Definition fsStr.cpp:248
fsS32 count(fsChar pChar) const
Definition fsStr.cpp:33
void copy(const char *pString)
Definition fsStr.cpp:376
fsF32 toF32() const
Definition fsStr.cpp:434
fsStr(fsF32 pFlt)
Definition fsStr.h:131
fsStr & operator+=(fsChar pRHS)
Definition fsStr.h:107
void formattingRemove()
Definition fsStr.cpp:50
fsBool operator!=(const fsChar *pRHS) const
Definition fsStr.h:96
void leadingWhitespaceTrim()
Definition fsStr.cpp:328
void replaceAll(const fsStr &pFind, const fsStr &pReplace)
Definition fsStr.cpp:468
sizeT find_first_of(const fsStr &pSub, sizeT pOffset=0) const
Definition fsStr.h:79
fsChar & operator[](sizeT pIndex)
Definition fsStr.h:120
fsStr(fsS32 pInt)
Definition fsStr.h:127
sizeT find(const char *pSub, sizeT pOffset=0) const
Definition fsStr.h:73
static constexpr sizeT npos
Definition fsStr.h:28
const fsU8 * ptrGet() const
Definition fsStr.cpp:23
const fsStr operator+(const fsStr &pRHS) const
Definition fsStr.h:122
const fsChar & operator[](sizeT pIndex) const
Definition fsStr.h:119
fsStr(fsChar pChar)
Definition fsStr.h:126
sizeT find(const fsStr &pSub, sizeT pOffset=0) const
Definition fsStr.h:75
fsBool operator==(const fsStr &pRHS) const
Definition fsStr.h:98
fsStr chunk()
Definition fsStr.cpp:288
static constexpr fsChar mLineFeedChar
Definition fsStr.h:30
static constexpr fsChar mTabChar
Definition fsStr.h:31
sizeT dataSizeGet() const
Definition fsStr.h:47
fsStr()
Definition fsStr.h:124
fsBool operator!=(const fsChar *pLHS, const fsStr &pRhs)
Definition fsStr.cpp:140
fsStr operator+(const fsChar *pLHS, const fsStr &pRHS)
Definition fsStr.cpp:125
fsBool operator==(const fsChar *pLHS, const fsStr &pRhs)
Definition fsStr.cpp:135
unsigned int fsU32
Definition fsBaseTypes.h:21
bool fsBool
Definition fsBaseTypes.h:26
unsigned char fsU8
Definition fsBaseTypes.h:15
int fsS32
Definition fsBaseTypes.h:20
char fsChar
Definition fsBaseTypes.h:12
float fsF32
Definition fsBaseTypes.h:28
unsigned long long fsU64
Definition fsBaseTypes.h:24
long long fsS64
Definition fsBaseTypes.h:23
Definition doctest.h:522