Qore Programming Language  0.9.1
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 - 2018 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 
48 #define CE_HTML (1 << 0)
50 #define CE_XML (1 << 1)
52 #define CE_NONASCII (1 << 2)
54 #define CE_XHTML (CE_HTML | CE_XML)
56 #define CE_ALL (CE_XHTML | CE_NONASCII)
58 
59 
61 
64 #define CD_HTML (1 << 0)
66 #define CD_XML (1 << 1)
68 #define CD_NUM_REF (1 << 2)
70 #define CD_XHTML (CD_HTML | CD_XML)
72 #define CD_ALL (CD_XHTML | CD_NUM_REF)
74 
75 
77 
81 class QoreString {
82  friend hashdecl qore_string_private;
83 protected:
85  hashdecl qore_string_private* priv;
86 
87  DLLLOCAL void splice_simple(qore_size_t offset, qore_size_t length, QoreString* extract = 0);
88  DLLLOCAL void splice_simple(qore_size_t offset, qore_size_t length, const char* str, qore_size_t str_len, QoreString* extract = 0);
89  DLLLOCAL void splice_complex(qore_offset_t offset, ExceptionSink* xsink, QoreString* extract = 0);
90  DLLLOCAL void splice_complex(qore_offset_t offset, qore_offset_t length, ExceptionSink* xsink, QoreString* extract = 0);
91  DLLLOCAL void splice_complex(qore_offset_t offset, qore_offset_t length, const QoreString* str, ExceptionSink* xsink, QoreString* extract = 0);
92  DLLLOCAL int substr_simple(QoreString* str, qore_offset_t offset) const;
93  DLLLOCAL int substr_simple(QoreString* str, qore_offset_t offset, qore_offset_t length) const;
94  DLLLOCAL int substr_complex(QoreString* str, qore_offset_t offset, ExceptionSink* xsink) const;
95  DLLLOCAL int substr_complex(QoreString* str, qore_offset_t offset, qore_offset_t length, ExceptionSink* xsink) const;
96 
97  // writes a new QoreString with the characters reversed of the "this" QoreString
98  // assumes the encoding is the same and the length is 0
99  DLLLOCAL void concat_reverse(QoreString* targ) const;
100 
101  DLLLOCAL int snprintf(size_t size, const char* fmt, ...);
102  DLLLOCAL int vsnprintf(size_t size, const char* fmt, va_list args);
103 
104 public:
106  DLLEXPORT QoreString();
107 
109  DLLEXPORT QoreString(bool b);
110 
112  DLLEXPORT QoreString(const char* str);
113 
115  DLLEXPORT QoreString(const char* str, const QoreEncoding* new_qorecharset);
116 
118  DLLEXPORT QoreString(const QoreEncoding* new_qorecharset);
119 
121  DLLEXPORT QoreString(const char* str, qore_size_t len, const QoreEncoding* new_qorecharset = QCS_DEFAULT);
122 
124  DLLEXPORT QoreString(const std::string& str, const QoreEncoding* new_encoding = QCS_DEFAULT);
125 
127  DLLEXPORT QoreString(char c);
128 
130  DLLEXPORT QoreString(const QoreString& str);
131 
133  DLLEXPORT QoreString(const QoreString* str);
134 
136  DLLEXPORT QoreString(const QoreString* str, qore_size_t len);
137 
139  DLLEXPORT QoreString(int64 i);
140 
142  DLLEXPORT QoreString(double f);
143 
145  DLLEXPORT QoreString(const DateTime* date);
146 
148  DLLEXPORT QoreString(const BinaryNode* bin);
149 
151  DLLEXPORT QoreString(const BinaryNode* bin, qore_size_t maxlinelen);
152 
154  DLLEXPORT QoreString(char* nbuf, qore_size_t nlen, qore_size_t nallocated, const QoreEncoding* enc);
155 
157  DLLEXPORT ~QoreString();
158 
160 
162  DLLEXPORT qore_size_t length() const;
163 
165  DLLEXPORT void set(const char* str, const QoreEncoding* new_qorecharset = QCS_DEFAULT);
166 
168  DLLEXPORT void set(const std::string& str, const QoreEncoding* new_qorecharset = QCS_DEFAULT);
169 
171  DLLEXPORT void set(const QoreString* str);
172 
174  DLLEXPORT void set(const QoreString& str);
175 
177  DLLEXPORT void set(char* nbuf, size_t nlen, size_t nallocated, const QoreEncoding* enc);
178 
180  DLLEXPORT void setEncoding(const QoreEncoding* new_encoding);
181 
183 
193  DLLEXPORT int concatEncode(ExceptionSink* xsink, const QoreString& str, unsigned code = CE_XHTML);
194 
196 
208  DLLEXPORT int concatDecode(ExceptionSink* xsink, const QoreString& str, unsigned code = CD_ALL);
209 
211 
214  DLLEXPORT void concatAndHTMLEncode(const char* str);
215 
217 
220  DLLEXPORT void concatAndHTMLDecode(const QoreString* str);
221 
223 
226  DLLEXPORT void concatAndHTMLDecode(const char* str, size_t slen);
227 
229 
232  DLLEXPORT void concatAndHTMLDecode(const char* str);
233 
235 
237  DLLEXPORT void concatDecodeUrl(const char* url);
238 
240  DLLEXPORT int concatDecodeUrl(const QoreString& url, ExceptionSink* xsink);
241 
243 
247  DLLEXPORT int concatEncodeUrl(ExceptionSink* xsink, const QoreString& url, bool encode_all = false);
248 
250 
253  DLLEXPORT int concatDecodeUriRequest(const QoreString& url, ExceptionSink* xsink);
254 
256 
261  DLLEXPORT int concatEncodeUriRequest(ExceptionSink* xsink, const QoreString& url);
262 
264  DLLEXPORT void concatEscape(const QoreString* str, char c, char esc_char, ExceptionSink* xsink);
265 
267  DLLEXPORT void concatEscape(const char* str, char c, char esc_char = '\\');
268 
270 
276  DLLEXPORT void concatAndHTMLEncode(const QoreString* str, ExceptionSink* xsink);
277 
279  DLLEXPORT void concat(const QoreString* str, ExceptionSink* xsink);
280 
282 
288  DLLEXPORT int concat(const QoreString& str, qore_offset_t pos, ExceptionSink* xsink);
289 
291 
298  DLLEXPORT int concat(const QoreString& str, qore_offset_t pos, qore_offset_t len, ExceptionSink* xsink);
299 
301 
306  DLLEXPORT void concat(const QoreString* str, qore_size_t size, ExceptionSink* xsink);
307 
309  DLLEXPORT void concatBase64(const char* buf, qore_size_t size);
310 
312  DLLEXPORT void concatBase64(const BinaryNode* bin);
313 
315  DLLEXPORT void concatBase64(const QoreString* str);
316 
318  DLLEXPORT void concatBase64(const char* buf, qore_size_t size, qore_size_t maxlinelen);
319 
321  DLLEXPORT void concatBase64(const BinaryNode* bin, qore_size_t maxlinelen);
322 
324  DLLEXPORT void concatBase64(const QoreString* str, qore_size_t maxlinelen);
325 
327 
331  DLLEXPORT BinaryNode* parseBase64(ExceptionSink* xsink) const;
332 
334 
338  DLLEXPORT QoreString* parseBase64ToString(ExceptionSink* xsink) const;
339 
341 
346  DLLEXPORT QoreString* parseBase64ToString(const QoreEncoding* enc, ExceptionSink* xsink) const;
347 
349  DLLEXPORT void concatHex(const char* buf, qore_size_t size);
350 
352  DLLEXPORT void concatHex(const BinaryNode* bin);
353 
355  DLLEXPORT void concatHex(const QoreString* str);
356 
358 
362  DLLEXPORT BinaryNode* parseHex(ExceptionSink* xsink) const;
363 
365  DLLEXPORT void concat(const DateTime* d);
366 
368  DLLEXPORT void concatISO8601DateTime(const DateTime* d);
369 
371  DLLEXPORT void concat(const char* str);
372 
374  DLLEXPORT void concat(const std::string& str);
375 
377  DLLEXPORT void concat(const char* str, qore_size_t size);
378 
380  DLLEXPORT void concat(const char c);
381 
383 
388  DLLEXPORT int compareSoft(const QoreString* str, ExceptionSink* xsink) const;
389 
391 
395  DLLEXPORT int compare(const QoreString* str) const;
396 
398 
402  DLLEXPORT int compare(const char* str) const;
403 
405 
407  DLLEXPORT bool equal(const QoreString& str) const;
408 
410 
412  DLLEXPORT bool equal(const char* str) const;
413 
415 
421  DLLEXPORT bool equalSoft(const QoreString& str, ExceptionSink* xsink) const;
422 
424 
426  DLLEXPORT bool equalPartial(const QoreString& str) const;
427 
429 
431  DLLEXPORT bool equalPartial(const char* str) const;
432 
434 
440  DLLEXPORT bool equalPartialSoft(const QoreString& str, ExceptionSink* xsink) const;
441 
443 
449  DLLEXPORT bool equalPartialPath(const QoreString& str, ExceptionSink* xsink) const;
450 
452  DLLEXPORT void terminate(qore_size_t size);
453 
455 
457  DLLEXPORT void reserve(qore_size_t size);
458 
460 
462  DLLEXPORT int sprintf(const char* fmt, ...);
463 
465 
467  DLLEXPORT int vsprintf(const char* fmt, va_list args);
468 
470 
472  DLLEXPORT void take(char* str);
473 
475  DLLEXPORT void take(char* str, const QoreEncoding* enc);
477 
478  DLLEXPORT void take(char* str, qore_size_t size);
479 
481  DLLEXPORT void take(char* str, qore_size_t size, const QoreEncoding* enc);
482 
484  DLLEXPORT void takeAndTerminate(char* str, qore_size_t size);
485 
487  DLLEXPORT void takeAndTerminate(char* str, qore_size_t size, const QoreEncoding* enc);
488 
490 
495  DLLEXPORT QoreString* convertEncoding(const QoreEncoding* nccs, ExceptionSink* xsink) const;
496 
498 
501  DLLEXPORT char* giveBuffer();
502 
504  DLLEXPORT void clear();
505 
507 
509  DLLEXPORT void reset();
510 
512 
514  DLLEXPORT void replaceAll(const char* old_str, const char* new_str);
515 
517 
519  DLLEXPORT void replace(qore_size_t offset, qore_size_t len, const char* str);
520 
522 
527  DLLEXPORT void replace(qore_size_t offset, qore_size_t len, const QoreString* str);
528 
530 
532  DLLEXPORT void replace(qore_size_t offset, qore_size_t len, const QoreString* str, ExceptionSink* xsink);
533 
535 
537  DLLEXPORT void replaceChar(qore_size_t offset, char c);
538 
540 
544  DLLEXPORT void splice(qore_offset_t offset, ExceptionSink* xsink);
545 
547 
552  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, ExceptionSink* xsink);
553 
555 
561  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, QoreValue strn, ExceptionSink* xsink);
562 
564 
570  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, const QoreString& str, ExceptionSink* xsink);
571 
573 
578  DLLEXPORT QoreString* extract(qore_offset_t offset, ExceptionSink* xsink);
579 
581 
588 
590 
597  DLLEXPORT QoreString* extract(qore_offset_t offset, qore_offset_t length, QoreValue strn, ExceptionSink* xsink);
598 
600 
605  DLLEXPORT QoreString* substr(qore_offset_t offset, ExceptionSink* xsink) const;
606 
608 
614  DLLEXPORT QoreString* substr(qore_offset_t offset, qore_offset_t length, ExceptionSink* xsink) const;
615 
617  DLLEXPORT qore_size_t chomp();
618 
620  DLLEXPORT const QoreEncoding* getEncoding() const;
621 
623  DLLEXPORT QoreString* copy() const;
624 
626 
628  DLLEXPORT void tolwr();
629 
631 
633  DLLEXPORT void toupr();
634 
636  DLLEXPORT qore_size_t strlen() const;
637 
639  DLLEXPORT qore_size_t size() const;
640 
642  DLLEXPORT qore_size_t capacity() const;
643 
645  DLLEXPORT const char* getBuffer() const;
646 
648  DLLEXPORT const char* c_str() const;
649 
651 
653  DLLEXPORT void allocate(unsigned requested_size);
654 
656 
662  DLLEXPORT int insertch(char c, qore_size_t pos, unsigned times);
663 
665 
670  DLLEXPORT int insert(const char* str, qore_size_t pos);
671 
673  DLLEXPORT void addch(char c, unsigned times);
674 
676 
682  DLLEXPORT void concatUTF8FromUnicode(unsigned code);
683 
685 
689  DLLEXPORT int concatUnicode(unsigned code, ExceptionSink* xsink);
690 
692 
696  DLLEXPORT int concatUnicode(unsigned code);
697 
699 
702  DLLEXPORT QoreString* reverse() const;
703 
705 
707  DLLEXPORT void trim_trailing(const char* chars = 0);
708 
710 
712  DLLEXPORT void trim_leading(const char* chars = 0);
713 
715 
717  DLLEXPORT void trim(const char* chars = 0);
718 
720 
722  DLLEXPORT void trim_trailing(char c);
723 
725 
727  DLLEXPORT void trim_single_trailing(char c);
728 
730 
732  DLLEXPORT void trim_leading(char c);
733 
735 
737  DLLEXPORT void trim_single_leading(char c);
738 
740 
742  DLLEXPORT void trim(char c);
743 
745 
751  DLLEXPORT int trim(ExceptionSink* xsink, const QoreString* chars = nullptr);
752 
754 
760  DLLEXPORT int trimLeading(ExceptionSink* xsink, const QoreString* chars = nullptr);
761 
763 
769  DLLEXPORT int trimTrailing(ExceptionSink* xsink, const QoreString* chars = nullptr);
770 
772 
776  DLLEXPORT unsigned int getUnicodePointFromUTF8(qore_offset_t offset = 0) const;
777 
779 
784  DLLEXPORT unsigned int getUnicodePoint(qore_offset_t offset, ExceptionSink* xsink) const;
785 
787 
795  DLLEXPORT unsigned int getUnicodePointFromBytePos(qore_size_t offset, unsigned& len, ExceptionSink* xsink) const;
796 
798  DLLEXPORT void prepend(const char* str);
799 
801  DLLEXPORT void prepend(const char* str, qore_size_t size);
802 
804  DLLEXPORT QoreString& operator=(const QoreString& other);
805 
807  DLLEXPORT QoreString& operator=(const char* other);
808 
810  DLLEXPORT QoreString& operator=(const std::string& other);
811 
813  DLLEXPORT bool operator==(const QoreString& other) const;
814 
816  DLLEXPORT bool operator==(const std::string& other) const;
817 
819  DLLEXPORT bool operator==(const char* other) const;
820 
822  DLLLOCAL bool operator!=(const QoreString& other) const {
823  return !(*this == other);
824  }
825 
827  DLLLOCAL bool operator!=(const std::string& other) const {
828  return !(*this == other);
829  }
830 
832  DLLLOCAL bool operator!=(const char* other) const {
833  return !(*this == other);
834  }
835 
837 
842  DLLEXPORT char operator[](qore_offset_t pos) const;
843 
845  DLLEXPORT QoreString& operator+=(const char* str);
846 
848  DLLEXPORT QoreString& operator+=(const std::string& str);
849 
851  DLLEXPORT bool empty() const;
852 
854  DLLEXPORT qore_offset_t index(const QoreString& needle, qore_offset_t pos, ExceptionSink* xsink) const;
855 
857  DLLEXPORT qore_offset_t bindex(const QoreString& needle, qore_offset_t pos) const;
858 
860  DLLEXPORT qore_offset_t bindex(const char* needle, qore_offset_t pos) const;
861 
863  DLLEXPORT qore_offset_t bindex(const std::string& needle, qore_offset_t pos) const;
864 
866 
872  DLLEXPORT qore_offset_t rindex(const QoreString& needle, qore_offset_t pos, ExceptionSink* xsink) const;
873 
875  DLLEXPORT qore_offset_t brindex(const QoreString& needle, qore_offset_t pos) const;
876 
878  DLLEXPORT qore_offset_t brindex(const char* needle, qore_offset_t pos) const;
879 
881  DLLEXPORT qore_offset_t brindex(const std::string& needle, qore_offset_t pos) const;
882 
884  DLLEXPORT qore_offset_t find(char c, qore_offset_t pos = 0) const;
885 
887  DLLEXPORT qore_offset_t rfind(char c, qore_offset_t pos = -1) const;
888 
890  DLLEXPORT qore_offset_t findAny(const char *str, qore_offset_t pos = 0) const;
891 
893  DLLEXPORT qore_offset_t rfindAny(const char *str, qore_offset_t pos = -1) const;
894 
896 
898  DLLEXPORT bool isDataPrintableAscii() const;
899 
901 
903  DLLEXPORT bool isDataAscii() const;
904 
906  DLLEXPORT int64 toBigInt() const;
907 
909 
914  DLLEXPORT qore_offset_t getByteOffset(qore_size_t i, ExceptionSink* xsink) const;
915 
916  // concatenates a qorestring without converting encodings - internal only
917  DLLLOCAL void concat(const QoreString* str);
918 
919  // private constructor
920  DLLLOCAL QoreString(struct qore_string_private* p);
921 };
922 
923 DLLEXPORT QoreString* checkEncoding(const QoreString* str, const QoreEncoding* enc, ExceptionSink* xsink);
924 
925 class QoreStringMaker : public QoreString {
926 private:
928  DLLLOCAL QoreStringMaker(const QoreStringMaker& str);
929 
931  DLLLOCAL QoreStringMaker& operator=(const QoreStringMaker&);
932 
933 public:
935 
937  DLLEXPORT QoreStringMaker(const char* fmt, ...);
938 
940 
942  DLLEXPORT QoreStringMaker(const QoreEncoding* enc, const char* fmt, ...);
943 };
944 
946 
955 class TempString {
956 private:
957  QoreString* str;
958 
960  TempString(const TempString& );
961 
963  TempString& operator=(const TempString& );
964 
966  void* operator new(size_t);
967 
968 public:
970  DLLLOCAL TempString() : str(new QoreString) {
971  }
972 
974  DLLLOCAL TempString(const QoreEncoding* enc) : str(new QoreString(enc)) {
975  }
976 
978  DLLLOCAL TempString(QoreString* s) {
979  str = s;
980  }
981 
983  DLLLOCAL ~TempString() {
984  delete str;
985  }
986 
988  DLLLOCAL QoreString* operator->(){ return str; };
989 
991  DLLLOCAL QoreString* operator*() { return str; };
992 
994  DLLLOCAL operator bool() const { return str != 0; }
995 
997  DLLLOCAL QoreString* release() { QoreString* rv = str; str = 0; return rv; }
998 };
999 
1001 
1014 private:
1015  QoreString* str;
1016  bool temp;
1017 
1019  DLLLOCAL TempEncodingHelper(const TempEncodingHelper& );
1020 
1022  DLLLOCAL TempEncodingHelper& operator=(const TempEncodingHelper& );
1023 
1025  DLLLOCAL void* operator new(size_t);
1026 
1028  DLLLOCAL void discard_intern() {
1029  if (temp && str)
1030  delete str;
1031  }
1032 
1034 
1039  DLLLOCAL void set_intern(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1040  if (s->getEncoding() != qe) {
1041  str = s->convertEncoding(qe, xsink);
1042  temp = true;
1043  }
1044  else {
1045  str = const_cast<QoreString* >(s);
1046  temp = false;
1047  }
1048  }
1049 
1050 public:
1052 
1057  DLLLOCAL TempEncodingHelper(const QoreString& s, const QoreEncoding* qe, ExceptionSink* xsink) {
1058  set_intern(&s, qe, xsink);
1059  }
1060 
1062 
1067  DLLLOCAL TempEncodingHelper(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1068  set_intern(s, qe, xsink);
1069  }
1070 
1072  DLLLOCAL TempEncodingHelper() : str(0), temp(false) {
1073  }
1074 
1076  DLLLOCAL ~TempEncodingHelper() {
1077  discard_intern();
1078  }
1079 
1081 
1090  DLLLOCAL int set(const QoreString* s, const QoreEncoding* qe, ExceptionSink* xsink) {
1091  discard_intern();
1092 
1093  set_intern(s, qe, xsink);
1094  return str != 0;
1095  }
1096 
1098  DLLLOCAL bool is_temp() const {
1099  return temp;
1100  }
1101 
1103  DLLLOCAL void makeTemp() {
1104  if (!temp && str) {
1105  str = new QoreString(*str);
1106  temp = true;
1107  }
1108  }
1109 
1111  DLLLOCAL const QoreString* operator->(){ return str; };
1112 
1114  DLLLOCAL const QoreString* operator*() { return str; };
1115 
1117 
1120  DLLLOCAL operator bool() const { return str != 0; }
1121 
1123 
1126  DLLLOCAL char* giveBuffer() {
1127  if (!str)
1128  return 0;
1129  if (temp)
1130  return str->giveBuffer();
1131  return strdup(str->getBuffer());
1132  }
1133 
1135 
1137  DLLEXPORT void removeBom();
1138 };
1139 
1140 #endif
DLLEXPORT const char * c_str() const
returns the string&#39;s buffer; this data should not be changed
DLLEXPORT void trim_trailing(const char *chars=0)
remove trailing whitespace or other characters
DLLEXPORT char operator[](qore_offset_t pos) const
returns the byte (not character) at the given location; if the location is invalid, returns 0
DLLEXPORT qore_offset_t bindex(const QoreString &needle, qore_offset_t pos) const
returns the byte position of a substring within the string or -1 if not found
DLLEXPORT QoreString()
creates an empty string and assigns the default encoding QCS_DEFAULT
DLLEXPORT BinaryNode * parseBase64(ExceptionSink *xsink) const
parses the current string data as base64-encoded data and returns it as a BinaryNode pointer (caller ...
DLLEXPORT void setEncoding(const QoreEncoding *new_encoding)
changes the tagged encoding to the given encoding; does not affect the actual string buffer...
hashdecl qore_string_private * priv
the private implementation of QoreString
Definition: QoreString.h:85
defines string encoding functions in Qore
Definition: QoreEncoding.h:83
DLLEXPORT BinaryNode * parseHex(ExceptionSink *xsink) const
parses the current string data as hexadecimal-encoded data and returns it as a BinaryNode pointer (ca...
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 bool empty() const
returns true if the string is empty, false if not
DLLEXPORT void concatDecodeUrl(const char *url)
concatenates a URL-decoded version of the c-string passed
DLLEXPORT void replaceAll(const char *old_str, const char *new_str)
replaces all occurences of the first string with the second string
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 const QoreEncoding * QCS_DEFAULT
the default encoding for the Qore library
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 equalSoft(const QoreString &str, ExceptionSink *xsink) const
returns true if the strings are equal, false if not, if the character encodings are different...
DLLEXPORT unsigned int getUnicodePointFromBytePos(qore_size_t offset, unsigned &len, ExceptionSink *xsink) const
return Unicode code point for the given byte offset
DLLEXPORT void trim_single_trailing(char c)
remove a single trailing character if present
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 void reserve(qore_size_t size)
ensures that at least the given size is available in the string; the string&#39;s contents are not affect...
DLLEXPORT void concatHex(const char *buf, qore_size_t size)
concatenates hexidecimal digits corresponding to the binary data passed up to byte "len" ...
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 QoreString * convertEncoding(const QoreEncoding *nccs, ExceptionSink *xsink) const
converts the encoding of the string to the specified encoding, returns 0 if an error occurs...
Holds absolute and relative date/time values in Qore with precision to the microsecond.
Definition: DateTime.h:93
DLLEXPORT char * giveBuffer()
returns the character buffer and leaves the QoreString empty, the caller owns the memory returned (mu...
DLLEXPORT qore_offset_t getByteOffset(qore_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 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 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 concatISO8601DateTime(const DateTime *d)
concatenates a DateTime value to a string in the format YYYYMMDDTHH:mm:SS <- where the "T" is a liter...
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:73
DLLEXPORT void tolwr()
converts the string to lower-case in place
DLLEXPORT void prepend(const char *str)
prepends the string given to the string, assumes character encoding is the same as the string&#39;s ...
DLLEXPORT void splice(qore_offset_t offset, ExceptionSink *xsink)
removes characters from the string starting at position "offset"
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 int concatDecodeUriRequest(const QoreString &url, ExceptionSink *xsink)
concatenates a URI-decoded version of the c-string passed
DLLEXPORT bool isDataAscii() const
returns true if the string is empty or has no characters with the high bit set (ie all characters < 1...
Qore&#39;s string type supported by the QoreEncoding class.
Definition: QoreString.h:81
DLLEXPORT void replace(qore_size_t offset, qore_size_t len, const char *str)
replaces bytes with the string passed
DLLEXPORT QoreString * copy() const
returns an exact copy of the string
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...
#define CE_XHTML
code for encoding XHTML entities
Definition: QoreString.h:55
DLLEXPORT const char * getBuffer() const
returns the string&#39;s buffer; this data should not be changed
class used to hold a possibly temporary QoreString pointer, stack only, cannot be dynamically allocat...
Definition: QoreString.h:955
DLLEXPORT int insertch(char c, qore_size_t pos, unsigned times)
insert a character at a certain position in the string a number of times
DLLEXPORT void concat(const QoreString *str, ExceptionSink *xsink)
concatenates a string and converts encodings if necessary
DLLLOCAL bool is_temp() const
returns true if a temporary string is being managed
Definition: QoreString.h:1098
DLLEXPORT void toupr()
converts the string to upper-case in place
DLLEXPORT unsigned int getUnicodePointFromUTF8(qore_offset_t offset=0) const
return Unicode code point for character offset, string must be UTF-8
DLLEXPORT bool operator==(const QoreString &other) const
returns true if the other string is equal to this string (encodings also must be equal) ...
DLLLOCAL QoreString * release()
releases the QoreString pointer being managed and sets the internal pointer to 0
Definition: QoreString.h:997
DLLEXPORT void concatBase64(const char *buf, qore_size_t size)
concatenates the base64-encoded version of the binary data passed
DLLEXPORT qore_size_t strlen() const
returns number of bytes in the string (not including the null pointer)
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 bool equalPartialSoft(const QoreString &str, ExceptionSink *xsink) const
returns true if the beginning of the current string matches the argument string, false if not...
#define CD_ALL
code for decoding everything
Definition: QoreString.h:73
use this class to manage strings where the character encoding must be specified and may be different ...
Definition: QoreString.h:1013
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...
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:822
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...
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:262
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...
DLLEXPORT int insert(const char *str, qore_size_t pos)
inserts a character string at a certain position in the string
DLLEXPORT void concatAndHTMLEncode(const char *str)
concatenates HTML-encoded version of the c-string passed
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:46
DLLLOCAL const QoreString * operator*()
returns the string being managed
Definition: QoreString.h:1114
DLLLOCAL ~TempString()
deletes the QoreString pointer being managed
Definition: QoreString.h:983
DLLEXPORT bool equalPartial(const QoreString &str) const
returns true if the beginning of the current string matches the argument string, false if not...
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 int concatEncodeUrl(ExceptionSink *xsink, const QoreString &url, bool encode_all=false)
concatenates a URL-encoded version of the c-string passed
DLLEXPORT void trim_leading(const char *chars=0)
remove leading whitespace or other characters
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
DLLEXPORT void replaceChar(qore_size_t offset, char c)
replaces a byte with the byte passed
DLLEXPORT void addch(char c, unsigned times)
append a character to the string a number of times
DLLEXPORT qore_size_t capacity() const
returns number of bytes allocated for the string&#39;s buffer, capacity is always >= size ...
DLLLOCAL void makeTemp()
ensures that the object is holding a temporary value
Definition: QoreString.h:1103
DLLEXPORT void terminate(qore_size_t size)
terminates the string at byte position "size", the string is reallocated if necessary ...
DLLLOCAL TempEncodingHelper()
creates an empty TempEncodingHelperObject that may be initialized with TempEncodingHelper::set() late...
Definition: QoreString.h:1072
intptr_t qore_offset_t
used for offsets that could be negative
Definition: common.h:76
DLLLOCAL ~TempEncodingHelper()
deletes any temporary string being managed by the object
Definition: QoreString.h:1076
DLLEXPORT void trim(const char *chars=0)
remove leading and trailing whitespace or other characters
DLLLOCAL QoreString * operator->()
returns the QoreString pointer being managed
Definition: QoreString.h:988
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 int trimTrailing(ExceptionSink *xsink, const QoreString *chars=nullptr)
removes trailing whitespace or other characters
DLLEXPORT int concatUnicode(unsigned code, ExceptionSink *xsink)
append a character sequence from a unicode code point (returns 0 for OK, -1 for exception) ...
DLLEXPORT QoreString & operator+=(const char *str)
concatenates the characters to the string; assumes the string to be concatenated is already in the ch...
DLLEXPORT qore_size_t chomp()
removes a single \n\r or \n from the end of the string and returns the number of characters removed ...
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()
frees any memory allocated by the string
DLLEXPORT void takeAndTerminate(char *str, qore_size_t size)
takes ownership of the character pointer passed and assigns it to the string (frees memory previously...
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 int64 toBigInt() const
returns the value of the string as an int64
DLLEXPORT void allocate(unsigned requested_size)
Ensure the internal buffer has at least expected size in bytes.
DLLEXPORT int trimLeading(ExceptionSink *xsink, const QoreString *chars=nullptr)
removes leading whitespace or other characters
DLLEXPORT const QoreEncoding * getEncoding() const
returns the encoding for the string
DLLEXPORT bool isDataPrintableAscii() const
returns true if the string is empty or only contains printable non-control ASCII characters (ie all c...
DLLEXPORT int compareSoft(const QoreString *str, ExceptionSink *xsink) const
compares the string with another string, performing character set encoding conversion if necessary ...
DLLLOCAL char * giveBuffer()
returns a char pointer of the string, the caller owns the pointer returned (it must be manually freed...
Definition: QoreString.h:1126
DLLEXPORT void reset()
reset string to zero length; memory is deallocated; string encoding is reset to QCS_DEFAULT ...
DLLEXPORT void clear()
reset string to zero length; memory is not deallocated; string encoding does not change ...
DLLEXPORT qore_offset_t brindex(const QoreString &needle, qore_offset_t pos) const
returns the byte position of a substring within the string searching in reverse from a given position...
DLLEXPORT void removeBom()
remove any leading byte order marker (BOM) from UTF-16* strings
DLLLOCAL QoreString * operator*()
returns the QoreString pointer being managed
Definition: QoreString.h:991
DLLEXPORT void concatAndHTMLDecode(const QoreString *str)
concatenates HTML-decoded version of the c-string passed
DLLEXPORT void trim_single_leading(char c)
remove a single leading character if present
DLLEXPORT qore_size_t size() const
returns number of bytes in the string (not including the null pointer)
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 int compare(const QoreString *str) const
compares two strings without converting encodings (if the encodings do not match then "this" is deeme...
DLLLOCAL const QoreString * operator->()
returns the string being managed
Definition: QoreString.h:1111
DLLEXPORT void take(char *str)
takes ownership of the character pointer passed and assigns it to the string (frees memory previously...
DLLLOCAL TempString()
populates the object with a new QoreString that this object will manage
Definition: QoreString.h:970
DLLEXPORT QoreString & operator=(const QoreString &other)
assigns the value of one string to another
DLLEXPORT int concatEncodeUriRequest(ExceptionSink *xsink, const QoreString &url)
concatenates a URI-encoded version of the c-string passed
holds arbitrary binary data
Definition: BinaryNode.h:41
DLLEXPORT qore_size_t length() const
returns the number of characters (not bytes) in the string
DLLEXPORT QoreString * reverse() const
return a Qorestring with the characters reversed