$darkmode
Qore Programming Language - C/C++ Library 1.19.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 - 2023 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 struct 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 
314  DLLEXPORT void concatBase64(const QoreString* str);
315 
317 
319  DLLEXPORT void concatBase64(const char* buf, size_t size, size_t maxlinelen);
320 
322 
324  DLLEXPORT void concatBase64(const BinaryNode* bin, size_t maxlinelen);
325 
327 
329  DLLEXPORT void concatBase64(const QoreString* str, size_t maxlinelen);
330 
332 
335  DLLEXPORT void concatBase64Url(const BinaryNode& bin);
336 
338 
342  DLLEXPORT void concatBase64Url(const QoreString& str);
343 
345 
349  DLLEXPORT BinaryNode* parseBase64(ExceptionSink* xsink) const;
350 
352 
356  DLLEXPORT QoreString* parseBase64ToString(ExceptionSink* xsink) const;
357 
359 
364  DLLEXPORT QoreString* parseBase64ToString(const QoreEncoding* enc, ExceptionSink* xsink) const;
365 
367 
376  DLLEXPORT BinaryNode* parseBase64Url(ExceptionSink* xsink) const;
377 
379 
388 
390 
398  DLLEXPORT QoreString* parseBase64UrlToString(const QoreEncoding* enc, ExceptionSink* xsink) const;
399 
401 
403  DLLEXPORT void concatHex(const char* buf, size_t size);
404 
406  DLLEXPORT void concatHex(const BinaryNode* bin);
407 
409  DLLEXPORT void concatHex(const QoreString* str);
410 
412 
416  DLLEXPORT BinaryNode* parseHex(ExceptionSink* xsink) const;
417 
419  DLLEXPORT void concat(const DateTime* d);
420 
422  DLLEXPORT void concatISO8601DateTime(const DateTime* d);
423 
425  DLLEXPORT void concat(const char* str);
426 
428  DLLEXPORT void concat(const std::string& str);
429 
431  DLLEXPORT void concat(const char* str, size_t size);
432 
434  DLLEXPORT void concat(const char c);
435 
437 
442  DLLEXPORT int compareSoft(const QoreString* str, ExceptionSink* xsink) const;
443 
445 
449  DLLEXPORT int compare(const QoreString* str) const;
450 
452 
456  DLLEXPORT int compare(const char* str) const;
457 
459 
461  DLLEXPORT bool equal(const QoreString& str) const;
462 
464 
466  DLLEXPORT bool equal(const char* str) const;
467 
469 
475  DLLEXPORT bool equalSoft(const QoreString& str, ExceptionSink* xsink) const;
476 
478 
480  DLLEXPORT bool equalPartial(const QoreString& str) const;
481 
483 
485  DLLEXPORT bool equalPartial(const char* str) const;
486 
488 
494  DLLEXPORT bool equalPartialSoft(const QoreString& str, ExceptionSink* xsink) const;
495 
497 
503  DLLEXPORT bool equalPartialPath(const QoreString& str, ExceptionSink* xsink) const;
504 
506 
508  DLLEXPORT bool startsWith(const char* str) const;
509 
511 
513  DLLEXPORT bool startsWith(const std::string& str) const;
514 
516 
518  DLLEXPORT bool endsWith(const char* str) const;
519 
521 
523  DLLEXPORT bool endsWith(const std::string& str) const;
524 
526  DLLEXPORT void terminate(size_t size);
527 
529 
531  DLLEXPORT void reserve(size_t size);
532 
534 
536  DLLEXPORT int sprintf(const char* fmt, ...);
537 
539 
541  DLLEXPORT int vsprintf(const char* fmt, va_list args);
542 
544 
546  DLLEXPORT void take(char* str);
547 
549  DLLEXPORT void take(char* str, const QoreEncoding* enc);
551 
552  DLLEXPORT void take(char* str, size_t size);
553 
555  DLLEXPORT void take(char* str, size_t size, const QoreEncoding* enc);
556 
558  DLLEXPORT void takeAndTerminate(char* str, size_t size);
559 
561  DLLEXPORT void takeAndTerminate(char* str, size_t size, const QoreEncoding* enc);
562 
564 
569  DLLEXPORT QoreString* convertEncoding(const QoreEncoding* nccs, ExceptionSink* xsink) const;
570 
572 
575  DLLEXPORT char* giveBuffer();
576 
578  DLLEXPORT void clear();
579 
581 
583  DLLEXPORT void reset();
584 
586 
588  DLLEXPORT void replaceAll(const char* old_str, const char* new_str);
589 
591 
593  DLLEXPORT void replace(size_t offset, size_t len, const char* str);
594 
596 
598  DLLEXPORT void replace(size_t offset, size_t len, const QoreString* str, ExceptionSink* xsink);
599 
601 
603  DLLEXPORT void replaceChar(size_t offset, char c);
604 
606 
610  DLLEXPORT void splice(qore_offset_t offset, ExceptionSink* xsink);
611 
613 
618  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, ExceptionSink* xsink);
619 
621 
627  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, QoreValue strn, ExceptionSink* xsink);
628 
630 
636  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, const QoreString& str, ExceptionSink* xsink);
637 
639 
644  DLLEXPORT QoreString* extract(qore_offset_t offset, ExceptionSink* xsink);
645 
647 
654 
656 
664 
666 
671  DLLEXPORT QoreString* substr(qore_offset_t offset, ExceptionSink* xsink) const;
672 
674 
683 
685 
694  DLLEXPORT QoreString* regexSubst(QoreString& match, QoreString& subst, int opts, ExceptionSink* xsink) const;
695 
697 
707  DLLEXPORT int regexSubst(QoreString& output, QoreString& match, QoreString& subst, int opts,
708  ExceptionSink* xsink) const;
709 
711 
721  DLLEXPORT int regexSubstInPlace(QoreString& match, QoreString& subst, int opts, ExceptionSink* xsink) const;
722 
724  DLLEXPORT size_t chomp();
725 
727  DLLEXPORT const QoreEncoding* getEncoding() const;
728 
730  DLLEXPORT QoreString* copy() const;
731 
733 
735  DLLEXPORT void tolwr();
736 
738 
740  DLLEXPORT void toupr();
741 
743  DLLEXPORT size_t strlen() const;
744 
746  DLLEXPORT size_t size() const;
747 
749  DLLEXPORT size_t capacity() const;
750 
752  DLLEXPORT const char* getBuffer() const;
753 
755  DLLEXPORT const char* c_str() const;
756 
758 
760  DLLEXPORT void allocate(unsigned requested_size);
761 
763 
769  DLLEXPORT int insertch(char c, size_t pos, unsigned times);
770 
772 
777  DLLEXPORT int insert(const char* str, size_t pos);
778 
780  DLLEXPORT void addch(char c, unsigned times);
781 
783 
789  DLLEXPORT void concatUTF8FromUnicode(unsigned code);
790 
792 
796  DLLEXPORT int concatUnicode(unsigned code, ExceptionSink* xsink);
797 
799 
803  DLLEXPORT int concatUnicode(unsigned code);
804 
806 
809  DLLEXPORT QoreString* reverse() const;
810 
812 
814  DLLEXPORT void trim_trailing(const char* chars = 0);
815 
817 
819  DLLEXPORT void trim_leading(const char* chars = 0);
820 
822 
824  DLLEXPORT void trim(const char* chars = 0);
825 
827 
829  DLLEXPORT void trim_trailing(char c);
830 
832 
834  DLLEXPORT void trim_single_trailing(char c);
835 
837 
839  DLLEXPORT void trim_leading(char c);
840 
842 
844  DLLEXPORT void trim_single_leading(char c);
845 
847 
849  DLLEXPORT void trim(char c);
850 
852 
858  DLLEXPORT int trim(ExceptionSink* xsink, const QoreString* chars = nullptr);
859 
861 
867  DLLEXPORT int trimLeading(ExceptionSink* xsink, const QoreString* chars = nullptr);
868 
870 
876  DLLEXPORT int trimTrailing(ExceptionSink* xsink, const QoreString* chars = nullptr);
877 
879 
883  DLLEXPORT unsigned int getUnicodePointFromUTF8(qore_offset_t offset = 0) const;
884 
886 
891  DLLEXPORT unsigned int getUnicodePoint(qore_offset_t offset, ExceptionSink* xsink) const;
892 
894 
902  DLLEXPORT unsigned int getUnicodePointFromBytePos(size_t offset, unsigned& len, ExceptionSink* xsink) const;
903 
905  DLLEXPORT void prepend(const char* str);
906 
908  DLLEXPORT void prepend(const char* str, size_t size);
909 
911  DLLEXPORT QoreString& operator=(const QoreString& other);
912 
914  DLLEXPORT QoreString& operator=(const char* other);
915 
917  DLLEXPORT QoreString& operator=(const std::string& other);
918 
920  DLLEXPORT bool operator==(const QoreString& other) const;
921 
923  DLLEXPORT bool operator==(const std::string& other) const;
924 
926  DLLEXPORT bool operator==(const char* other) const;
927 
929  DLLLOCAL bool operator!=(const QoreString& other) const {
930  return !(*this == other);
931  }
932 
934  DLLLOCAL bool operator!=(const std::string& other) const {
935  return !(*this == other);
936  }
937 
939  DLLLOCAL bool operator!=(const char* other) const {
940  return !(*this == other);
941  }
942 
944 
948  DLLEXPORT int operator[](qore_offset_t pos) const;
949 
951  DLLEXPORT QoreString& operator+=(const char* str);
952 
954  DLLEXPORT QoreString& operator+=(const std::string& str);
955 
957  DLLEXPORT bool empty() const;
958 
960  DLLEXPORT qore_offset_t index(const QoreString& needle, qore_offset_t pos, ExceptionSink* xsink) const;
961 
963  DLLEXPORT qore_offset_t bindex(const QoreString& needle, qore_offset_t pos = 0) const;
964 
966  DLLEXPORT qore_offset_t bindex(const char* needle, qore_offset_t pos = 0) const;
967 
969  DLLEXPORT qore_offset_t bindex(const std::string& needle, qore_offset_t pos = 0) const;
970 
972 
978  DLLEXPORT qore_offset_t rindex(const QoreString& needle, qore_offset_t pos, ExceptionSink* xsink) const;
979 
981  DLLEXPORT qore_offset_t brindex(const QoreString& needle, qore_offset_t pos = -1) const;
982 
984  DLLEXPORT qore_offset_t brindex(const char* needle, qore_offset_t pos = -1) const;
985 
987  DLLEXPORT qore_offset_t brindex(const std::string& needle, qore_offset_t pos = -1) const;
988 
990  DLLEXPORT qore_offset_t find(char c, qore_offset_t pos = 0) const;
991 
993  DLLEXPORT qore_offset_t rfind(char c, qore_offset_t pos = -1) const;
994 
996 
998  DLLEXPORT qore_offset_t find(const char* str, qore_offset_t pos = 0) const;
999 
1001 
1003  DLLEXPORT qore_offset_t rfind(const char* str, qore_offset_t pos = -1) const;
1004 
1006 
1008  DLLEXPORT qore_offset_t find(const std::string& str, qore_offset_t pos = 0) const;
1009 
1011 
1013  DLLEXPORT qore_offset_t rfind(const std::string& str, qore_offset_t pos = -1) const;
1014 
1016  DLLEXPORT qore_offset_t findAny(const char *str, qore_offset_t pos = 0) const;
1017 
1019  DLLEXPORT qore_offset_t rfindAny(const char *str, qore_offset_t pos = -1) const;
1020 
1022 
1024  DLLEXPORT bool isDataPrintableAscii() const;
1025 
1027 
1029  DLLEXPORT bool isDataAscii() const;
1030 
1032  DLLEXPORT int64 toBigInt() const;
1033 
1035 
1043  DLLEXPORT size_t getCharWidth(ExceptionSink* xsink) const;
1044 
1046 
1051  DLLEXPORT qore_offset_t getByteOffset(size_t i, ExceptionSink* xsink) const;
1052 
1053  // concatenates a qorestring without converting encodings - internal only
1054  DLLLOCAL void concat(const QoreString* str);
1055 
1056  // private constructor
1057  DLLLOCAL QoreString(struct qore_string_private* p);
1058 
1059 protected:
1061  struct qore_string_private* priv = nullptr;
1062 
1063  // writes a new QoreString with the characters reversed of the "this" QoreString
1064  // assumes the encoding is the same and the length is 0
1065  DLLLOCAL void concat_reverse(QoreString* targ) const;
1066 
1067  DLLLOCAL int snprintf(size_t size, const char* fmt, ...);
1068  DLLLOCAL int vsnprintf(size_t size, const char* fmt, va_list args);
1069 };
1070 
1071 DLLEXPORT QoreString* checkEncoding(const QoreString* str, const QoreEncoding* enc, ExceptionSink* xsink);
1072 
1073 class QoreStringMaker : public QoreString {
1074 public:
1076 
1078  DLLEXPORT QoreStringMaker(const char* fmt, ...);
1079 
1081 
1083  DLLEXPORT QoreStringMaker(const QoreEncoding* enc, const char* fmt, ...);
1084 
1085 private:
1086  DLLLOCAL QoreStringMaker(const QoreStringMaker& str) = delete;
1087  DLLLOCAL QoreStringMaker& operator=(const QoreStringMaker&) = delete;
1088 };
1089 
1091 
1100 class TempString {
1101 public:
1103  DLLLOCAL TempString() : str(new QoreString) {
1104  }
1105 
1107  DLLLOCAL TempString(const QoreEncoding* enc) : str(new QoreString(enc)) {
1108  }
1109 
1111  DLLLOCAL TempString(QoreString* s) {
1112  str = s;
1113  }
1114 
1116  DLLLOCAL ~TempString() {
1117  delete str;
1118  }
1119 
1121  DLLLOCAL QoreString* operator->(){ return str; };
1122 
1124  DLLLOCAL QoreString* operator*() { return str; };
1125 
1127  DLLLOCAL operator bool() const { return str != nullptr; }
1128 
1130  DLLLOCAL QoreString* release() {
1131  QoreString* rv = str;
1132  str = nullptr;
1133  return rv;
1134  }
1135 
1136 private:
1137  QoreString* str;
1138 
1139  TempString(const TempString&) = delete;
1140  TempString& operator=(const TempString&) = delete;
1141  void* operator new(size_t) = delete;
1142 };
1143 
1145 
1160 public:
1162 
1167  DLLLOCAL TempEncodingHelper(const QoreString& s, const QoreEncoding* qe, ExceptionSink* xsink) {
1168  set_intern(&s, qe, xsink);
1169  }
1170 
1172 
1177  DLLLOCAL TempEncodingHelper(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1178  set_intern(s, qe, xsink);
1179  }
1180 
1182  DLLLOCAL TempEncodingHelper() {
1183  }
1184 
1186  DLLLOCAL ~TempEncodingHelper() {
1187  discard_intern();
1188  }
1189 
1191 
1200  DLLLOCAL int set(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1201  discard_intern();
1202 
1203  set_intern(s, qe, xsink);
1204  return str != nullptr;
1205  }
1206 
1208  DLLLOCAL bool is_temp() const {
1209  return temp;
1210  }
1211 
1213  DLLLOCAL void makeTemp() {
1214  if (!temp && str) {
1215  str = new QoreString(*str);
1216  temp = true;
1217  }
1218  }
1219 
1221  DLLLOCAL const QoreString* operator->(){ return str; };
1222 
1224  DLLLOCAL const QoreString* operator*() { return str; };
1225 
1227 
1230  DLLLOCAL operator bool() const { return str != 0; }
1231 
1233 
1236  DLLLOCAL char* giveBuffer() {
1237  if (!str)
1238  return nullptr;
1239  if (temp)
1240  return str->giveBuffer();
1241  return strdup(str->getBuffer());
1242  }
1243 
1245 
1247  DLLEXPORT void removeBom();
1248 
1249 private:
1250  QoreString* str = nullptr;
1251  bool temp = false;
1252 
1253  DLLLOCAL TempEncodingHelper(const TempEncodingHelper&) = delete;
1254  DLLLOCAL TempEncodingHelper& operator=(const TempEncodingHelper&) = delete;
1255  DLLLOCAL void* operator new(size_t) = delete;
1256 
1258  DLLLOCAL void discard_intern() {
1259  if (temp && str)
1260  delete str;
1261  }
1262 
1264 
1269  DLLLOCAL void set_intern(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1270  if (s->getEncoding() != qe) {
1271  str = s->convertEncoding(qe, xsink);
1272  temp = true;
1273  } else {
1274  str = const_cast<QoreString* >(s);
1275  temp = false;
1276  }
1277  }
1278 };
1279 
1281 
1283 DLLEXPORT size_t qore_get_unicode_character_width(int ucs);
1284 
1285 #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:50
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 void concatBase64Url(const BinaryNode &bin)
concatenates the base64-url-encoded version of the binary data passed
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 QoreString * parseBase64UrlToString(ExceptionSink *xsink) const
Parses the current string data as base64-URL-encoded data and returns a QoreString pointer owned by t...
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:929
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...
struct qore_string_private * priv
the private implementation of QoreString
Definition: QoreString.h:1061
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 BinaryNode * parseBase64Url(ExceptionSink *xsink) const
Parses the current string data as base64-URL-encoded data and returns a BinaryNode pointer.
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:1159
DLLLOCAL ~TempEncodingHelper()
deletes any temporary string being managed by the object
Definition: QoreString.h:1186
DLLLOCAL char * giveBuffer()
returns a char pointer of the string, the caller owns the pointer returned (it must be manually freed...
Definition: QoreString.h:1236
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:1221
DLLLOCAL TempEncodingHelper()
creates an empty TempEncodingHelperObject that may be initialized with TempEncodingHelper::set() late...
Definition: QoreString.h:1182
DLLLOCAL void makeTemp()
ensures that the object is holding a temporary value
Definition: QoreString.h:1213
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:1200
DLLLOCAL const QoreString * operator*()
returns the string being managed
Definition: QoreString.h:1224
DLLLOCAL bool is_temp() const
returns true if a temporary string is being managed
Definition: QoreString.h:1208
class used to hold a possibly temporary QoreString pointer, stack only, cannot be dynamically allocat...
Definition: QoreString.h:1100
DLLLOCAL QoreString * operator*()
returns the QoreString pointer being managed
Definition: QoreString.h:1124
DLLLOCAL TempString()
populates the object with a new QoreString that this object will manage
Definition: QoreString.h:1103
DLLLOCAL QoreString * release()
releases the QoreString pointer being managed and sets the internal pointer to 0
Definition: QoreString.h:1130
DLLLOCAL QoreString * operator->()
returns the QoreString pointer being managed
Definition: QoreString.h:1121
DLLLOCAL ~TempString()
deletes the QoreString pointer being managed
Definition: QoreString.h:1116
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
#define CD_ALL
code for decoding everything
Definition: QoreString.h:73
#define CE_XHTML
code for encoding XHTML entities
Definition: QoreString.h:55
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:276