Qore Programming Language  0.8.11.1
QoreListNode.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3  QoreListNode.h
4 
5  Qore Programming Language
6 
7  Copyright (C) 2003 - 2014 David Nichols
8 
9  Permission is hereby granted, free of charge, to any person obtaining a
10  copy of this software and associated documentation files (the "Software"),
11  to deal in the Software without restriction, including without limitation
12  the rights to use, copy, modify, merge, publish, distribute, sublicense,
13  and/or sell copies of the Software, and to permit persons to whom the
14  Software is furnished to do so, subject to the following conditions:
15 
16  The above copyright notice and this permission notice shall be included in
17  all copies or substantial portions of the Software.
18 
19  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25  DEALINGS IN THE SOFTWARE.
26 
27  Note that the Qore library is released under a choice of three open-source
28  licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
29  information.
30 */
31 
32 #ifndef _QORE_QORELISTNODE_H
33 
34 #define _QORE_QORELISTNODE_H
35 
36 #include <qore/AbstractQoreNode.h>
37 
38 #ifdef min
39 #undef min
40 #endif
41 #ifdef max
42 #undef max
43 #endif
44 
46 
48 
52 class QoreListNode : public AbstractQoreNode {
53  friend class StackList;
54 
55 private:
57  DLLLOCAL QoreListNode(const QoreListNode&);
58 
60  DLLLOCAL QoreListNode& operator=(const QoreListNode&);
61 
62 protected:
64 
66  struct qore_list_private *priv;
67 
68  DLLLOCAL void resize(qore_size_t num);
69  DLLLOCAL QoreListNode* splice_intern(qore_size_t offset, qore_size_t length, ExceptionSink* xsink, bool extract = false);
70  DLLLOCAL QoreListNode* splice_intern(qore_size_t offset, qore_size_t length, const AbstractQoreNode* l, ExceptionSink* xsink, bool extract = false);
71  DLLLOCAL qore_size_t check_offset(qore_offset_t offset);
72  DLLLOCAL void check_offset(qore_offset_t offset, qore_offset_t len, qore_size_t &n_offset, qore_size_t &n_len);
73 
75 
77  DLLLOCAL int qsort(const ResolvedCallReferenceNode* fr, qore_size_t left, qore_size_t right, bool ascending, ExceptionSink* xsink);
78 
80 
82  DLLLOCAL int mergesort(const ResolvedCallReferenceNode* fr, bool ascending, ExceptionSink* xsink);
83 
85  DLLLOCAL QoreListNode* eval_intern(ExceptionSink* xsink) const;
86 
88 
92  DLLEXPORT virtual ~QoreListNode();
93 
95 
101  DLLEXPORT virtual bool derefImpl(ExceptionSink* xsink);
102 
104 
108  DLLEXPORT virtual AbstractQoreNode* evalImpl(ExceptionSink* xsink) const;
109 
111 
114  DLLLOCAL virtual AbstractQoreNode* evalImpl(bool &needs_deref, ExceptionSink* xsink) const;
115 
117  DLLLOCAL virtual int64 bigIntEvalImpl(ExceptionSink* xsink) const;
118 
120  DLLLOCAL virtual int integerEvalImpl(ExceptionSink* xsink) const;
121 
123  DLLLOCAL virtual bool boolEvalImpl(ExceptionSink* xsink) const;
124 
126  DLLLOCAL virtual double floatEvalImpl(ExceptionSink* xsink) const;
127 
128 public:
129  DLLEXPORT QoreListNode();
130 
132 
134  DLLEXPORT virtual bool getAsBoolImpl() const;
135 
137 
143  DLLEXPORT int getAsString(QoreString &str, int foff, ExceptionSink* xsink) const;
144 
146 
153  DLLEXPORT QoreString *getAsString(bool &del, int foff, ExceptionSink* xsink) const;
154 
156  //DLLEXPORT virtual bool needs_eval() const;
157 
159  DLLEXPORT virtual AbstractQoreNode* realCopy() const;
160 
162 
166  DLLEXPORT virtual bool is_equal_soft(const AbstractQoreNode* v, ExceptionSink* xsink) const;
167 
169 
173  DLLEXPORT virtual bool is_equal_hard(const AbstractQoreNode* v, ExceptionSink* xsink) const;
174 
176  DLLEXPORT virtual const char *getTypeName() const;
177 
179  //DLLEXPORT virtual bool is_value() const;
180 
181  DLLLOCAL static const char *getStaticTypeName() {
182  return "list";
183  }
184 
186 
190  DLLEXPORT AbstractQoreNode* retrieve_entry(qore_size_t index);
191 
193 
197  DLLEXPORT const AbstractQoreNode* retrieve_entry(qore_size_t index) const;
198 
200 
204  DLLEXPORT AbstractQoreNode* get_referenced_entry(qore_size_t index) const;
205 
207 
210  DLLEXPORT int getEntryAsInt(qore_size_t index) const;
211 
215  DLLEXPORT AbstractQoreNode** get_entry_ptr(qore_size_t index);
216 
221 
223 
230  DLLEXPORT void set_entry(qore_size_t index, AbstractQoreNode* val, ExceptionSink* xsink);
231 
232  DLLEXPORT void push(AbstractQoreNode* val);
233  DLLEXPORT void insert(AbstractQoreNode* val);
234 
236 
238  DLLEXPORT AbstractQoreNode* pop();
239 
241 
244  DLLEXPORT AbstractQoreNode* shift();
245 
247  DLLEXPORT void merge(const QoreListNode* list);
248 
254  DLLEXPORT int delete_entry(qore_size_t index, ExceptionSink* xsink);
255 
260  DLLEXPORT void pop_entry(qore_size_t index, ExceptionSink* xsink);
261 
263 
269  DLLEXPORT QoreListNode* evalList(ExceptionSink* xsink) const;
270 
272 
279  DLLEXPORT QoreListNode* evalList(bool &needs_deref, ExceptionSink* xsink) const;
280 
282  DLLEXPORT QoreListNode* copy() const;
283 
285 
288  DLLEXPORT QoreListNode* copyListFrom(qore_size_t index) const;
289 
291 
294  DLLEXPORT QoreListNode* sort() const;
295 
297 
301  DLLEXPORT QoreListNode* sort(const ResolvedCallReferenceNode* fr, ExceptionSink* xsink) const;
302 
304 
307  DLLEXPORT QoreListNode* sortStable() const;
308 
310 
314  DLLEXPORT QoreListNode* sortStable(const ResolvedCallReferenceNode* fr, ExceptionSink* xsink) const;
315 
317 
320  DLLEXPORT QoreListNode* sortDescending() const;
321 
323 
327  DLLEXPORT QoreListNode* sortDescending(const ResolvedCallReferenceNode* fr, ExceptionSink* xsink) const;
328 
330 
333  DLLEXPORT QoreListNode* sortDescendingStable() const;
334 
336 
340  DLLEXPORT QoreListNode* sortDescendingStable(const ResolvedCallReferenceNode* fr, ExceptionSink* xsink) const;
341 
343 
346  DLLEXPORT AbstractQoreNode* min() const;
347 
349 
352  DLLEXPORT AbstractQoreNode* max() const;
353 
355 
359  DLLEXPORT AbstractQoreNode* min(const ResolvedCallReferenceNode* fr, ExceptionSink* xsink) const;
360 
362 
366  DLLEXPORT AbstractQoreNode* max(const ResolvedCallReferenceNode* fr, ExceptionSink* xsink) const;
367 
369 
373  DLLEXPORT void splice(qore_offset_t offset, ExceptionSink* xsink);
374 
376 
381  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, ExceptionSink* xsink);
382 
384 
392  DLLEXPORT void splice(qore_offset_t offset, qore_offset_t length, const AbstractQoreNode* l, ExceptionSink* xsink);
393 
395 
400  DLLEXPORT QoreListNode* extract(qore_offset_t offset, ExceptionSink* xsink);
401 
403 
409  DLLEXPORT QoreListNode* extract(qore_offset_t offset, qore_offset_t length, ExceptionSink* xsink);
410 
412 
421  DLLEXPORT QoreListNode* extract(qore_offset_t offset, qore_offset_t length, const AbstractQoreNode* l, ExceptionSink* xsink);
422 
424 
426  DLLEXPORT qore_size_t size() const;
427 
429 
431  DLLEXPORT bool empty() const;
432 
434  DLLEXPORT QoreListNode* reverse() const;
435 
437  DLLEXPORT QoreListNode* listRefSelf() const;
438 
440  DLLEXPORT AbstractQoreNode* swap(qore_offset_t offset, AbstractQoreNode* val);
441 
443  DLLEXPORT AbstractQoreNode* takeExists(qore_offset_t offset);
444 
445  // needed only while parsing
447  DLLLOCAL QoreListNode(bool i);
448 
450  DLLLOCAL bool isFinalized() const;
451 
453  DLLLOCAL void setFinalized();
454 
456  DLLLOCAL bool isVariableList() const;
457 
459  DLLLOCAL void setVariableList();
460 
462  DLLLOCAL void clearNeedsEval();
463 
465  DLLLOCAL void setNeedsEval();
466 
468  DLLLOCAL void clear();
469 
471 
475  DLLLOCAL AbstractQoreNode* eval_entry(qore_size_t num, ExceptionSink* xsink) const;
476 
478  DLLLOCAL virtual AbstractQoreNode* parseInit(LocalVar *oflag, int pflag, int &lvids, const QoreTypeInfo *&typeInfo);
479 
481  DLLLOCAL QoreListNode* parseInitList(LocalVar *oflag, int pflag, int &lvids, const QoreTypeInfo *&typeInfo);
482 };
483 
484 #include <qore/ReferenceHolder.h>
485 
487 
491 
493 
513 protected:
514  QoreListNode* l;
515  qore_offset_t pos;
516 
518  DLLLOCAL void *operator new(size_t);
519 
520 public:
522 
525  DLLEXPORT ListIterator(QoreListNode* lst, qore_size_t n_pos = -1);
526 
528 
531  DLLEXPORT ListIterator(QoreListNode& lst, qore_size_t n_pos = -1);
532 
534 
539  DLLEXPORT bool next();
540 
542 
548  DLLEXPORT bool prev();
549 
551 
556  DLLEXPORT int set(qore_size_t n_pos);
557 
559  DLLEXPORT AbstractQoreNode* getValue() const;
560 
562  DLLEXPORT AbstractQoreNode** getValuePtr() const;
563 
565  DLLEXPORT AbstractQoreNode* getReferencedValue() const;
566 
568  DLLEXPORT AbstractQoreNode* takeValue();
569 
571  DLLEXPORT bool first() const;
572 
574  DLLEXPORT bool last() const;
575 
576  //DLLEXPORT void setValue(AbstractQoreNode* val, ExceptionSink* xsink) const;
577 
579  DLLLOCAL qore_size_t index() const { return pos; }
580 
582  DLLLOCAL qore_size_t max() const { return l->size(); }
583 
585  DLLLOCAL QoreListNode* getList() { return l; }
586 
588  DLLLOCAL bool empty() const {
589  return l->empty();
590  }
591 
593  DLLLOCAL bool valid() const {
594  return pos == -1 ? false : true;
595  }
596 };
597 
599 
619 protected:
620  const QoreListNode* l;
621  qore_offset_t pos;
622 
623 public:
625 
628  DLLEXPORT ConstListIterator(const QoreListNode* lst, qore_size_t n_pos = -1);
629 
631 
634  DLLEXPORT ConstListIterator(const QoreListNode& lst, qore_size_t n_pos = -1);
635 
637 
642  DLLEXPORT bool next();
643 
645 
651  DLLEXPORT bool prev();
652 
654 
659  DLLEXPORT int set(qore_size_t n_pos);
660 
662  DLLEXPORT const AbstractQoreNode* getValue() const;
663 
665  DLLEXPORT AbstractQoreNode* getReferencedValue() const;
666 
668  DLLEXPORT bool first() const;
669 
671  DLLEXPORT bool last() const;
672 
674  DLLLOCAL qore_size_t index() const { return pos; }
675 
677  DLLLOCAL qore_size_t max() const { return l->size(); }
678 
680  DLLLOCAL const QoreListNode* getList() const { return l; }
681 
683  DLLLOCAL bool empty() const {
684  return l->empty();
685  }
686 
688  DLLLOCAL bool valid() const {
689  return pos == -1 ? false : true;
690  }
691 
693  DLLEXPORT void reset();
694 };
695 
698 private:
699  QoreListNode* val;
700  ExceptionSink* xsink;
701  bool needs_deref;
702 
703  DLLLOCAL void discard_intern() {
704  if (needs_deref && val)
705  val->deref(xsink);
706  }
707 
708  DLLLOCAL void eval_intern(const QoreListNode* exp) {
709  if (exp)
710  val = exp->evalList(needs_deref, xsink);
711  else {
712  val = 0;
713  needs_deref = false;
714  }
715  }
716 
720  DLLLOCAL QoreListNodeEvalOptionalRefHolder& operator=(const QoreListNodeEvalOptionalRefHolder&);
722  DLLLOCAL void *operator new(size_t);
723 
724 public:
726  DLLLOCAL QoreListNodeEvalOptionalRefHolder(ExceptionSink* n_xsink) : xsink(n_xsink) {
727  needs_deref = false;
728  val = 0;
729  }
730 
732  DLLLOCAL QoreListNodeEvalOptionalRefHolder(const QoreListNode* exp, ExceptionSink* n_xsink) : xsink(n_xsink) {
733  eval_intern(exp);
734  }
735 
738  discard_intern();
739  }
740 
742  DLLLOCAL void discard() {
743  discard_intern();
744  needs_deref = false;
745  val = 0;
746  }
747 
749  DLLLOCAL void assignEval(const QoreListNode* exp) {
750  discard_intern();
751  eval_intern(exp);
752  }
753 
755  DLLLOCAL void assign(bool n_needs_deref, QoreListNode* n_val) {
756  discard_intern();
757  needs_deref = n_needs_deref;
758  val = n_val;
759  }
760 
762  DLLLOCAL bool needsDeref() const {
763  return needs_deref;
764  }
765 
767 
772  if (needs_deref)
773  needs_deref = false;
774  else if (val)
775  val->ref();
776  return val;
777  }
778 
780  DLLLOCAL void edit() {
781  if (!val) {
782  val = new QoreListNode;
783  needs_deref = true;
784  }
785  else if (!needs_deref || !val->is_unique()) {
786  val = val->copy();
787  needs_deref = true;
788  }
789  }
790 
792 
796  DLLLOCAL const QoreListNode* operator->() const { return val; }
797 
799  DLLLOCAL const QoreListNode* operator*() const { return val; }
800 
802  DLLLOCAL operator bool() const { return val != 0; }
803 };
804 
805 #endif
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)