32 #ifndef _QORE_ABSTRACTQORENODE_H 34 #define _QORE_ABSTRACTQORENODE_H 37 #include <qore/QoreReferenceCounter.h> 44 #define FMT_YAML_SHORT -2 63 DLLLOCAL
virtual bool getAsBoolImpl()
const {
return false; }
69 DLLLOCAL
virtual int getAsIntImpl()
const {
return 0; }
75 DLLLOCAL
virtual int64 getAsBigIntImpl()
const {
return 0; }
81 DLLLOCAL
virtual double getAsFloatImpl()
const {
return 0.0; }
114 DLLEXPORT
virtual int integerEvalImpl(
ExceptionSink* xsink)
const;
121 DLLEXPORT
virtual bool boolEvalImpl(
ExceptionSink* xsink)
const;
128 DLLEXPORT
virtual double floatEvalImpl(
ExceptionSink* xsink)
const;
143 DLLEXPORT
virtual void customRef()
const;
188 DLLEXPORT
AbstractQoreNode(
qore_type_t t,
bool n_value,
bool n_needs_eval,
bool n_there_can_be_only_one =
false,
bool n_custom_reference_handlers =
false);
304 DLLEXPORT
virtual const char*
getTypeName()
const = 0;
383 DLLEXPORT
void ref()
const;
430 DLLEXPORT
void deref();
484 DLLLOCAL
void *
operator new(size_t);
DLLLOCAL qore_type_t getType() const
returns the data type
Definition: AbstractQoreNode.h:296
virtual DLLEXPORT QoreString * getStringRepresentation(bool &del) const
returns the value of the type converted to a string, default implementation: returns the empty string...
DLLEXPORT int getAsInt() const
returns the integer value of the object
virtual DLLEXPORT AbstractQoreNode * parseInit(LocalVar *oflag, int pflag, int &lvids, const QoreTypeInfo *&typeInfo)
for use by parse types to initialize them for execution during stage 1 parsing
virtual DLLEXPORT int getAsString(QoreString &str, int foff, ExceptionSink *xsink) const =0
concatenate the verbose string representation of the value (including all contained values for contai...
DLLLOCAL bool is_value() const
returns true if the node represents a value
Definition: AbstractQoreNode.h:365
DLLEXPORT int64 bigIntEval(ExceptionSink *xsink) const
evaluates the object and returns a 64-bit integer value
DLLEXPORT bool getAsBool() const
returns the boolean value of the object
Holds absolute and relative date/time values in Qore with precision to the microsecond.
Definition: DateTime.h:93
DLLLOCAL UniqueValueQoreNode(qore_type_t t)
constructor takes the type argument
Definition: AbstractQoreNode.h:490
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:54
virtual DLLEXPORT double floatEvalImpl(ExceptionSink *xsink) const
should never be called for value types
virtual DLLEXPORT bool boolEvalImpl(ExceptionSink *xsink) const
should never be called for value types
virtual DLLEXPORT bool is_equal_hard(const AbstractQoreNode *v, ExceptionSink *xsink) const =0
tests for equality ("deep compare" including all contained values for container types) without type c...
virtual DLLEXPORT int64 bigIntEvalImpl(ExceptionSink *xsink) const
should never be called for value types
DLLEXPORT AbstractQoreNode * refSelf() const
returns "this" with an incremented reference count
virtual DLLEXPORT const char * getTypeName() const =0
returns the type name as a c string
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:82
bool custom_reference_handlers
set to one for objects that need custom reference handlers
Definition: AbstractQoreNode.h:168
bool needs_eval_flag
if this is true then the type can be evaluated
Definition: AbstractQoreNode.h:162
virtual DLLEXPORT AbstractQoreNode * realCopy() const
returns itself; objects of this type are not reference-counted and only deleted manually (by static d...
DLLEXPORT double floatEval(ExceptionSink *xsink) const
evaluates the object and returns a floating-point value
this class is for value types that will exists only once in the Qore library, reference counting is d...
Definition: AbstractQoreNode.h:478
provides atomic reference counting to Qore objects
Definition: QoreReferenceCounter.h:44
DLLEXPORT int integerEval(ExceptionSink *xsink) const
evaluates the object and returns an integer value
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:112
virtual DLLEXPORT class DateTime * getDateTimeRepresentation(bool &del) const
returns the DateTime representation of this type (default implementation: returns ZeroDate...
virtual DLLEXPORT AbstractQoreNode * realCopy() const =0
returns a copy of the object; the caller owns the reference count
DLLEXPORT int64 getAsBigInt() const
returns the 64-bit integer value of the object
The base class for all types in Qore expression trees that cannot throw an exception when deleted...
Definition: AbstractQoreNode.h:413
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:47
bool has_value_api
set to flag with new QoreValue API (derived from ParseNode) - FIXME: to be removed when new ABI is im...
Definition: AbstractQoreNode.h:171
DLLEXPORT void deref(ExceptionSink *xsink)
decrements the reference count and calls derefImpl() if there_can_be_only_one is false, otherwise does nothing
DLLLOCAL bool needs_eval() const
returns true if the object needs evaluation to return a value, false if not
Definition: AbstractQoreNode.h:266
DLLLOCAL bool hasValueApi() const
returns the "has value api" flags - FIXME: remove with new ABI
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:241
DLLEXPORT void ref() const
increments the reference count
DLLLOCAL SimpleValueQoreNode(qore_type_t t, bool n_there_can_be_only_one=false)
creates the object by assigning the type code and setting the "value" flag, unsetting the "needs_eval...
Definition: AbstractQoreNode.h:470
DLLEXPORT AbstractQoreNode(qore_type_t t, bool n_value, bool n_needs_eval, bool n_there_can_be_only_one=false, bool n_custom_reference_handlers=false)
constructor takes the type
DLLEXPORT double getAsFloat() const
returns the float value of the object
bool there_can_be_only_one
if this is set to true, then reference counting is turned off for objects of this class ...
Definition: AbstractQoreNode.h:165
DLLLOCAL SimpleQoreNode(qore_type_t t, bool n_value, bool n_needs_eval, bool n_there_can_be_only_one=false)
constructor takes the type and value arguments
Definition: AbstractQoreNode.h:420
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode) ...
Definition: common.h:71
bool value
this is true for values, if false then either the type needs evaluation to produce a value or is a pa...
Definition: AbstractQoreNode.h:159
virtual DLLEXPORT ~AbstractQoreNode()
default destructor does nothing
base class for simple value types
Definition: AbstractQoreNode.h:434
virtual DLLEXPORT int integerEvalImpl(ExceptionSink *xsink) const
should never be called for value types
virtual DLLEXPORT bool is_equal_soft(const AbstractQoreNode *v, ExceptionSink *xsink) const =0
tests for equality ("deep compare" including all contained values for container types) with possible ...
DLLLOCAL bool isReferenceCounted() const
returns true if the object is reference-counted
Definition: AbstractQoreNode.h:386
virtual DLLEXPORT AbstractQoreNode * evalImpl(ExceptionSink *xsink) const
should never be called for value types
qore_type_t type
the type of the object
Definition: AbstractQoreNode.h:156
DLLEXPORT bool boolEval(ExceptionSink *xsink) const
evaluates the object and returns a boolean value
DLLEXPORT AbstractQoreNode * eval(ExceptionSink *xsink) const
evaluates the object and returns a value (or 0)