Qore Programming Language  1.12.2
QoreString.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3  QoreString.h
4 
5  QoreString Class Definition
6 
7  Qore Programming Language
8 
9  Copyright (C) 2003 - 2022 Qore Technologies, s.r.o.
10 
11  Permission is hereby granted, free of charge, to any person obtaining a
12  copy of this software and associated documentation files (the "Software"),
13  to deal in the Software without restriction, including without limitation
14  the rights to use, copy, modify, merge, publish, distribute, sublicense,
15  and/or sell copies of the Software, and to permit persons to whom the
16  Software is furnished to do so, subject to the following conditions:
17 
18  The above copyright notice and this permission notice shall be included in
19  all copies or substantial portions of the Software.
20 
21  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27  DEALINGS IN THE SOFTWARE.
28 
29  Note that the Qore library is released under a choice of three open-source
30  licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
31  information.
32 */
33 
34 #ifndef _QORE_QORESTRING_H
35 
36 #define _QORE_QORESTRING_H
37 
38 #include <cstdarg>
39 #include <string>
40 
41 class DateTime;
42 class BinaryNode;
43 
45 
49 #define CE_HTML (1 << 0)
51 #define CE_XML (1 << 1)
53 #define CE_NONASCII (1 << 2)
55 #define CE_XHTML (CE_HTML | CE_XML)
57 #define CE_ALL (CE_XHTML | CE_NONASCII)
59 
61 
65 #define CD_HTML (1 << 0)
67 #define CD_XML (1 << 1)
69 #define CD_NUM_REF (1 << 2)
71 #define CD_XHTML (CD_HTML | CD_XML)
73 #define CD_ALL (CD_XHTML | CD_NUM_REF)
75 
77 
81 #define QS_RE_GLOBAL (1 << 0)
82 #define QS_RE_CASELESS (1 << 1)
83 #define QS_RE_DOTALL (1 << 2)
84 #define QS_RE_EXTENDED (1 << 3)
85 #define QS_RE_MULTILINE (1 << 4)
87 
89 
93 class QoreString {
94  friend hashdecl qore_string_private;
95 
96 public:
98  DLLEXPORT QoreString();
99 
101  DLLEXPORT QoreString(bool b);
102 
104  DLLEXPORT QoreString(const char* str);
105 
107  DLLEXPORT QoreString(const char* str, const QoreEncoding* new_qorecharset);
108 
110  DLLEXPORT QoreString(const QoreEncoding* new_qorecharset);
111 
113  DLLEXPORT QoreString(const char* str, size_t len, const QoreEncoding* new_qorecharset = QCS_DEFAULT);
114 
116  DLLEXPORT QoreString(const std::string& str, const QoreEncoding* new_encoding = QCS_DEFAULT);
117 
119  DLLEXPORT QoreString(char c);
120 
122  DLLEXPORT QoreString(const QoreString& str);
123 
125  DLLEXPORT QoreString(const QoreString* str);
126 
128  DLLEXPORT QoreString(const QoreString* str, size_t len);
129 
131  DLLEXPORT QoreString(int64 i);
132 
134  DLLEXPORT QoreString(double f);
135 
137  DLLEXPORT QoreString(const DateTime* date);
138 
140  DLLEXPORT QoreString(const BinaryNode* bin);
141 
143  DLLEXPORT QoreString(const BinaryNode* bin, size_t maxlinelen);
144 
146  DLLEXPORT QoreString(char* nbuf, size_t nlen, size_t nallocated, const QoreEncoding* enc);
147 
149  DLLEXPORT ~QoreString();
150 
152 
154  DLLEXPORT size_t length() const;
155 
157  DLLEXPORT void set(const char* str, const QoreEncoding* new_qorecharset = QCS_DEFAULT);
158 
160 
162  DLLEXPORT void set(const char* str, size_t len);
163 
165  DLLEXPORT void set(const std::string& str, const QoreEncoding* new_qorecharset = QCS_DEFAULT);
166 
168  DLLEXPORT void set(const QoreString* str);
169 
171  DLLEXPORT void set(const QoreString& str);
172 
174  DLLEXPORT void set(char* nbuf, size_t nlen, size_t nallocated, const QoreEncoding* enc);
175 
177  DLLEXPORT void setEncoding(const QoreEncoding* new_encoding);
178 
180 
190  DLLEXPORT int concatEncode(ExceptionSink* xsink, const QoreString& str, unsigned code = CE_XHTML);
191 
193 
205  DLLEXPORT int concatDecode(ExceptionSink* xsink, const QoreString& str, unsigned code = CD_ALL);
206 
208 
211  DLLEXPORT void concatAndHTMLEncode(const char* str);
212 
214 
217  DLLEXPORT void concatAndHTMLDecode(const QoreString* str);
218 
220 
223  DLLEXPORT void concatAndHTMLDecode(const char* str, size_t slen);
224 
226 
229  DLLEXPORT void concatAndHTMLDecode(const char* str);
230 
232 
234  DLLEXPORT void concatDecodeUrl(const char* url);
235 
237  DLLEXPORT int concatDecodeUrl(const QoreString& url, ExceptionSink* xsink);
238 
240 
244  DLLEXPORT int concatEncodeUrl(ExceptionSink* xsink, const QoreString& url, bool encode_all = false);
245 
247 
250  DLLEXPORT int concatDecodeUriRequest(const QoreString& url, ExceptionSink* xsink);
251 
253 
258  DLLEXPORT int concatEncodeUriRequest(ExceptionSink* xsink, const QoreString& url);
259 
261  DLLEXPORT void concatEscape(const QoreString* str, char c, char esc_char, ExceptionSink* xsink);
262 
264  DLLEXPORT void concatEscape(const char* str, char c, char esc_char = '\\');
265 
267 
273  DLLEXPORT void concatAndHTMLEncode(const QoreString* str, ExceptionSink* xsink);
274 
276  DLLEXPORT void concat(const QoreString* str, ExceptionSink* xsink);
277 
279 
285  DLLEXPORT int concat(const QoreString& str, qore_offset_t pos, ExceptionSink* xsink);
286 
288 
295  DLLEXPORT int concat(const QoreString& str, qore_offset_t pos, qore_offset_t len, ExceptionSink* xsink);
296 
298 
303  DLLEXPORT void concat(const QoreString* str, size_t size, ExceptionSink* xsink);
304 
306  DLLEXPORT void concatBase64(const char* buf, size_t size);
307 
309  DLLEXPORT void concatBase64(const BinaryNode* bin);
310 
312  DLLEXPORT void concatBase64(const QoreString* str);
313 
315  DLLEXPORT void concatBase64(const char* buf, size_t size, size_t maxlinelen);
316 
318  DLLEXPORT void concatBase64(const BinaryNode* bin, size_t maxlinelen);
319 
321  DLLEXPORT void concatBase64(const QoreString* str, size_t maxlinelen);
322 
324 
328  DLLEXPORT BinaryNode* parseBase64(ExceptionSink* xsink) const;
329 
331 
335  DLLEXPORT QoreString* parseBase64ToString(ExceptionSink* xsink) const;
336 
338 
343  DLLEXPORT QoreString* parseBase64ToString(const QoreEncoding* enc, ExceptionSink* xsink) const;
344 
346 
348  DLLEXPORT void concatHex(const char* buf, size_t size);
349 
351  DLLEXPORT void concatHex(const BinaryNode* bin);
352 
354  DLLEXPORT void concatHex(const QoreString* str);
355 
357 
361  DLLEXPORT BinaryNode* parseHex(ExceptionSink* xsink) const;
362 
364  DLLEXPORT void concat(const DateTime* d);
365 
367  DLLEXPORT void concatISO8601DateTime(const DateTime* d);
368 
370  DLLEXPORT void concat(const char* str);
371 
373  DLLEXPORT void concat(const std::string& str);
374 
376  DLLEXPORT void concat(const char* str, size_t size);
377 
379  DLLEXPORT void concat(const char c);
380 
382 
387  DLLEXPORT int compareSoft(const QoreString* str, ExceptionSink* xsink) const;
388 
390 
394  DLLEXPORT int compare(const QoreString* str) const;
395 
397 
401  DLLEXPORT int compare(const char* str) const;
402 
404 
406  DLLEXPORT bool equal(const QoreString& str) const;
407 
409 
411  DLLEXPORT bool equal(const char* str) const;
412 
414 
420  DLLEXPORT bool equalSoft(const QoreString& str, ExceptionSink* xsink) const;
421 
423 
425  DLLEXPORT bool equalPartial(const QoreString& str) const;
426 
428 
430  DLLEXPORT bool equalPartial(const char* str) const;
431 
433 
439  DLLEXPORT bool equalPartialSoft(const QoreString& str, ExceptionSink* xsink) const;
440 
442 
448  DLLEXPORT bool equalPartialPath(const QoreString& str, ExceptionSink* xsink) const;
449 
451 
453  DLLEXPORT bool startsWith(const char* str) const;
454 
456 
458  DLLEXPORT bool startsWith(const std::string& str) const;
459 
461 
463  DLLEXPORT bool endsWith(const char* str) const;
464 
466 
468  DLLEXPORT bool endsWith(const std::string& str) const;
469 
471  DLLEXPORT void terminate(size_t size);
472 
474 
476  DLLEXPORT void reserve(size_t size);
477 
479 
481  DLLEXPORT int sprintf(const char* fmt, ...);
482 
484 
486  DLLEXPORT int vsprintf(const char* fmt, va_list args);
487 
489 
491  DLLEXPORT void take(char* str);
492 
494  DLLEXPORT void take(char* str, const QoreEncoding* enc);
496 
497  DLLEXPORT void take(char* str, size_t size);
498 
500  DLLEXPORT void take(char* str, size_t size, const QoreEncoding* enc);
501 
503  DLLEXPORT void takeAndTerminate(char* str, size_t size);
504 
506  DLLEXPORT void takeAndTerminate(char* str, size_t size, const QoreEncoding* enc);
507 
509 
514  DLLEXPORT QoreString* convertEncoding(const QoreEncoding* nccs, ExceptionSink* xsink) const;
515 
517 
520  DLLEXPORT char* giveBuffer();
521 
523  DLLEXPORT void clear();
524 
526 
528  DLLEXPORT void reset();
529 
531 
533  DLLEXPORT void replaceAll(const char* old_str, const char* new_str);
534 
536 
538  DLLEXPORT void replace(size_t offset, size_t len, const char* str);
539 
541 
543  DLLEXPORT void replace(size_t offset, size_t len, const QoreString* str, ExceptionSink* xsink);
544 
546 
548  DLLEXPORT void replaceChar(size_t offset, char c);
549 
551 
555  DLLEXPORT void splice(qore_offset_t offset, ExceptionSink* xsink);
556 
558 
563  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, ExceptionSink* xsink);
564 
566 
572  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, QoreValue strn, ExceptionSink* xsink);
573 
575 
581  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, const QoreString& str, ExceptionSink* xsink);
582 
584 
589  DLLEXPORT QoreString* extract(qore_offset_t offset, ExceptionSink* xsink);
590 
592 
599 
601 
609 
611 
616  DLLEXPORT QoreString* substr(qore_offset_t offset, ExceptionSink* xsink) const;
617 
619 
628 
630 
639  DLLEXPORT QoreString* regexSubst(QoreString& match, QoreString& subst, int opts, ExceptionSink* xsink) const;
640 
642 
652  DLLEXPORT int regexSubst(QoreString& output, QoreString& match, QoreString& subst, int opts,
653  ExceptionSink* xsink) const;
654 
656 
666  DLLEXPORT int regexSubstInPlace(QoreString& match, QoreString& subst, int opts, ExceptionSink* xsink) const;
667 
669  DLLEXPORT size_t chomp();
670 
672  DLLEXPORT const QoreEncoding* getEncoding() const;
673 
675  DLLEXPORT QoreString* copy() const;
676 
678 
680  DLLEXPORT void tolwr();
681 
683 
685  DLLEXPORT void toupr();
686 
688  DLLEXPORT size_t strlen() const;
689 
691  DLLEXPORT size_t size() const;
692 
694  DLLEXPORT size_t capacity() const;
695 
697  DLLEXPORT const char* getBuffer() const;
698 
700  DLLEXPORT const char* c_str() const;
701 
703 
705  DLLEXPORT void allocate(unsigned requested_size);
706 
708 
714  DLLEXPORT int insertch(char c, size_t pos, unsigned times);
715 
717 
722  DLLEXPORT int insert(const char* str, size_t pos);
723 
725  DLLEXPORT void addch(char c, unsigned times);
726 
728 
734  DLLEXPORT void concatUTF8FromUnicode(unsigned code);
735 
737 
741  DLLEXPORT int concatUnicode(unsigned code, ExceptionSink* xsink);
742 
744 
748  DLLEXPORT int concatUnicode(unsigned code);
749 
751 
754  DLLEXPORT QoreString* reverse() const;
755 
757 
759  DLLEXPORT void trim_trailing(const char* chars = 0);
760 
762 
764  DLLEXPORT void trim_leading(const char* chars = 0);
765 
767 
769  DLLEXPORT void trim(const char* chars = 0);
770 
772 
774  DLLEXPORT void trim_trailing(char c);
775 
777 
779  DLLEXPORT void trim_single_trailing(char c);
780 
782 
784  DLLEXPORT void trim_leading(char c);
785 
787 
789  DLLEXPORT void trim_single_leading(char c);
790 
792 
794  DLLEXPORT void trim(char c);
795 
797 
803  DLLEXPORT int trim(ExceptionSink* xsink, const QoreString* chars = nullptr);
804 
806 
812  DLLEXPORT int trimLeading(ExceptionSink* xsink, const QoreString* chars = nullptr);
813 
815 
821  DLLEXPORT int trimTrailing(ExceptionSink* xsink, const QoreString* chars = nullptr);
822 
824 
828  DLLEXPORT unsigned int getUnicodePointFromUTF8(qore_offset_t offset = 0) const;
829 
831 
836  DLLEXPORT unsigned int getUnicodePoint(qore_offset_t offset, ExceptionSink* xsink) const;
837 
839 
847  DLLEXPORT unsigned int getUnicodePointFromBytePos(size_t offset, unsigned& len, ExceptionSink* xsink) const;
848 
850  DLLEXPORT void prepend(const char* str);
851 
853  DLLEXPORT void prepend(const char* str, size_t size);
854 
856  DLLEXPORT QoreString& operator=(const QoreString& other);
857 
859  DLLEXPORT QoreString& operator=(const char* other);
860 
862  DLLEXPORT QoreString& operator=(const std::string& other);
863 
865  DLLEXPORT bool operator==(const QoreString& other) const;
866 
868  DLLEXPORT bool operator==(const std::string& other) const;
869 
871  DLLEXPORT bool operator==(const char* other) const;
872 
874  DLLLOCAL bool operator!=(const QoreString& other) const {
875  return !(*this == other);
876  }
877 
879  DLLLOCAL bool operator!=(const std::string& other) const {
880  return !(*this == other);
881  }
882 
884  DLLLOCAL bool operator!=(const char* other) const {
885  return !(*this == other);
886  }
887 
889 
893  DLLEXPORT int operator[](qore_offset_t pos) const;
894 
896  DLLEXPORT QoreString& operator+=(const char* str);
897 
899  DLLEXPORT QoreString& operator+=(const std::string& str);
900 
902  DLLEXPORT bool empty() const;
903 
905  DLLEXPORT qore_offset_t index(const QoreString& needle, qore_offset_t pos, ExceptionSink* xsink) const;
906 
908  DLLEXPORT qore_offset_t bindex(const QoreString& needle, qore_offset_t pos = 0) const;
909 
911  DLLEXPORT qore_offset_t bindex(const char* needle, qore_offset_t pos = 0) const;
912 
914  DLLEXPORT qore_offset_t bindex(const std::string& needle, qore_offset_t pos = 0) const;
915 
917 
923  DLLEXPORT qore_offset_t rindex(const QoreString& needle, qore_offset_t pos, ExceptionSink* xsink) const;
924 
926  DLLEXPORT qore_offset_t brindex(const QoreString& needle, qore_offset_t pos = -1) const;
927 
929  DLLEXPORT qore_offset_t brindex(const char* needle, qore_offset_t pos = -1) const;
930 
932  DLLEXPORT qore_offset_t brindex(const std::string& needle, qore_offset_t pos = -1) const;
933 
935  DLLEXPORT qore_offset_t find(char c, qore_offset_t pos = 0) const;
936 
938  DLLEXPORT qore_offset_t rfind(char c, qore_offset_t pos = -1) const;
939 
941 
943  DLLEXPORT qore_offset_t find(const char* str, qore_offset_t pos = 0) const;
944 
946 
948  DLLEXPORT qore_offset_t rfind(const char* str, qore_offset_t pos = -1) const;
949 
951 
953  DLLEXPORT qore_offset_t find(const std::string& str, qore_offset_t pos = 0) const;
954 
956 
958  DLLEXPORT qore_offset_t rfind(const std::string& str, qore_offset_t pos = -1) const;
959 
961  DLLEXPORT qore_offset_t findAny(const char *str, qore_offset_t pos = 0) const;
962 
964  DLLEXPORT qore_offset_t rfindAny(const char *str, qore_offset_t pos = -1) const;
965 
967 
969  DLLEXPORT bool isDataPrintableAscii() const;
970 
972 
974  DLLEXPORT bool isDataAscii() const;
975 
977  DLLEXPORT int64 toBigInt() const;
978 
980 
988  DLLEXPORT size_t getCharWidth(ExceptionSink* xsink) const;
989 
991 
996  DLLEXPORT qore_offset_t getByteOffset(size_t i, ExceptionSink* xsink) const;
997 
998  // concatenates a qorestring without converting encodings - internal only
999  DLLLOCAL void concat(const QoreString* str);
1000 
1001  // private constructor
1002  DLLLOCAL QoreString(struct qore_string_private* p);
1003 
1004 protected:
1006  hashdecl qore_string_private* priv = nullptr;
1007 
1008  // writes a new QoreString with the characters reversed of the "this" QoreString
1009  // assumes the encoding is the same and the length is 0
1010  DLLLOCAL void concat_reverse(QoreString* targ) const;
1011 
1012  DLLLOCAL int snprintf(size_t size, const char* fmt, ...);
1013  DLLLOCAL int vsnprintf(size_t size, const char* fmt, va_list args);
1014 };
1015 
1016 DLLEXPORT QoreString* checkEncoding(const QoreString* str, const QoreEncoding* enc, ExceptionSink* xsink);
1017 
1018 class QoreStringMaker : public QoreString {
1019 public:
1021 
1023  DLLEXPORT QoreStringMaker(const char* fmt, ...);
1024 
1026 
1028  DLLEXPORT QoreStringMaker(const QoreEncoding* enc, const char* fmt, ...);
1029 
1030 private:
1031  DLLLOCAL QoreStringMaker(const QoreStringMaker& str) = delete;
1032  DLLLOCAL QoreStringMaker& operator=(const QoreStringMaker&) = delete;
1033 };
1034 
1036 
1045 class TempString {
1046 public:
1048  DLLLOCAL TempString() : str(new QoreString) {
1049  }
1050 
1052  DLLLOCAL TempString(const QoreEncoding* enc) : str(new QoreString(enc)) {
1053  }
1054 
1056  DLLLOCAL TempString(QoreString* s) {
1057  str = s;
1058  }
1059 
1061  DLLLOCAL ~TempString() {
1062  delete str;
1063  }
1064 
1066  DLLLOCAL QoreString* operator->(){ return str; };
1067 
1069  DLLLOCAL QoreString* operator*() { return str; };
1070 
1072  DLLLOCAL operator bool() const { return str != nullptr; }
1073 
1075  DLLLOCAL QoreString* release() {
1076  QoreString* rv = str;
1077  str = nullptr;
1078  return rv;
1079  }
1080 
1081 private:
1082  QoreString* str;
1083 
1084  TempString(const TempString&) = delete;
1085  TempString& operator=(const TempString&) = delete;
1086  void* operator new(size_t) = delete;
1087 };
1088 
1090 
1105 public:
1107 
1112  DLLLOCAL TempEncodingHelper(const QoreString& s, const QoreEncoding* qe, ExceptionSink* xsink) {
1113  set_intern(&s, qe, xsink);
1114  }
1115 
1117 
1122  DLLLOCAL TempEncodingHelper(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1123  set_intern(s, qe, xsink);
1124  }
1125 
1127  DLLLOCAL TempEncodingHelper() {
1128  }
1129 
1131  DLLLOCAL ~TempEncodingHelper() {
1132  discard_intern();
1133  }
1134 
1136 
1145  DLLLOCAL int set(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1146  discard_intern();
1147 
1148  set_intern(s, qe, xsink);
1149  return str != nullptr;
1150  }
1151 
1153  DLLLOCAL bool is_temp() const {
1154  return temp;
1155  }
1156 
1158  DLLLOCAL void makeTemp() {
1159  if (!temp && str) {
1160  str = new QoreString(*str);
1161  temp = true;
1162  }
1163  }
1164 
1166  DLLLOCAL const QoreString* operator->(){ return str; };
1167 
1169  DLLLOCAL const QoreString* operator*() { return str; };
1170 
1172 
1175  DLLLOCAL operator bool() const { return str != 0; }
1176 
1178 
1181  DLLLOCAL char* giveBuffer() {
1182  if (!str)
1183  return nullptr;
1184  if (temp)
1185  return str->giveBuffer();
1186  return strdup(str->getBuffer());
1187  }
1188 
1190 
1192  DLLEXPORT void removeBom();
1193 
1194 private:
1195  QoreString* str = nullptr;
1196  bool temp = false;
1197 
1198  DLLLOCAL TempEncodingHelper(const TempEncodingHelper&) = delete;
1199  DLLLOCAL TempEncodingHelper& operator=(const TempEncodingHelper&) = delete;
1200  DLLLOCAL void* operator new(size_t) = delete;
1201 
1203  DLLLOCAL void discard_intern() {
1204  if (temp && str)
1205  delete str;
1206  }
1207 
1209 
1214  DLLLOCAL void set_intern(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1215  if (s->getEncoding() != qe) {
1216  str = s->convertEncoding(qe, xsink);
1217  temp = true;
1218  } else {
1219  str = const_cast<QoreString* >(s);
1220  temp = false;
1221  }
1222  }
1223 };
1224 
1226 
1228 DLLEXPORT size_t qore_get_unicode_character_width(int ucs);
1229 
1230 #endif
DLLEXPORT const QoreEncoding * QCS_DEFAULT
the default encoding for the Qore library
holds arbitrary binary data
Definition: BinaryNode.h:41
Holds absolute and relative date/time values in Qore with precision to the microsecond.
Definition: DateTime.h:93
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:48
defines string encoding functions in Qore
Definition: QoreEncoding.h:83
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:93
DLLEXPORT int concatEncodeUriRequest(ExceptionSink *xsink, const QoreString &url)
concatenates a URI-encoded version of the c-string passed
DLLEXPORT void set(const char *str, const QoreEncoding *new_qorecharset=QCS_DEFAULT)
copies the c-string passed and sets the value of the string and its encoding
DLLEXPORT size_t capacity() const
returns number of bytes allocated for the string's buffer, capacity is always >= size
DLLEXPORT void reset()
reset string to zero length; memory is deallocated; string encoding is reset to QCS_DEFAULT
DLLEXPORT void takeAndTerminate(char *str, size_t size)
takes ownership of the character pointer passed and assigns it to the string (frees memory previously...
DLLEXPORT size_t strlen() const
returns number of bytes in the string (not including the null pointer)
DLLEXPORT void concatISO8601DateTime(const DateTime *d)
concatenates a DateTime value to a string in the format YYYYMMDDTHH:mm:SS <- where the "T" is a liter...
DLLEXPORT void splice(qore_offset_t offset, ExceptionSink *xsink)
removes characters from the string starting at position "offset"
DLLEXPORT void trim_single_leading(char c)
remove a single leading character if present
DLLEXPORT void concatHex(const char *buf, size_t size)
concatenates hexidecimal digits corresponding to the binary data passed up to byte "len"
DLLEXPORT int insertch(char c, size_t pos, unsigned times)
insert a character at a certain position in the string a number of times
DLLEXPORT void trim_leading(const char *chars=0)
remove leading whitespace or other characters
DLLEXPORT void take(char *str)
takes ownership of the character pointer passed and assigns it to the string (frees memory previously...
DLLEXPORT int compare(const QoreString *str) const
compares two strings without converting encodings (if the encodings do not match then "this" is deeme...
DLLEXPORT int operator[](qore_offset_t pos) const
returns the byte (not character) at the given location; if the location is invalid,...
DLLEXPORT void clear()
reset string to zero length; memory is not deallocated; string encoding does not change
DLLEXPORT unsigned int getUnicodePoint(qore_offset_t offset, ExceptionSink *xsink) const
return Unicode code point for the single character at the given character (not byte) offset in the st...
DLLEXPORT bool equalPartial(const QoreString &str) const
returns true if the beginning of the current string matches the argument string, false if not,...
DLLEXPORT bool isDataAscii() const
returns true if the string is empty or has no characters with the high bit set (ie all characters < 1...
DLLEXPORT bool equalPartialSoft(const QoreString &str, ExceptionSink *xsink) const
returns true if the beginning of the current string matches the argument string, false if not,...
DLLEXPORT qore_offset_t index(const QoreString &needle, qore_offset_t pos, ExceptionSink *xsink) const
returns the character position of a substring within the string or -1 if not found
DLLEXPORT void concatUTF8FromUnicode(unsigned code)
append a UTF-8 character sequence from a unicode code point, assumes the string is tagged with QCS_UT...
DLLEXPORT void terminate(size_t size)
terminates the string at byte position "size", the string is reallocated if necessary
DLLEXPORT void allocate(unsigned requested_size)
Ensure the internal buffer has at least expected size in bytes.
DLLEXPORT void replaceChar(size_t offset, char c)
replaces a byte with the byte passed
DLLEXPORT int trimTrailing(ExceptionSink *xsink, const QoreString *chars=nullptr)
removes trailing whitespace or other characters
DLLEXPORT int64 toBigInt() const
returns the value of the string as an int64
DLLEXPORT size_t getCharWidth(ExceptionSink *xsink) const
returns the character width of the string
DLLEXPORT int regexSubstInPlace(QoreString &match, QoreString &subst, int opts, ExceptionSink *xsink) const
performs perl5-compatible regular expression substitution to the current string
DLLEXPORT void reserve(size_t size)
ensures that at least the given size is available in the string; the string's contents are not affect...
DLLEXPORT qore_offset_t brindex(const QoreString &needle, qore_offset_t pos=-1) const
returns the byte position of a substring within the string searching in reverse from a given position...
DLLEXPORT void concat(const QoreString *str, ExceptionSink *xsink)
concatenates a string and converts encodings if necessary
DLLEXPORT QoreString * substr(qore_offset_t offset, ExceptionSink *xsink) const
returns a new string consisting of all the characters from the current string starting with character...
DLLEXPORT size_t length() const
returns the number of characters (not bytes) in the string
DLLEXPORT qore_offset_t find(char c, qore_offset_t pos=0) const
returns the byte position of a character (byte) within the string or -1 if not found
DLLEXPORT bool endsWith(const char *str) const
returns true if the current string ends with the argument string (bytes)
DLLEXPORT void trim_trailing(const char *chars=0)
remove trailing whitespace or other characters
DLLEXPORT qore_offset_t findAny(const char *str, qore_offset_t pos=0) const
returns the byte position of any of the given characters (bytes) within the string or -1 if not found
DLLEXPORT void concatEscape(const QoreString *str, char c, char esc_char, ExceptionSink *xsink)
concatenates a string and escapes character c with esc_char (converts encodings if necessary)
DLLEXPORT bool equalPartialPath(const QoreString &str, ExceptionSink *xsink) const
returns true if the begining of the current string matches the argument string where either both stri...
DLLEXPORT void addch(char c, unsigned times)
append a character to the string a number of times
DLLEXPORT unsigned int getUnicodePointFromBytePos(size_t offset, unsigned &len, ExceptionSink *xsink) const
return Unicode code point for the given byte offset
DLLEXPORT QoreString & operator+=(const char *str)
concatenates the characters to the string; assumes the string to be concatenated is already in the ch...
DLLEXPORT int sprintf(const char *fmt,...)
this will concatentate a formatted string to the existing string according to the format string and t...
DLLEXPORT qore_offset_t rfindAny(const char *str, qore_offset_t pos=-1) const
returns the last byte position of any of the given characters (bytes) within the string or -1 if not ...
DLLEXPORT size_t size() const
returns number of bytes in the string (not including the null pointer)
DLLEXPORT qore_offset_t rindex(const QoreString &needle, qore_offset_t pos, ExceptionSink *xsink) const
returns the character position of a substring searching in reverse from a given position or -1 if not...
DLLEXPORT QoreString & operator=(const QoreString &other)
assigns the value of one string to another
DLLEXPORT int concatDecodeUriRequest(const QoreString &url, ExceptionSink *xsink)
concatenates a URI-decoded version of the c-string passed
DLLEXPORT bool startsWith(const char *str) const
returns true if the current string starts with the argument string (bytes)
DLLEXPORT int concatEncode(ExceptionSink *xsink, const QoreString &str, unsigned code=CE_XHTML)
concatenates a string and encodes it according to the encoding argument passed
DLLEXPORT QoreString()
creates an empty string and assigns the default encoding QCS_DEFAULT
DLLEXPORT qore_offset_t bindex(const QoreString &needle, qore_offset_t pos=0) const
returns the byte position of a substring within the string or -1 if not found
DLLEXPORT QoreString * copy() const
returns an exact copy of the string
DLLEXPORT void concatAndHTMLDecode(const QoreString *str)
concatenates HTML-decoded version of the c-string passed
DLLEXPORT char * giveBuffer()
returns the character buffer and leaves the QoreString empty, the caller owns the memory returned (mu...
DLLEXPORT void trim_single_trailing(char c)
remove a single trailing character if present
DLLEXPORT void replace(size_t offset, size_t len, const char *str)
replaces bytes with the string passed
DLLEXPORT qore_offset_t getByteOffset(size_t i, ExceptionSink *xsink) const
returns the byte position of the given character position in the string or -1 if the string does not ...
DLLEXPORT int compareSoft(const QoreString *str, ExceptionSink *xsink) const
compares the string with another string, performing character set encoding conversion if necessary
DLLEXPORT bool equal(const QoreString &str) const
returns true if the strings are equal, false if not, if the character encodings are different,...
DLLEXPORT QoreString * reverse() const
return a Qorestring with the characters reversed
DLLEXPORT void concatDecodeUrl(const char *url)
concatenates a URL-decoded version of the c-string passed
DLLEXPORT void concatBase64(const char *buf, size_t size)
concatenates the base64-encoded version of the binary data passed
DLLEXPORT size_t chomp()
removes a single \n\r or \n from the end of the string and returns the number of characters removed
DLLEXPORT void trim(const char *chars=0)
remove leading and trailing whitespace or other characters
DLLEXPORT void toupr()
converts the string to upper-case in place
DLLLOCAL bool operator!=(const QoreString &other) const
returns true if the other string is not equal to this string (encodings also must be equal)
Definition: QoreString.h:874
DLLEXPORT BinaryNode * parseHex(ExceptionSink *xsink) const
parses the current string data as hexadecimal-encoded data and returns it as a BinaryNode pointer (ca...
DLLEXPORT qore_offset_t rfind(char c, qore_offset_t pos=-1) const
returns the last byte position of a character (byte) within the string or -1 if not found
DLLEXPORT bool operator==(const QoreString &other) const
returns true if the other string is equal to this string (encodings also must be equal)
DLLEXPORT void setEncoding(const QoreEncoding *new_encoding)
changes the tagged encoding to the given encoding; does not affect the actual string buffer,...
DLLEXPORT bool empty() const
returns true if the string is empty, false if not
DLLEXPORT unsigned int getUnicodePointFromUTF8(qore_offset_t offset=0) const
return Unicode code point for character offset, string must be UTF-8
DLLEXPORT BinaryNode * parseBase64(ExceptionSink *xsink) const
parses the current string data as base64-encoded data and returns it as a BinaryNode pointer (caller ...
DLLEXPORT QoreString * extract(qore_offset_t offset, ExceptionSink *xsink)
removes characters from the string starting at position "offset" and returns a string of the characte...
DLLEXPORT int vsprintf(const char *fmt, va_list args)
this will concatentate a formatted string to the existing string according to the format string and t...
DLLEXPORT void prepend(const char *str)
prepends the string given to the string, assumes character encoding is the same as the string's
DLLEXPORT int insert(const char *str, size_t pos)
inserts a character string at a certain position in the string
DLLEXPORT int concatEncodeUrl(ExceptionSink *xsink, const QoreString &url, bool encode_all=false)
concatenates a URL-encoded version of the c-string passed
DLLEXPORT void concatAndHTMLEncode(const char *str)
concatenates HTML-encoded version of the c-string passed
DLLEXPORT bool isDataPrintableAscii() const
returns true if the string is empty or only contains printable non-control ASCII characters (ie all c...
DLLEXPORT int trimLeading(ExceptionSink *xsink, const QoreString *chars=nullptr)
removes leading whitespace or other characters
DLLEXPORT int concatDecode(ExceptionSink *xsink, const QoreString &str, unsigned code=CD_ALL)
concatenates a string and decodes HTML, XML, and numeric character references as per the supplied arg...
hashdecl qore_string_private * priv
the private implementation of QoreString
Definition: QoreString.h:1006
DLLEXPORT void replaceAll(const char *old_str, const char *new_str)
replaces all occurences of the first string with the second string
DLLEXPORT QoreString * parseBase64ToString(ExceptionSink *xsink) const
parses the current string data as base64-encoded data and returns it as a QoreString pointer owned by...
DLLEXPORT const char * c_str() const
returns the string's buffer; this data should not be changed
DLLEXPORT int concatUnicode(unsigned code, ExceptionSink *xsink)
append a character sequence from a unicode code point (returns 0 for OK, -1 for exception)
DLLEXPORT const QoreEncoding * getEncoding() const
returns the encoding for the string
DLLEXPORT bool equalSoft(const QoreString &str, ExceptionSink *xsink) const
returns true if the strings are equal, false if not, if the character encodings are different,...
DLLEXPORT void tolwr()
converts the string to lower-case in place
DLLEXPORT const char * getBuffer() const
returns the string's buffer; this data should not be changed
DLLEXPORT QoreString * convertEncoding(const QoreEncoding *nccs, ExceptionSink *xsink) const
converts the encoding of the string to the specified encoding, returns 0 if an error occurs,...
DLLEXPORT QoreString * regexSubst(QoreString &match, QoreString &subst, int opts, ExceptionSink *xsink) const
performs perl5-compatible regular expression substitution
DLLEXPORT ~QoreString()
frees any memory allocated by the string
use this class to manage strings where the character encoding must be specified and may be different ...
Definition: QoreString.h:1104
DLLLOCAL ~TempEncodingHelper()
deletes any temporary string being managed by the object
Definition: QoreString.h:1131
DLLLOCAL char * giveBuffer()
returns a char pointer of the string, the caller owns the pointer returned (it must be manually freed...
Definition: QoreString.h:1181
DLLEXPORT void removeBom()
remove any leading byte order marker (BOM) from UTF-16* strings
DLLLOCAL const QoreString * operator->()
returns the string being managed
Definition: QoreString.h:1166
DLLLOCAL TempEncodingHelper()
creates an empty TempEncodingHelperObject that may be initialized with TempEncodingHelper::set() late...
Definition: QoreString.h:1127
DLLLOCAL void makeTemp()
ensures that the object is holding a temporary value
Definition: QoreString.h:1158
DLLLOCAL int set(const QoreString *s, const QoreEncoding *qe, ExceptionSink *xsink)
discards any current state and sets and converts (if necessary) a new string to the desired encoding
Definition: QoreString.h:1145
DLLLOCAL const QoreString * operator*()
returns the string being managed
Definition: QoreString.h:1169
DLLLOCAL bool is_temp() const
returns true if a temporary string is being managed
Definition: QoreString.h:1153
class used to hold a possibly temporary QoreString pointer, stack only, cannot be dynamically allocat...
Definition: QoreString.h:1045
DLLLOCAL QoreString * operator*()
returns the QoreString pointer being managed
Definition: QoreString.h:1069
DLLLOCAL TempString()
populates the object with a new QoreString that this object will manage
Definition: QoreString.h:1048
DLLLOCAL QoreString * release()
releases the QoreString pointer being managed and sets the internal pointer to 0
Definition: QoreString.h:1075
DLLLOCAL QoreString * operator->()
returns the QoreString pointer being managed
Definition: QoreString.h:1066
DLLLOCAL ~TempString()
deletes the QoreString pointer being managed
Definition: QoreString.h:1061
intptr_t qore_offset_t
used for offsets that could be negative
Definition: common.h:76
long long int64
64bit integer type, cannot use int64_t here since it breaks the API on some 64-bit systems due to equ...
Definition: common.h:260
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:275