32 #ifndef _QORE_QORELISTNODE_H
34 #define _QORE_QORELISTNODE_H
36 #include <qore/AbstractQoreNode.h>
53 friend class StackList;
60 DLLLOCAL QoreListNode& operator=(
const QoreListNode&);
66 struct qore_list_private *
priv;
129 DLLEXPORT QoreListNode();
247 DLLEXPORT
void merge(
const QoreListNode* list);
282 DLLEXPORT QoreListNode*
copy()
const;
294 DLLEXPORT QoreListNode*
sort()
const;
431 DLLEXPORT
bool empty()
const;
434 DLLEXPORT QoreListNode*
reverse()
const;
447 DLLLOCAL QoreListNode(
bool i);
468 DLLLOCAL
void clear();
481 DLLLOCAL QoreListNode*
parseInitList(LocalVar *oflag,
int pflag,
int &lvids,
const QoreTypeInfo *&typeInfo);
484 #include <qore/ReferenceHolder.h>
518 DLLLOCAL
void *
operator new(size_t);
539 DLLEXPORT
bool next();
548 DLLEXPORT
bool prev();
571 DLLEXPORT
bool first()
const;
574 DLLEXPORT
bool last()
const;
594 return pos == -1 ?
false :
true;
642 DLLEXPORT
bool next();
651 DLLEXPORT
bool prev();
668 DLLEXPORT
bool first()
const;
671 DLLEXPORT
bool last()
const;
689 return pos == -1 ?
false :
true;
693 DLLEXPORT
void reset();
703 DLLLOCAL
void discard_intern() {
704 if (needs_deref && val)
710 val = exp->
evalList(needs_deref, xsink);
720 DLLLOCAL QoreListNodeEvalOptionalRefHolder& operator=(
const QoreListNodeEvalOptionalRefHolder&);
722 DLLLOCAL
void *
operator new(size_t);
757 needs_deref = n_needs_deref;
785 else if (!needs_deref || !val->
is_unique()) {
802 DLLLOCAL
operator bool()
const {
return val != 0; }
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 ...
DLLEXPORT AbstractQoreNode * takeExists(qore_offset_t offset)
takes the value at the given position and replaces with NULL, only if the list position exists ...
DLLLOCAL void setNeedsEval()
this function is not exported in the qore library
DLLLOCAL bool isFinalized() const
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 ...
DLLEXPORT void pop_entry(qore_size_t index, ExceptionSink *xsink)
DLLEXPORT bool first() const
returns true when the iterator is pointing to the first element in the list
DLLEXPORT ConstListIterator(const QoreListNode *lst, qore_size_t n_pos=-1)
initializes the iterator to the position given or, if omitted, just before the first element ...
DLLEXPORT void merge(const QoreListNode *list)
appends the elements of "list" to this list
DLLLOCAL qore_size_t max() const
returns the number of elements in the list
Definition: QoreListNode.h:677
DLLLOCAL void clearNeedsEval()
this function is not exported in the qore library
virtual DLLEXPORT bool getAsBoolImpl() const
returns false unless perl-boolean-evaluation is enabled, in which case it returns false only when emp...
DLLLOCAL const QoreListNode * getList() const
returns the list
Definition: QoreListNode.h:680
DLLEXPORT bool next()
moves the iterator to the next element, returns true if the iterator is pointing to an element of the...
DLLLOCAL bool valid() const
returns true if the iterator is pointing to a valid element
Definition: QoreListNode.h:688
DLLEXPORT int set(qore_size_t n_pos)
sets the iterator to a specific position in the list
DLLLOCAL bool isVariableList() const
this function is not exported in the qore library
DLLEXPORT ListIterator(QoreListNode *lst, qore_size_t n_pos=-1)
initializes the iterator to the position given or, if omitted, just before the first element ...
DLLLOCAL int mergesort(const ResolvedCallReferenceNode *fr, bool ascending, ExceptionSink *xsink)
mergesort sorts the list in-place (stable)
DLLLOCAL ~QoreListNodeEvalOptionalRefHolder()
clears the object (dereferences the old object if necessary)
Definition: QoreListNode.h:737
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:55
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:70
DLLEXPORT AbstractQoreNode * getReferencedValue() const
returns the current value with an incremented reference count
long qore_offset_t
used for offsets that could be negative
Definition: common.h:73
DLLLOCAL QoreListNodeEvalOptionalRefHolder(const QoreListNode *exp, ExceptionSink *n_xsink)
performs an optional evaluation of the list (sets the dereference flag)
Definition: QoreListNode.h:732
DLLLOCAL void clear()
this function is not exported in the qore library
DLLEXPORT bool next()
moves the iterator to the next element, returns true if the iterator is pointing to an element of the...
For use on the stack only: iterates through a the elements of a QoreListNode.
Definition: QoreListNode.h:512
virtual DLLLOCAL double floatEvalImpl(ExceptionSink *xsink) const
always returns 0.0
DLLEXPORT AbstractQoreNode ** getExistingEntryPtr(qore_size_t index)
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 QoreListNodeEvalOptionalRefHolder(ExceptionSink *n_xsink)
initializes an empty object and saves the ExceptionSink object
Definition: QoreListNode.h:726
DLLEXPORT QoreListNode * listRefSelf() const
returns "this" with an incremented reference count
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:50
DLLEXPORT AbstractQoreNode * getValue() const
returns a pointer to the value of the list element
DLLEXPORT QoreListNode * copyListFrom(qore_size_t index) const
performs a deep copy of the list starting from element "offset" and returns the new list ...
DLLLOCAL const QoreListNode * operator->() const
returns a pointer to the QoreListNode object being managed
Definition: QoreListNode.h:796
DLLEXPORT QoreListNode * evalList(ExceptionSink *xsink) const
evaluates the list and returns a value (or 0)
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 bool last() const
returns true when the iterator is pointing to the last element in the list
virtual DLLEXPORT ~QoreListNode()
the destructor is protected so it cannot be called directly
DLLLOCAL void discard()
clears the object (dereferences the old object if necessary)
Definition: QoreListNode.h:742
DLLEXPORT bool prev()
moves the iterator to the previous element, returns true if the iterator is pointing to an element of...
DLLEXPORT const AbstractQoreNode * getValue() const
returns a pointer to the value of the list element
DLLLOCAL QoreListNode * getList()
returns the list
Definition: QoreListNode.h:585
DLLLOCAL AbstractQoreNode * eval_entry(qore_size_t num, ExceptionSink *xsink) const
this function is not exported in the qore library
DLLEXPORT AbstractQoreNode * min() const
returns the element having the lowest value (determined by calling OP_LOG_LT - the less-than "<" oper...
DLLEXPORT bool prev()
moves the iterator to the previous element, returns true if the iterator is pointing to an element of...
virtual DLLLOCAL int64 bigIntEvalImpl(ExceptionSink *xsink) const
always returns 0
DLLLOCAL void assignEval(const QoreListNode *exp)
assigns a new value by executing the given list and dereference flag to this object, dereferences the old object if necessary
Definition: QoreListNode.h:749
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...
DLLEXPORT AbstractQoreNode * swap(qore_offset_t offset, AbstractQoreNode *val)
swaps the value at the given position with the value given, caller owns any reference returned ...
DLLLOCAL bool needsDeref() const
returns true if the object contains a temporary (evaluated) value that needs a dereference ...
Definition: QoreListNode.h:762
virtual DLLLOCAL int integerEvalImpl(ExceptionSink *xsink) const
always returns 0
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...
DLLLOCAL bool valid() const
returns true if the iterator is pointing to a valid element
Definition: QoreListNode.h:593
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 ...
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 ...
DLLEXPORT AbstractQoreNode ** getValuePtr() const
returns a pointer to a pointer of the value of the list element, so it can be changed externally ...
virtual DLLLOCAL bool boolEvalImpl(ExceptionSink *xsink) const
always returns false
DLLEXPORT qore_size_t size() const
returns the number of elements in the list
DLLEXPORT void ref() const
increments the reference count
DLLLOCAL void setVariableList()
this function is not exported in the qore library
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:43
DLLEXPORT int getEntryAsInt(qore_size_t index) const
returns the value of element at "index" as an integer (first element is index 0)
DLLEXPORT void deref(ExceptionSink *xsink)
decrements the reference count and calls derefImpl() if there_can_be_only_one is false, otherwise does nothing
DLLEXPORT AbstractQoreNode * getReferencedValue() const
returns the current value with an incremented reference count
DLLEXPORT int delete_entry(qore_size_t index, ExceptionSink *xsink)
DLLEXPORT AbstractQoreNode * takeValue()
if the list is unique (has reference count = 1), returns the current value with the reference count t...
DLLLOCAL bool is_unique() const
returns true if the reference count is 1
Definition: QoreReferenceCounter.h:69
DLLEXPORT QoreListNode * sortStable() const
returns a new list based on executing mergesort on the source list ("this")
DLLEXPORT AbstractQoreNode * max() const
returns the element having the highest value (determined by calling OP_LOG_GT - the greater-than ">" ...
DLLEXPORT void splice(qore_offset_t offset, ExceptionSink *xsink)
truncates the list at position "offset" (first element is offset 0)
base class for resolved call references
Definition: CallReferenceNode.h:128
DLLEXPORT bool last() const
returns true when the iterator is pointing to the last element in the list
virtual DLLEXPORT const char * getTypeName() const
returns the type name as a c string
virtual DLLEXPORT AbstractQoreNode * evalImpl(ExceptionSink *xsink) const
evaluates the list and returns a value (or 0)
DLLLOCAL bool empty() const
returns true if the list is empty
Definition: QoreListNode.h:683
DLLEXPORT bool first() const
returns true when the iterator is pointing to the first element in the list
DLLLOCAL qore_size_t max() const
returns the number of elements in the list
Definition: QoreListNode.h:582
DLLEXPORT void reset()
resets the iterator to its initial state
DLLEXPORT void set_entry(qore_size_t index, AbstractQoreNode *val, ExceptionSink *xsink)
sets the value of a list element
DLLEXPORT QoreListNode * reverse() const
returns a list with the order of the elements reversed
DLLLOCAL const QoreListNode * operator*() const
returns a pointer to the QoreListNode object being managed
Definition: QoreListNode.h:799
DLLLOCAL void assign(bool n_needs_deref, QoreListNode *n_val)
assigns a new value and dereference flag to this object, dereferences the old object if necessary ...
Definition: QoreListNode.h:755
DLLEXPORT AbstractQoreNode ** get_entry_ptr(qore_size_t index)
static DLLLOCAL const char * getStaticTypeName()
returns true if the list does not contain any parse expressions, otherwise returns false ...
Definition: QoreListNode.h:181
DLLLOCAL void edit()
will create a unique list so the list can be edited
Definition: QoreListNode.h:780
DLLEXPORT QoreListNode * copy() const
performs a deep copy of the list and returns the new list
DLLLOCAL qore_size_t index() const
returns the current iterator position in the list or -1 if not pointing at a valid element ...
Definition: QoreListNode.h:674
virtual DLLEXPORT AbstractQoreNode * realCopy() const
returns true if the list contains parse expressions and therefore needs evaluation to return a value...
DLLEXPORT int set(qore_size_t n_pos)
sets the iterator to a specific position in the list
DLLLOCAL bool empty() const
returns true if the list is empty
Definition: QoreListNode.h:588
DLLLOCAL qore_size_t index() const
returns the current iterator position in the list or -1 if not pointing at a valid element ...
Definition: QoreListNode.h:579
DLLEXPORT QoreListNode * sort() const
returns a new list based on quicksorting the source list ("this")
For use on the stack only: manages result of the optional evaluation of a QoreListNode.
Definition: QoreListNode.h:697
DLLEXPORT AbstractQoreNode * shift()
returns the first element of the list, all other entries are moved down to fill up the first position...
DLLEXPORT bool empty() const
returns true if the list is empty
a templated class to manage a reference count of an object that can throw a Qore-language exception w...
Definition: ReferenceHolder.h:51
DLLLOCAL QoreListNode * getReferencedValue()
returns a referenced value - the caller will own the reference
Definition: QoreListNode.h:771
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:618
DLLEXPORT QoreListNode * sortDescending() const
returns a new list based on quicksorting the source list ("this") in descending order ...
struct qore_list_private * priv
this structure holds the private implementation for the type
Definition: QoreListNode.h:66
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)