Qore Programming Language 1.19.2
Loading...
Searching...
No Matches
QoreStringNode.h
1/* -*- mode: c++; indent-tabs-mode: nil -*- */
2/*
3 QoreStringNode.h
4
5 QoreStringNode 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_QORESTRINGNODE_H
35
36#define _QORE_QORESTRINGNODE_H
37
38#include <qore/AbstractQoreNode.h>
39#include <qore/QoreString.h>
40
41#include <cstring>
42
44
51private:
52 QoreStringNode(QoreString* str) = delete;
53 QoreStringNode& operator=(const QoreStringNode&) = delete;
54
55 // note implemented; declared private here to probit them from being called
56 DLLLOCAL virtual bool getAsBoolImpl() const;
57 DLLLOCAL virtual int getAsIntImpl() const;
58 DLLLOCAL virtual int64 getAsBigIntImpl() const;
59 DLLLOCAL virtual double getAsFloatImpl() const;
60
61protected:
63 DLLEXPORT virtual ~QoreStringNode();
64
65public:
67 DLLEXPORT QoreStringNode();
68
70
74 DLLEXPORT QoreStringNode(const char* str, const QoreEncoding* enc = QCS_DEFAULT);
75
77
80 DLLEXPORT QoreStringNode(const QoreString& str);
81
83
86 DLLEXPORT QoreStringNode(const QoreStringNode& str);
87
89
93 DLLEXPORT QoreStringNode(const std::string& str, const QoreEncoding* enc = QCS_DEFAULT);
94
95 // copies binary object and makes a base64-encoded string out of it
96 DLLEXPORT QoreStringNode(const BinaryNode* b);
97
99 DLLEXPORT QoreStringNode(const BinaryNode* bin, size_t maxlinelen);
100
102
108 DLLEXPORT QoreStringNode(char* nbuf, size_t nlen, size_t nallocated, const QoreEncoding* enc);
109
111 DLLEXPORT QoreStringNode(const char* str, size_t len, const QoreEncoding* new_qorecharset = QCS_DEFAULT);
112
113 // creates a string from a single character
114 DLLEXPORT QoreStringNode(char c);
115
117
123 DLLEXPORT int getAsString(QoreString& str, int format_offset, ExceptionSink* xsink) const;
124
126
133 DLLEXPORT QoreString* getAsString(bool& del, int format_offset, ExceptionSink* xsink) const;
134
136
140 DLLEXPORT virtual QoreString* getStringRepresentation(bool& del) const;
141
143
146 DLLEXPORT virtual void getStringRepresentation(QoreString& str) const;
147
149
153 DLLEXPORT virtual DateTime* getDateTimeRepresentation(bool& del) const;
154
156
159 DLLEXPORT virtual void getDateTimeRepresentation(DateTime& dt) const;
160
162 DLLEXPORT virtual AbstractQoreNode* realCopy() const;
163
165
169 DLLEXPORT virtual bool is_equal_soft(const AbstractQoreNode* v, ExceptionSink* xsink) const;
170
172
177 DLLEXPORT virtual bool is_equal_hard(const AbstractQoreNode* v, ExceptionSink* xsink) const;
178
180 DLLEXPORT virtual const char* getTypeName() const;
181
183
188 DLLEXPORT QoreStringNode* convertEncoding(const QoreEncoding* nccs, ExceptionSink* xsink) const;
189
191
196 DLLEXPORT QoreStringNode* substr(qore_offset_t offset, ExceptionSink* xsink) const;
197
199
206
208 DLLEXPORT QoreStringNode* reverse() const;
209
211
220 DLLEXPORT QoreStringNode* regexSubst(QoreString& match, QoreString& subst, int opts, ExceptionSink* xsink) const;
221
222 // copy function
223 DLLEXPORT QoreStringNode* copy() const;
224
226 DLLEXPORT static QoreStringNode* createAndConvertEncoding(const char* str, const QoreEncoding* from, const QoreEncoding* to, ExceptionSink* xsink);
227
230
232
237 DLLEXPORT QoreStringNode* parseBase64ToString(const QoreEncoding* enc, ExceptionSink* xsink) const;
238
241
243
249
251 DLLEXPORT QoreStringNode* stringRefSelf() const;
252
254
260
262
269
271
279
281 DLLLOCAL static const char* getStaticTypeName() {
282 return "string";
283 }
284
286 DLLLOCAL static qore_type_t getStaticTypeCode() {
287 return NT_STRING;
288 }
289
290 static const qore_type_t TYPE = NT_STRING;
291
293 DLLLOCAL virtual int parseInit(QoreValue& val, QoreParseContext& parse_context);
294
296 DLLLOCAL QoreStringNode(const char* str, const QoreEncoding* from, const QoreEncoding* to, ExceptionSink* xsink);
297
299 DLLLOCAL QoreStringNode(struct qore_string_private* p);
300};
301
302class QoreStringNodeMaker : public QoreStringNode {
303public:
304 DLLEXPORT QoreStringNodeMaker(const char* fmt, ...);
305
306private:
307 QoreStringNodeMaker(const QoreStringNodeMaker& str) = delete;
308 QoreStringNodeMaker& operator=(const QoreStringNodeMaker&) = delete;
309};
310
311extern QoreStringNode* NullString;
312
314
321public:
324
326
338 DLLEXPORT QoreStringValueHelper(const QoreValue n, const QoreEncoding* enc, ExceptionSink* xsink);
339
342
344
347 DLLEXPORT const QoreString* operator->();
348
350
353 DLLEXPORT const QoreString* operator*();
354
356
359 DLLEXPORT QoreString* giveString();
360
362
364 DLLEXPORT char* giveBuffer();
365
367 DLLEXPORT bool is_temp() const;
368
369private:
370 QoreString* str;
371 bool del;
372
374 QoreStringValueHelper& operator=(const QoreStringValueHelper&) = delete;
375 void* operator new(size_t) = delete;
376
378 DLLEXPORT void setup(ExceptionSink* xsink, const QoreValue n, const QoreEncoding* enc = nullptr);
379};
380
382
390public:
391 DLLEXPORT QoreStringNodeValueHelper(const QoreValue n);
392
394
406 DLLEXPORT QoreStringNodeValueHelper(const QoreValue n, const QoreEncoding* enc, ExceptionSink* xsink);
407
410
412
415 DLLEXPORT const QoreStringNode* operator->();
416
418
421 DLLEXPORT const QoreStringNode* operator*();
422
424
429
431 DLLEXPORT bool is_temp() const;
432
433private:
434 QoreStringNode* str;
435 bool del;
436
438 QoreStringNodeValueHelper& operator=(const QoreStringNodeValueHelper&) = delete;
439 void* operator new(size_t) = delete;
440
442 DLLEXPORT void setup(ExceptionSink* xsink, const QoreValue n, const QoreEncoding* enc = nullptr);
443};
444
445#include <qore/ReferenceHolder.h>
446
448
452
453extern QoreString NothingTypeString;
454
456
466public:
468 DLLEXPORT QoreNodeAsStringHelper(const AbstractQoreNode* n, int format_offset, ExceptionSink* xsink);
469
471 DLLEXPORT QoreNodeAsStringHelper(const QoreValue n, int format_offset, ExceptionSink* xsink);
472
475
477
480 DLLEXPORT const QoreString* operator->();
481
483
486 DLLEXPORT const QoreString* operator*();
487
489
492 DLLEXPORT QoreString* giveString();
493
494private:
495 QoreString* str;
496 bool del;
497
499 QoreNodeAsStringHelper& operator=(const QoreNodeAsStringHelper&) = delete;
500 void* operator new(size_t) = delete;
501};
502
503#endif
DLLEXPORT const QoreEncoding * QCS_DEFAULT
the default encoding for the Qore library
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:57
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
safely manages the return values to AbstractQoreNode::getAsString(), stack only, cannot be dynamicall...
Definition: QoreStringNode.h:465
DLLEXPORT QoreNodeAsStringHelper(const AbstractQoreNode *n, int format_offset, ExceptionSink *xsink)
makes the call to AbstractQoreNode::getAsString() and manages the return values
DLLEXPORT const QoreString * operator->()
returns the object being managed
DLLEXPORT const QoreString * operator*()
returns the object being managed
DLLEXPORT QoreNodeAsStringHelper(const QoreValue n, int format_offset, ExceptionSink *xsink)
makes the call to AbstractQoreNode::getAsString() and manages the return values
DLLEXPORT ~QoreNodeAsStringHelper()
destroys the object and deletes the QoreString pointer being managed if it was a temporary pointer
DLLEXPORT QoreString * giveString()
returns a copy of the QoreString that the caller owns
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:93
DLLEXPORT size_t length() const
returns the number of characters (not bytes) in the string
Qore's string value type, reference counted, dynamically-allocated only.
Definition: QoreStringNode.h:50
DLLEXPORT QoreStringNode(const char *str, size_t len, const QoreEncoding *new_qorecharset=QCS_DEFAULT)
copies the c-string passed (up to len) and assigns the encoding passed
DLLEXPORT QoreStringNode * regexSubst(QoreString &match, QoreString &subst, int opts, ExceptionSink *xsink) const
performs perl5-compatible regular expression substitution
DLLEXPORT int getAsString(QoreString &str, int format_offset, ExceptionSink *xsink) const
concatenates the string data in double quotes to an existing QoreString
DLLEXPORT QoreStringNode(const std::string &str, const QoreEncoding *enc=QCS_DEFAULT)
creates a new object from a std::string and sets the character encoding
DLLEXPORT QoreStringNode * extract(qore_offset_t offset, ExceptionSink *xsink)
removes characters from the string starting at position "offset" and returns a string of the characte...
DLLLOCAL QoreStringNode(hashdecl qore_string_private *p)
constructor using the private implementation of QoreString; not exported in the library
DLLLOCAL QoreStringNode(const char *str, const QoreEncoding *from, const QoreEncoding *to, ExceptionSink *xsink)
constructor supporting createAndConvertEncoding(), not exported in the library
virtual DLLEXPORT const char * getTypeName() const
returns the type name as a c string
DLLEXPORT QoreStringNode * parseBase64UrlToString(ExceptionSink *xsink) const
parses the string as a base64-url-encoded binary and returns the decoded value as a QoreStringNode
static DLLEXPORT QoreStringNode * createAndConvertEncoding(const char *str, const QoreEncoding *from, const QoreEncoding *to, ExceptionSink *xsink)
creates a new QoreStringNode from a string and converts its encoding
virtual DLLEXPORT QoreString * getStringRepresentation(bool &del) const
returns the current string and sets del to false
DLLEXPORT QoreStringNode(const BinaryNode *bin, size_t maxlinelen)
creates a new string as the base64-encoded value of the binary object passed and ensures the maximum ...
DLLEXPORT QoreStringNode * parseBase64UrlToString(const QoreEncoding *enc, ExceptionSink *xsink) const
parses the current string data as base64-url-encoded data and returns it as a QoreStringNode pointer ...
virtual DLLLOCAL int parseInit(QoreValue &val, QoreParseContext &parse_context)
returns the type information
DLLEXPORT QoreStringNode * parseBase64ToString(const QoreEncoding *enc, ExceptionSink *xsink) const
parses the current string data as base64-encoded data and returns it as a QoreStringNode pointer owne...
virtual DLLEXPORT bool is_equal_soft(const AbstractQoreNode *v, ExceptionSink *xsink) const
tests for equality ("deep compare" including all contained values for container types) with possible ...
DLLEXPORT QoreStringNode * extract(qore_offset_t offset, qore_offset_t length, ExceptionSink *xsink)
removes "length" characters from the string starting at position "offset" and returns a string of the...
DLLEXPORT QoreStringNode * convertEncoding(const QoreEncoding *nccs, ExceptionSink *xsink) const
converts the encoding of the string to the specified encoding, returns 0 if an error occurs,...
DLLEXPORT QoreStringNode(const char *str, const QoreEncoding *enc=QCS_DEFAULT)
creates a new object from a string and sets the character encoding
DLLEXPORT QoreStringNode * stringRefSelf() const
references the object and returns a non-const pointer to "this"
DLLEXPORT QoreStringNode()
creates an empty string and assigns the default encoding QCS_DEFAULT
DLLEXPORT QoreStringNode * extract(qore_offset_t offset, qore_offset_t length, QoreValue strn, ExceptionSink *xsink)
removes "length" characters from the string starting at position "offset" and replaces them with the ...
DLLEXPORT QoreStringNode * substr(qore_offset_t offset, ExceptionSink *xsink) const
returns a new string consisting of all the characters from the current string starting with character...
static DLLLOCAL qore_type_t getStaticTypeCode()
returns the type code (useful in templates)
Definition: QoreStringNode.h:286
DLLEXPORT QoreStringNode(const QoreString &str)
creates a new QoreStringNode from an existing QoreString reference
virtual DLLEXPORT void getStringRepresentation(QoreString &str) const
concatentates the value of the type to an existing QoreString reference
DLLEXPORT QoreStringNode * substr(qore_offset_t offset, qore_offset_t length, ExceptionSink *xsink) const
returns a new string consisting of "length" characters from the current string starting with characte...
DLLEXPORT QoreStringNode * reverse() const
return a QoreStringNode with the characters reversed
virtual DLLEXPORT DateTime * getDateTimeRepresentation(bool &del) const
returns the DateTime representation of this string
virtual DLLEXPORT bool is_equal_hard(const AbstractQoreNode *v, ExceptionSink *xsink) const
tests for equality ("deep compare" including all contained values for container types) without type o...
DLLEXPORT QoreStringNode(const QoreStringNode &str)
creates a new QoreStringNode from an existing QoreStringNode reference
DLLEXPORT QoreStringNode(char *nbuf, size_t nlen, size_t nallocated, const QoreEncoding *enc)
creates a new object; takes ownership of the char pointer passed, all parameters are mandatory
virtual DLLEXPORT ~QoreStringNode()
destructor only called when references = 0, use deref() instead
DLLEXPORT QoreString * getAsString(bool &del, int format_offset, ExceptionSink *xsink) const
returns a QoreString giving the string data in double quotes
virtual DLLEXPORT void getDateTimeRepresentation(DateTime &dt) const
assigns the date representation of this string to the DateTime reference passed
static DLLLOCAL const char * getStaticTypeName()
returns the type name (useful in templates)
Definition: QoreStringNode.h:281
virtual DLLEXPORT AbstractQoreNode * realCopy() const
returns a copy of the object, the caller owns the reference count
DLLEXPORT QoreStringNode * parseBase64ToString(ExceptionSink *xsink) const
parses the string as a base64-encoded binary and returns the decoded value as a QoreStringNode
this class is used to safely manage calls to AbstractQoreNode::getStringRepresentation() when a QoreS...
Definition: QoreStringNode.h:389
DLLEXPORT bool is_temp() const
returns true if the reference being managed is temporary
DLLEXPORT QoreStringNode * getReferencedValue()
returns a referenced value - the caller will own the reference
DLLEXPORT ~QoreStringNodeValueHelper()
destroys the object and dereferences the QoreStringNode if it is a temporary pointer
DLLEXPORT const QoreStringNode * operator->()
returns the object being managed
DLLEXPORT QoreStringNodeValueHelper(const QoreValue n, const QoreEncoding *enc, ExceptionSink *xsink)
gets the QoreString representation and ensures that it's in the desired encoding
DLLEXPORT const QoreStringNode * operator*()
returns the object being managed
this class is used to safely manage calls to AbstractQoreNode::getStringRepresentation() when a simpl...
Definition: QoreStringNode.h:320
DLLEXPORT const QoreString * operator->()
returns the object being managed
DLLEXPORT ~QoreStringValueHelper()
destroys the object and deletes the QoreString pointer being managed if it was a temporary pointer
DLLEXPORT QoreStringValueHelper(const QoreValue n, const QoreEncoding *enc, ExceptionSink *xsink)
gets the QoreString representation and ensures that it's in the desired encoding
DLLEXPORT QoreString * giveString()
returns a copy of the QoreString that the caller owns
DLLEXPORT const QoreString * operator*()
returns the object being managed
DLLEXPORT QoreStringValueHelper(const QoreValue n)
creates the object and acquires a pointer to the QoreString representation of the QoreValue passed
DLLEXPORT char * giveBuffer()
returns a char* string that the caller owns and must free()
DLLEXPORT bool is_temp() const
returns true if the pointer being managed is temporary
manages a reference count of a pointer to a class that takes a simple "deref()" call with no argument...
Definition: ReferenceHolder.h:127
base class for simple value types
Definition: AbstractQoreNode.h:372
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode)
Definition: common.h:70
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
const qore_type_t NT_STRING
type value for QoreStringNode
Definition: node_types.h:45
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:276