32 #ifndef _QORE_QORELISTNODE_H 34 #define _QORE_QORELISTNODE_H 36 #include <qore/AbstractQoreNode.h> 53 friend class StackList;
54 friend struct qore_list_private;
61 DLLLOCAL QoreListNode& operator=(
const QoreListNode&);
67 struct qore_list_private *
priv;
134 DLLEXPORT
QoreListNode(
const QoreTypeInfo* valueTypeInfo);
263 DLLEXPORT
void merge(
const QoreListNode* list);
307 DLLEXPORT QoreListNode*
copy()
const;
319 DLLEXPORT QoreListNode*
sort()
const;
456 DLLEXPORT
bool empty()
const;
459 DLLEXPORT QoreListNode*
reverse()
const;
507 DLLLOCAL QoreListNode*
parseInitList(LocalVar *oflag,
int pflag,
int &lvids,
const QoreTypeInfo *&typeInfo);
510 #include <qore/ReferenceHolder.h> 544 DLLLOCAL
void *
operator new(size_t);
565 DLLEXPORT
bool next();
574 DLLEXPORT
bool prev();
597 DLLEXPORT
bool first()
const;
600 DLLEXPORT
bool last()
const;
620 DLLLOCAL
bool valid()
const {
621 return pos == -1 ? false :
true;
669 DLLEXPORT
bool next();
678 DLLEXPORT
bool prev();
695 DLLEXPORT
bool first()
const;
698 DLLEXPORT
bool last()
const;
715 DLLLOCAL
bool valid()
const {
716 return pos == -1 ? false :
true;
720 DLLEXPORT
void reset();
730 DLLLOCAL
void discard_intern() {
731 if (needs_deref && val)
737 val = exp->
evalList(needs_deref, xsink);
747 DLLLOCAL QoreListNodeEvalOptionalRefHolder& operator=(
const QoreListNodeEvalOptionalRefHolder&);
749 DLLLOCAL
void *
operator new(size_t);
753 DLLLOCAL QoreListNodeEvalOptionalRefHolder(
ExceptionSink* n_xsink) : xsink(n_xsink) {
764 DLLLOCAL ~QoreListNodeEvalOptionalRefHolder() {
784 needs_deref = n_needs_deref;
789 DLLLOCAL
bool needsDeref()
const {
807 DLLLOCAL
void edit() {
812 else if (!needs_deref || !val->
is_unique()) {
829 DLLLOCAL
operator bool()
const {
return val != 0; }
virtual DLLEXPORT const char * getTypeName() const
returns the type name as a c string
DLLLOCAL void setNeedsEval()
this function is not exported in the qore library
DLLEXPORT QoreListNode * sortStable() const
returns a new list based on executing mergesort on the source list ("this")
DLLEXPORT void pop_entry(qore_size_t index, ExceptionSink *xsink)
DLLEXPORT void merge(const QoreListNode *list)
appends the elements of "list" to this list
DLLLOCAL void clearNeedsEval()
this function is not exported in the qore library
DLLEXPORT AbstractQoreNode * max() const
returns the element having the highest value (determined by calling OP_LOG_GT - the greater-than ">" ...
DLLLOCAL bool isVariableList() const
this function is not exported in the qore library
DLLEXPORT const QoreTypeInfo * getValueTypeInfo() const
returns the value type declaration (if set)
virtual DLLLOCAL int64 bigIntEvalImpl(ExceptionSink *xsink) const
always returns 0
virtual DLLEXPORT bool is_equal_hard(const AbstractQoreNode *v, ExceptionSink *xsink) const
tests for equality ("deep compare" including all contained values) without type conversions (hard com...
DLLLOCAL int mergesort(const ResolvedCallReferenceNode *fr, bool ascending, ExceptionSink *xsink)
mergesort sorts the list in-place (stable)
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:54
virtual DLLLOCAL AbstractQoreNode * parseInit(LocalVar *oflag, int pflag, int &lvids, const QoreTypeInfo *&typeInfo)
for initialization of lists in the parse tree at parse time (always returns "this") ...
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:74
static void discard(AbstractQoreNode *n, ExceptionSink *xsink)
to deref an AbstractQoreNode (when the pointer may be 0)
Definition: QoreLib.h:327
For use on the stack only: iterates through a the elements of a QoreListNode.
Definition: QoreListNode.h:538
DLLEXPORT QoreListNode * sort() const
returns a new list based on quicksorting the source list ("this")
DLLEXPORT AbstractQoreNode ** getExistingEntryPtr(qore_size_t index)
DLLEXPORT bool empty() const
returns true if the list is empty
DLLEXPORT AbstractQoreNode * retrieve_entry(qore_size_t index)
returns the element at "index" (first element is index 0)
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:82
DLLEXPORT AbstractQoreNode * get_referenced_entry(qore_size_t index) const
returns the element at "index" (first element is index 0), the caller owns the reference ...
virtual DLLEXPORT bool getAsBoolImpl() const
returns false unless perl-boolean-evaluation is enabled, in which case it returns false only when emp...
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
DLLLOCAL void setFinalized()
this function is not exported in the qore library
DLLEXPORT int getEntryAsInt(qore_size_t index) const
returns the value of element at "index" as an integer (first element is index 0)
DLLEXPORT int getAsString(QoreString &str, int foff, ExceptionSink *xsink) const
concatenate the verbose string representation of the list (including all contained values) to an exis...
DLLLOCAL QoreListNode * eval_intern(ExceptionSink *xsink) const
does an unconditional evaluation of the list and returns the new list, 0 if there is a qore-language ...
virtual DLLEXPORT ~QoreListNode()
the destructor is protected so it cannot be called directly
virtual DLLEXPORT AbstractQoreNode * realCopy() const
returns true if the list contains parse expressions and therefore needs evaluation to return a value...
DLLEXPORT QoreListNode * copyListFrom(qore_size_t index) const
performs a deep copy of the list starting from element "offset" and returns the new list ...
DLLEXPORT QoreListNode * listRefSelf() const
returns "this" with an incremented reference count
DLLEXPORT void push(AbstractQoreNode *val)
adds a value to the list
DLLEXPORT AbstractQoreNode * min() const
returns the element having the lowest value (determined by calling OP_LOG_LT - the less-than "<" oper...
virtual DLLEXPORT bool is_equal_soft(const AbstractQoreNode *v, ExceptionSink *xsink) const
tests for equality ("deep compare" including all contained values) with possible type conversion (sof...
DLLEXPORT QoreListNode * reverse() const
returns a list with the order of the elements reversed
DLLEXPORT QoreListNode * sortDescending() const
returns a new list based on quicksorting the source list ("this") in descending order ...
DLLLOCAL QoreListNode * parseInitList(LocalVar *oflag, int pflag, int &lvids, const QoreTypeInfo *&typeInfo)
for initialization of lists in the parse tree at parse time (always returns "this") ...
DLLEXPORT AbstractQoreNode * pop()
returns the last element of the list, the length is decremented by one, caller owns the reference ...
DLLLOCAL void setVariableList()
this function is not exported in the qore library
DLLEXPORT QoreListNode * sortDescendingStable() const
returns a new list based on executing mergesort on the source list ("this") in descending order ...
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:47
virtual DLLEXPORT AbstractQoreNode * evalImpl(ExceptionSink *xsink) const
evaluates the list and returns a value (or 0)
DLLEXPORT QoreListNode * evalList(ExceptionSink *xsink) const
evaluates the list and returns a value (or 0)
DLLEXPORT void deref(ExceptionSink *xsink)
decrements the reference count and calls derefImpl() if there_can_be_only_one is false, otherwise does nothing
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 int delete_entry(qore_size_t index, ExceptionSink *xsink)
intptr_t qore_offset_t
used for offsets that could be negative
Definition: common.h:77
DLLEXPORT void ref() const
increments the reference count
virtual DLLLOCAL bool boolEvalImpl(ExceptionSink *xsink) const
always returns false
DLLEXPORT void splice(qore_offset_t offset, ExceptionSink *xsink)
truncates the list at position "offset" (first element is offset 0)
DLLEXPORT bool is_unique() const
returns true if the reference count is 1
base class for resolved call references
Definition: CallReferenceNode.h:130
virtual DLLLOCAL int integerEvalImpl(ExceptionSink *xsink) const
always returns 0
DLLEXPORT void set_entry(qore_size_t index, AbstractQoreNode *val, ExceptionSink *xsink)
sets the value of a list element
DLLEXPORT AbstractQoreNode ** get_entry_ptr(qore_size_t index)
DLLLOCAL bool isFinalized() const
this function is not exported in the qore library
static DLLLOCAL const char * getStaticTypeName()
returns true if the list does not contain any parse expressions, otherwise returns false ...
Definition: QoreListNode.h:186
virtual DLLLOCAL double floatEvalImpl(ExceptionSink *xsink) const
always returns 0.0
DLLLOCAL AbstractQoreNode * eval_entry(qore_size_t num, ExceptionSink *xsink) const
this function is not exported in the qore library
DLLEXPORT const QoreTypeInfo * getTypeInfo() const
returns the type info structure for the current value; also works for lists with a specific value typ...
DLLEXPORT qore_size_t size() const
returns the number of elements in the list
For use on the stack only: manages result of the optional evaluation of a QoreListNode.
Definition: QoreListNode.h:724
DLLEXPORT AbstractQoreNode * shift()
returns the first element of the list, all other entries are moved down to fill up the first position...
DLLEXPORT QoreListNode()
create an empty list
a templated class to manage a reference count of an object that can throw a Qore-language exception w...
Definition: ReferenceHolder.h:51
DLLEXPORT QoreListNode * extract(qore_offset_t offset, ExceptionSink *xsink)
truncates the list at position "offset" (first element is offset 0) and returns any elements removed ...
For use on the stack only: iterates through elements of a const QoreListNode.
Definition: QoreListNode.h:645
struct qore_list_private * priv
this structure holds the private implementation for the type
Definition: QoreListNode.h:67
virtual DLLEXPORT bool derefImpl(ExceptionSink *xsink)
dereferences all elements of the list
DLLLOCAL int qsort(const ResolvedCallReferenceNode *fr, qore_size_t left, qore_size_t right, bool ascending, ExceptionSink *xsink)
qsort sorts the list in-place (unstable)
DLLEXPORT QoreListNode * copy() const
performs a deep copy of the list and returns the new list