All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
QoreListNode Class Reference

This is the list container type in Qore, dynamically allocated only, reference counted. More...

`#include <QoreListNode.h>`

Inheritance diagram for QoreListNode:
[legend]
Collaboration diagram for QoreListNode:
[legend]

## Public Member Functions

DLLLOCAL | QoreListNode (bool i)
| this function is not exported in the qore library
DLLLOCAL void | clearNeedsEval ()
| this function is not exported in the qore library
DLLEXPORT QoreListNode * | copy () const
| performs a deep copy of the list and returns the new list
DLLEXPORT QoreListNode * | copyListFrom (qore_size_t index) const
| performs a deep copy of the list starting from element "offset" and returns the new list More...
DLLEXPORT int | delete_entry (qore_size_t index, ExceptionSink *xsink)
DLLEXPORT bool | empty () const
| returns true if the list is empty More...
DLLLOCAL AbstractQoreNode * | eval_entry (qore_size_t num, ExceptionSink *xsink) const
| this function is not exported in the qore library More...
DLLEXPORT QoreListNode * | evalList (ExceptionSink *xsink) const
| evaluates the list and returns a value (or 0) More...
DLLEXPORT QoreListNode * | evalList (bool &needs_deref, ExceptionSink *xsink) const
| optionally evaluates the list More...
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 from the list as a new list More...
DLLEXPORT QoreListNode * | extract (qore_offset_t offset, qore_offset_t length, ExceptionSink *xsink)
| removes "length" elements at position "offset" (first element is offset 0) and returns any elements removed from the list as a new list More...
DLLEXPORT QoreListNode * | extract (qore_offset_t offset, qore_offset_t length, const AbstractQoreNode *l, ExceptionSink *xsink)
| adds a single value or a list of values ("l") to list possition "offset", while removing "length" elements and returns any elements removed from the list as a new list More...
DLLEXPORT AbstractQoreNode ** | get_entry_ptr (qore_size_t index)
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 More...
virtual DLLEXPORT bool | getAsBoolImpl () const
| returns false unless perl-boolean-evaluation is enabled, in which case it returns false only when empty More...
DLLEXPORT int | getAsString (QoreString &str, int foff, ExceptionSink *xsink) const
| concatenate the verbose string representation of the list (including all contained values) to an existing QoreString More...
DLLEXPORT QoreString * | getAsString (bool &del, int foff, ExceptionSink *xsink) const
| returns a QoreString giving the verbose string representation of the List (including all contained values) More...
DLLEXPORT int | getEntryAsInt (qore_size_t index) const
| returns the value of element at "index" as an integer (first element is index 0) More...
DLLEXPORT AbstractQoreNode ** | getExistingEntryPtr (qore_size_t index)
virtual DLLEXPORT const char * | getTypeName () const
| returns the type name as a c string
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 compare) More...
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 (soft compare) More...
DLLLOCAL bool | isFinalized () const
| this function is not exported in the qore library
DLLLOCAL bool | isVariableList () const
| this function is not exported in the qore library
DLLEXPORT QoreListNode * | listRefSelf () const
| returns "this" with an incremented reference count
DLLEXPORT AbstractQoreNode * | max () const
| returns the element having the highest value (determined by calling OP_LOG_GT - the greater-than ">" operator) More...
DLLEXPORT AbstractQoreNode * | max (const ResolvedCallReferenceNode *fr, ExceptionSink *xsink) const
| returns the element having the highest value (determined by calling the function reference passed to give lexical order) More...
DLLEXPORT void | merge (const QoreListNode *list)
| appends the elements of "list" to this list
DLLEXPORT AbstractQoreNode * | min () const
| returns the element having the lowest value (determined by calling OP_LOG_LT - the less-than "<" operator) More...
DLLEXPORT AbstractQoreNode * | min (const ResolvedCallReferenceNode *fr, ExceptionSink *xsink) const
| returns the element having the lowest value (determined by calling the function reference passed to give lexical order) More...
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")
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 More...
DLLEXPORT void | pop_entry (qore_size_t index, ExceptionSink *xsink)
virtual DLLEXPORT AbstractQoreNode * | realCopy () const
| returns true if the list contains parse expressions and therefore needs evaluation to return a value, false if not More...
DLLEXPORT AbstractQoreNode * | retrieve_entry (qore_size_t index)
| returns the element at "index" (first element is index 0) More...
DLLEXPORT const AbstractQoreNode * | retrieve_entry (qore_size_t index) const
| returns the element at "index" (first element is index 0) More...
DLLEXPORT QoreListNode * | reverse () const
| returns a list with the order of the elements reversed
DLLEXPORT void | set_entry (qore_size_t index, AbstractQoreNode *val, ExceptionSink *xsink)
| sets the value of a list element More...
DLLLOCAL void | setFinalized ()
| this function is not exported in the qore library
DLLLOCAL void | setNeedsEval ()
| this function is not exported in the qore library
DLLLOCAL void | setVariableList ()
| this function is not exported in the qore library
DLLEXPORT AbstractQoreNode * | shift ()
| returns the first element of the list, all other entries are moved down to fill up the first position, caller owns the reference More...
DLLEXPORT qore_size_t | size () const
| returns the number of elements in the list More...
DLLEXPORT QoreListNode * | sort () const
| returns a new list based on quicksorting the source list ("this") More...
DLLEXPORT QoreListNode * | sort (const ResolvedCallReferenceNode *fr, ExceptionSink *xsink) const
| returns a new list based on quicksorting the source list ("this") using the passed function reference to determine lexical order More...
DLLEXPORT QoreListNode * | sortDescending () const
| returns a new list based on quicksorting the source list ("this") in descending order More...
DLLEXPORT QoreListNode * | sortDescending (const ResolvedCallReferenceNode *fr, ExceptionSink *xsink) const
| returns a new list based on quicksorting the source list ("this") in descending order, using the passed function reference to determine lexical order More...
DLLEXPORT QoreListNode * | sortDescendingStable () const
| returns a new list based on executing mergesort on the source list ("this") in descending order More...
DLLEXPORT QoreListNode * | sortDescendingStable (const ResolvedCallReferenceNode *fr, ExceptionSink *xsink) const
| returns a new list based on executing mergesort on the source list ("this") in descending order, using the passed function reference to determine lexical order More...
DLLEXPORT QoreListNode * | sortStable () const
| returns a new list based on executing mergesort on the source list ("this") More...
DLLEXPORT QoreListNode * | sortStable (const ResolvedCallReferenceNode *fr, ExceptionSink *xsink) const
| returns a new list based on executing mergesort on the source list ("this") using the passed function reference to determine lexical order More...
DLLEXPORT void | splice (qore_offset_t offset, ExceptionSink *xsink)
| truncates the list at position "offset" (first element is offset 0) More...
DLLEXPORT void | splice (qore_offset_t offset, qore_offset_t length, ExceptionSink *xsink)
| removes "length" elements at position "offset" (first element is offset 0) More...
DLLEXPORT void | splice (qore_offset_t offset, qore_offset_t length, const AbstractQoreNode *l, ExceptionSink *xsink)
| adds a single value or a list of values ("l") to list possition "offset", while removing "length" elements More...
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
DLLEXPORT AbstractQoreNode * | takeExists (qore_offset_t offset)
| takes the value at the given position and replaces with NULL, only if the list position exists
Public Member Functions inherited from AbstractQoreNode
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 More...
DLLEXPORT | AbstractQoreNode (const AbstractQoreNode &v)
| copy constructor
DLLEXPORT int64 | bigIntEval (ExceptionSink *xsink) const
| evaluates the object and returns a 64-bit integer value More...
DLLEXPORT bool | boolEval (ExceptionSink *xsink) const
| evaluates the object and returns a boolean value More...
DLLEXPORT void | deref (ExceptionSink *xsink)
| decrements the reference count and calls derefImpl() if there_can_be_only_one is false, otherwise does nothing More...
DLLEXPORT AbstractQoreNode * | eval (ExceptionSink *xsink) const
| evaluates the object and returns a value (or 0) More...
DLLEXPORT AbstractQoreNode * | eval (bool &needs_deref, ExceptionSink *xsink) const
| optionally evaluates the argument More...
DLLEXPORT double | floatEval (ExceptionSink *xsink) const
| evaluates the object and returns a floating-point value More...
DLLEXPORT int64 | getAsBigInt () const
| returns the 64-bit integer value of the object More...
DLLEXPORT bool | getAsBool () const
| returns the boolean value of the object More...
DLLEXPORT double | getAsFloat () const
| returns the float value of the object More...
DLLEXPORT int | getAsInt () const
| returns the integer value of the object More...
virtual DLLEXPORT class DateTime * | getDateTimeRepresentation (bool &del) const
| returns the DateTime representation of this type (default implementation: returns ZeroDate, del = false) More...
virtual DLLEXPORT void | getDateTimeRepresentation (DateTime &dt) const
| assigns the date representation of a value to the DateTime reference passed, default implementation does nothing More...
virtual DLLEXPORT QoreString * | getStringRepresentation (bool &del) const
| returns the value of the type converted to a string, default implementation: returns the empty string More...
virtual DLLEXPORT void | getStringRepresentation (QoreString &str) const
| concatentates the value of the type to an existing QoreString reference, default implementation does nothing More...
DLLLOCAL qore_type_t | getType () const
| returns the data type More...
DLLLOCAL bool | hasValueApi () const
| returns the "has value api" flags - FIXME: remove with new ABI
DLLEXPORT int | integerEval (ExceptionSink *xsink) const
| evaluates the object and returns an integer value More...
DLLLOCAL bool | is_value () const
| returns true if the node represents a value More...
DLLLOCAL bool | isReferenceCounted () const
| returns true if the object is reference-counted
DLLLOCAL bool | needs_eval () const
| returns true if the object needs evaluation to return a value, false if not More...
DLLEXPORT void | ref () const
| increments the reference count
DLLEXPORT AbstractQoreNode * | refSelf () const
| returns "this" with an incremented reference count More...
Public Member Functions inherited from QoreReferenceCounter
DLLEXPORT | QoreReferenceCounter ()
| creates the reference counter object
DLLEXPORT | ~QoreReferenceCounter ()
| destroys the reference counter object
DLLLOCAL bool | is_unique () const
| returns true if the reference count is 1 More...
DLLLOCAL int | reference_count () const
| gets the reference count More...
DLLEXPORT bool | ROdereference () const
| atomically decrements the reference count More...
DLLEXPORT void | ROreference () const
| atomically increments the reference count

## Static Public Member Functions

static DLLLOCAL const char * | getStaticTypeName ()
| returns true if the list does not contain any parse expressions, otherwise returns false

## Protected Member Functions

virtual DLLEXPORT | ~QoreListNode ()
| the destructor is protected so it cannot be called directly More...
virtual DLLLOCAL int64 | bigIntEvalImpl (ExceptionSink *xsink) const
| always returns 0
virtual DLLLOCAL bool | boolEvalImpl (ExceptionSink *xsink) const
| always returns false
virtual DLLEXPORT bool | derefImpl (ExceptionSink *xsink)
| dereferences all elements of the list More...
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 exception
virtual DLLEXPORT AbstractQoreNode * | evalImpl (ExceptionSink *xsink) const
| evaluates the list and returns a value (or 0) More...
virtual DLLLOCAL AbstractQoreNode * | evalImpl (bool &needs_deref, ExceptionSink *xsink) const
| optionally evaluates the argument More...
virtual DLLLOCAL double | floatEvalImpl (ExceptionSink *xsink) const
| always returns 0.0
virtual DLLLOCAL int | integerEvalImpl (ExceptionSink *xsink) const
| always returns 0
DLLLOCAL int | mergesort (const ResolvedCallReferenceNode *fr, bool ascending, ExceptionSink *xsink)
| mergesort sorts the list in-place (stable) More...
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) More...
Protected Member Functions inherited from AbstractQoreNode
virtual DLLEXPORT | ~AbstractQoreNode ()
| default destructor does nothing More...

## Protected Attributes

struct qore_list_private * | priv
| this structure holds the private implementation for the type More...
Protected Attributes inherited from AbstractQoreNode
bool | custom_reference_handlers: 1
| set to one for objects that need custom reference handlers
bool | has_value_api: 1
| set to flag with new QoreValue API (derived from ParseNode) - FIXME: to be removed when new ABI is implemented
bool | needs_eval_flag: 1
| if this is true then the type can be evaluated
bool | there_can_be_only_one: 1
| if this is set to true, then reference counting is turned off for objects of this class
qore_type_t | type: 11
| the type of the object More...
bool | value: 1
| this is true for values, if false then either the type needs evaluation to produce a value or is a parse expression
Protected Attributes inherited from QoreReferenceCounter
QoreThreadLock | mRO
| pthread lock to ensure atomicity of updates for architectures where we don't have an atomic increment and decrement implementation

## Detailed Description

This is the list container type in Qore, dynamically allocated only, reference counted.

it is both a value type and can hold parse expressions as well (in which case it needs to be evaluated) the first element in the list is element 0

## Constructor & Destructor Documentation

virtual DLLEXPORT QoreListNode::~QoreListNode | ( |  | ) |

protected virtual

the destructor is protected so it cannot be called directly

use the deref(ExceptionSink) function to release the reference count

See Also
  AbstractQoreNode::deref()
  QoreListNode::derefImpl()

## Member Function Documentation

DLLEXPORT QoreListNode* QoreListNode::copyListFrom | ( | qore_size_t | index | ) | const

performs a deep copy of the list starting from element "offset" and returns the new list

therefore element 0 of the new list is element "offset" in the source list

Parameters

  index | the index of the element (first element is index 0)

DLLEXPORT int QoreListNode::delete_entry | ( | qore_size_t | index,
|  | ExceptionSink * | xsink
| ) |  |

Parameters

  index | the index of the element (first element is index 0)
  xsink | if an error occurs, the Qore-language exception information will be added here

Returns
  -1 if the index was invalid, 0 if the index was valid

Note
  cannot be used when reference count > 1

virtual DLLEXPORT bool QoreListNode::derefImpl | ( | ExceptionSink * | xsink | ) |

protected virtual

dereferences all elements of the list

The ExceptionSink argument is needed for those types that could throw an exception when they are deleted (ex: QoreObject) - which could be contained in the list

Parameters

  xsink | if an error occurs, the Qore-language exception information will be added here

Returns
  true if the object can be deleted, false if not (externally-managed)

Reimplemented from AbstractQoreNode.

DLLEXPORT bool QoreListNode::empty | ( |  | ) | const

returns true if the list is empty

return true if the list is empty

Referenced by ListIterator::empty(), and ConstListIterator::empty().

DLLLOCAL AbstractQoreNode* QoreListNode::eval_entry | ( | qore_size_t | num,
|  | ExceptionSink * | xsink
| ) |  | const

this function is not exported in the qore library

Parameters

  num | the offset of the entry to evaluate (starting with 0)
  xsink | if an error occurs, the Qore-language exception information will be added here

virtual DLLEXPORT AbstractQoreNode* QoreListNode::evalImpl | ( | ExceptionSink * | xsink | ) | const

protected virtual

evaluates the list and returns a value (or 0)

return value requires a deref(xsink) NOTE: if there is an exception, 0 will be returned

Parameters

  xsink | if an error occurs, the Qore-language exception information will be added here

Implements AbstractQoreNode.

virtual DLLLOCAL AbstractQoreNode* QoreListNode::evalImpl | ( | bool & | needs_deref,
|  | ExceptionSink * | xsink
| ) |  | const

protected virtual

optionally evaluates the argument

return value requires a deref(xsink) if needs_deref is true

See Also
  AbstractQoreNode::eval()

Implements AbstractQoreNode.

DLLEXPORT QoreListNode* QoreListNode::evalList | ( | ExceptionSink * | xsink | ) | const

evaluates the list and returns a value (or 0)

return value requires a deref(xsink) if the list does not require evaluation then "refSelf()" is used to return the same object with an incremented reference count NOTE: if the object requires evaluation and there is an exception, 0 will be returned

Parameters

  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT QoreListNode* QoreListNode::evalList | ( | bool & | needs_deref,
|  | ExceptionSink * | xsink
| ) |  | const

optionally evaluates the list

return value requires a deref(xsink) if needs_deref is true NOTE: if the list requires evaluation and there is an exception, 0 will be returned NOTE: do not use this function directly, use the QoreListNodeEvalOptionalRefHolder class instead

Parameters

  needs_deref | this is an output parameter, if needs_deref is true then the value returned must be dereferenced
  xsink | if an error occurs, the Qore-language exception information will be added here

See Also
  QoreListNodeEvalOptionalRefHolder

DLLEXPORT QoreListNode* QoreListNode::extract | ( | qore_offset_t | offset,
|  | ExceptionSink * | xsink
| ) |  |

truncates the list at position "offset" (first element is offset 0) and returns any elements removed from the list as a new list

Parameters

  offset | the index of the element (first element is offset 0, negative offsets are offsets from the end of the list)
  xsink | if an error occurs, the Qore-language exception information will be added here

Returns
  the elements removed from the list as a new list; if no elements are removed, and empty list is returned

DLLEXPORT QoreListNode* QoreListNode::extract | ( | qore_offset_t | offset,
|  | qore_offset_t | length,
|  | ExceptionSink * | xsink
| ) |  |

removes "length" elements at position "offset" (first element is offset 0) and returns any elements removed from the list as a new list

Parameters

  offset | the index of the element (first element is offset 0, negative offsets are offsets from the end of the list)
  length | the number of elements to remove (negative numbers mean all except that many elements from the end)
  xsink | if an error occurs, the Qore-language exception information will be added here

Returns
  the elements removed from the list as a new list; if no elements are removed, and empty list is returned

DLLEXPORT QoreListNode* QoreListNode::extract | ( | qore_offset_t | offset,
|  | qore_offset_t | length,
|  | const AbstractQoreNode * | l,
|  | ExceptionSink * | xsink
| ) |  |

adds a single value or a list of values ("l") to list possition "offset", while removing "length" elements and returns any elements removed from the list as a new list

the "l" AbstractQoreNode (or each element if it is a QoreListNode) will be referenced for the assignment in the QoreListNode

Parameters

  offset | the index of the element (first element is offset 0, negative offsets are offsets from the end of the list)
  length | the number of elements to remove (negative numbers mean all except that many elements from the end)
  l | the value or list of values to insert
  xsink | if an error occurs, the Qore-language exception information will be added here

Returns
  the elements removed from the list as a new list; if no elements are removed, and empty list is returned

DLLEXPORT AbstractQoreNode** QoreListNode::get_entry_ptr | ( | qore_size_t | index | ) |

Parameters

  index | the index of the element (first element is index 0)

DLLEXPORT AbstractQoreNode* QoreListNode::get_referenced_entry | ( | qore_size_t | index | ) | const

returns the element at "index" (first element is index 0), the caller owns the reference

Parameters

  index | the index of the element (first element is index 0)

Returns
  the value of the element at "index" with an incremented reference count for the caller

virtual DLLEXPORT bool QoreListNode::getAsBoolImpl | ( |  | ) | const

virtual

returns false unless perl-boolean-evaluation is enabled, in which case it returns false only when empty

Returns
  false unless perl-boolean-evaluation is enabled, in which case it returns false only when empty

Reimplemented from AbstractQoreNode.

DLLEXPORT int QoreListNode::getAsString | ( | QoreString & | str,
|  | int | foff,
|  | ExceptionSink * | xsink
| ) |  | const

virtual

concatenate the verbose string representation of the list (including all contained values) to an existing QoreString

used for n and N printf formatting

Parameters

  str | the string representation of the type will be concatenated to this QoreString reference
  foff | for multi-line formatting offset, -1 = no line breaks
  xsink | if an error occurs, the Qore-language exception information will be added here

Returns
  -1 for exception raised, 0 = OK

Implements AbstractQoreNode.

DLLEXPORT QoreString* QoreListNode::getAsString | ( | bool & | del,
|  | int | foff,
|  | ExceptionSink * | xsink
| ) |  | const

virtual

returns a QoreString giving the verbose string representation of the List (including all contained values)

used for n and N printf formatting

Parameters

  del | if this is true when the function returns, then the returned QoreString pointer should be deleted, if false, then it must not be
  foff | for multi-line formatting offset, -1 = no line breaks
  xsink | if an error occurs, the Qore-language exception information will be added here NOTE: Use the QoreNodeAsStringHelper class (defined in QoreStringNode.h) instead of using this function directly

See Also
  QoreNodeAsStringHelper

Implements AbstractQoreNode.

DLLEXPORT int QoreListNode::getEntryAsInt | ( | qore_size_t | index | ) | const

returns the value of element at "index" as an integer (first element is index 0)

Parameters

  index | the index of the element (first element is index 0)

DLLEXPORT AbstractQoreNode** QoreListNode::getExistingEntryPtr | ( | qore_size_t | index | ) |

Parameters

  index | the index of the element (first element is index 0)

virtual DLLEXPORT bool QoreListNode::is_equal_hard | ( | const AbstractQoreNode * | v,
|  | ExceptionSink * | xsink
| ) |  | const

virtual

tests for equality ("deep compare" including all contained values) without type conversions (hard compare)

Parameters

  v | the value to compare
  xsink | if an error occurs, the Qore-language exception information will be added here

Implements AbstractQoreNode.

virtual DLLEXPORT bool QoreListNode::is_equal_soft | ( | const AbstractQoreNode * | v,
|  | ExceptionSink * | xsink
| ) |  | const

virtual

tests for equality ("deep compare" including all contained values) with possible type conversion (soft compare)

Parameters

  v | the value to compare
  xsink | if an error occurs, the Qore-language exception information will be added here

Implements AbstractQoreNode.

DLLEXPORT AbstractQoreNode* QoreListNode::max | ( |  | ) | const

returns the element having the highest value (determined by calling OP_LOG_GT - the greater-than ">" operator)

so "soft" comparisons are made, meaning that the list can be made up of different types, and, as long as the comparisons are meaningful, the maximum value can be returned

DLLEXPORT AbstractQoreNode* QoreListNode::max | ( | const ResolvedCallReferenceNode * | fr,
|  | ExceptionSink * | xsink
| ) |  | const

returns the element having the highest value (determined by calling the function reference passed to give lexical order)

Parameters

  fr | the function reference to be executed for each comparison to give lexical order to the elements
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLLOCAL int QoreListNode::mergesort | ( | const ResolvedCallReferenceNode * | fr,
|  | bool | ascending,
|  | ExceptionSink * | xsink
| ) |  |

protected

mergesort sorts the list in-place (stable)

Returns
  0 for OK, -1 for exception raised

DLLEXPORT AbstractQoreNode* QoreListNode::min | ( |  | ) | const

returns the element having the lowest value (determined by calling OP_LOG_LT - the less-than "<" operator)

so "soft" comparisons are made, meaning that the list can be made up of different types, and, as long as the comparisons are meaningful, the minimum value can be returned

DLLEXPORT AbstractQoreNode* QoreListNode::min | ( | const ResolvedCallReferenceNode * | fr,
|  | ExceptionSink * | xsink
| ) |  | const

returns the element having the lowest value (determined by calling the function reference passed to give lexical order)

Parameters

  fr | the function reference to be executed for each comparison to give lexical order to the elements
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT AbstractQoreNode* QoreListNode::pop | ( |  | ) |

returns the last element of the list, the length is decremented by one, caller owns the reference

if the list is empty the 0 is returned (NOTE: the last entry could also be 0 as well)

DLLEXPORT void QoreListNode::pop_entry | ( | qore_size_t | index,
|  | ExceptionSink * | xsink
| ) |  |

Parameters

  index | the index of the element (first element is index 0)
  xsink | if an error occurs, the Qore-language exception information will be added here

Note
  cannot be used when reference count > 1

DLLLOCAL int QoreListNode::qsort | ( | const ResolvedCallReferenceNode * | fr,
|  | qore_size_t | left,
|  | qore_size_t | right,
|  | bool | ascending,
|  | ExceptionSink * | xsink
| ) |  |

protected

qsort sorts the list in-place (unstable)

Returns
  0 for OK, -1 for exception raised

virtual DLLEXPORT AbstractQoreNode* QoreListNode::realCopy | ( |  | ) | const

virtual

returns true if the list contains parse expressions and therefore needs evaluation to return a value, false if not

performs a deep copy of the list and returns the new list

Implements AbstractQoreNode.

DLLEXPORT AbstractQoreNode* QoreListNode::retrieve_entry | ( | qore_size_t | index | ) |

returns the element at "index" (first element is index 0)

the value is not referenced for the caller

Parameters

  index | the index of the element (first element is index 0)

Returns
  the value of the element at "index", not referenced for the caller

Referenced by get_bigint_param(), get_bigint_param_with_default(), get_bool_param(), get_float_param(), get_hard_or_nothing_param(), get_hard_param(), get_int_param(), get_int_param_with_default(), get_param(), get_param_type(), test_binary_param(), test_callref_param(), test_date_param(), test_hash_param(), test_list_param(), test_nothing_param(), test_object_param(), test_reference_param(), and test_string_param().

DLLEXPORT const AbstractQoreNode* QoreListNode::retrieve_entry | ( | qore_size_t | index | ) | const

returns the element at "index" (first element is index 0)

the value is not referenced for the caller

Parameters

  index | the index of the element (first element is index 0)

Returns
  the value of the element at "index", not referenced for the caller

DLLEXPORT void QoreListNode::set_entry | ( | qore_size_t | index,
|  | AbstractQoreNode * | val,
|  | ExceptionSink * | xsink
| ) |  |

sets the value of a list element

if there is a value there already, it is dereferenced (hence "xsink" is needed to catch any exceptions)

Parameters

  index | the index of the element (first element is index 0)
  val | the value to set, must be already referenced for the assignment (or 0)
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT AbstractQoreNode* QoreListNode::shift | ( |  | ) |

returns the first element of the list, all other entries are moved down to fill up the first position, caller owns the reference

if the list is empty the 0 is returned (NOTE: the first entry could also be 0 as well) with the current implementation the execution time for this function is O(n) where n is the length of the list

DLLEXPORT qore_size_t QoreListNode::size | ( |  | ) | const

returns the number of elements in the list

return the number of elements in the list

Referenced by ListIterator::max(), ConstListIterator::max(), num_args(), and num_params().

DLLEXPORT QoreListNode* QoreListNode::sort | ( |  | ) | const

returns a new list based on quicksorting the source list ("this")

"soft" comparisons are made using OP_LOG_LT, meaning that the list can be made up of different data types and still be sorted

DLLEXPORT QoreListNode* QoreListNode::sort | ( | const ResolvedCallReferenceNode * | fr,
|  | ExceptionSink * | xsink
| ) |  | const

returns a new list based on quicksorting the source list ("this") using the passed function reference to determine lexical order

Parameters

  fr | the function reference to be executed for each comparison to give lexical order to the elements
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT QoreListNode* QoreListNode::sortDescending | ( |  | ) | const

returns a new list based on quicksorting the source list ("this") in descending order

"soft" comparisons are made using OP_LOG_LT, meaning that the list can be made up of different data types and still be sorted

DLLEXPORT QoreListNode* QoreListNode::sortDescending | ( | const ResolvedCallReferenceNode * | fr,
|  | ExceptionSink * | xsink
| ) |  | const

returns a new list based on quicksorting the source list ("this") in descending order, using the passed function reference to determine lexical order

Parameters

  fr | the function reference to be executed for each comparison to give lexical order to the elements
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT QoreListNode* QoreListNode::sortDescendingStable | ( |  | ) | const

returns a new list based on executing mergesort on the source list ("this") in descending order

"soft" comparisons are made using OP_LOG_LT, meaning that the list can be made up of different data types and still be sorted

DLLEXPORT QoreListNode* QoreListNode::sortDescendingStable | ( | const ResolvedCallReferenceNode * | fr,
|  | ExceptionSink * | xsink
| ) |  | const

returns a new list based on executing mergesort on the source list ("this") in descending order, using the passed function reference to determine lexical order

Parameters

  fr | the function reference to be executed for each comparison to give lexical order to the elements
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT QoreListNode* QoreListNode::sortStable | ( |  | ) | const

returns a new list based on executing mergesort on the source list ("this")

"soft" comparisons are made using OP_LOG_LT, meaning that the list can be made up of different data types and still be sorted

DLLEXPORT QoreListNode* QoreListNode::sortStable | ( | const ResolvedCallReferenceNode * | fr,
|  | ExceptionSink * | xsink
| ) |  | const

returns a new list based on executing mergesort on the source list ("this") using the passed function reference to determine lexical order

Parameters

  fr | the function reference to be executed for each comparison to give lexical order to the elements
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT void QoreListNode::splice | ( | qore_offset_t | offset,
|  | ExceptionSink * | xsink
| ) |  |

truncates the list at position "offset" (first element is offset 0)

Parameters

  offset | the index of the element (first element is offset 0, negative offsets are offsets from the end of the list)
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT void QoreListNode::splice | ( | qore_offset_t | offset,
|  | qore_offset_t | length,
|  | ExceptionSink * | xsink
| ) |  |

removes "length" elements at position "offset" (first element is offset 0)

Parameters

  offset | the index of the element (first element is offset 0, negative offsets are offsets from the end of the list)
  length | the number of elements to remove (negative numbers mean all except that many elements from the end)
  xsink | if an error occurs, the Qore-language exception information will be added here

DLLEXPORT void QoreListNode::splice | ( | qore_offset_t | offset,
|  | qore_offset_t | length,
|  | const AbstractQoreNode * | l,
|  | ExceptionSink * | xsink
| ) |  |

adds a single value or a list of values ("l") to list possition "offset", while removing "length" elements

the "l" AbstractQoreNode (or each element if it is a QoreListNode) will be referenced for the assignment in the QoreListNode

Parameters

  offset | the index of the element (first element is offset 0, negative offsets are offsets from the end of the list)
  length | the number of elements to remove (negative numbers mean all except that many elements from the end)
  l | the value or list of values to insert
  xsink | if an error occurs, the Qore-language exception information will be added here

## Member Data Documentation

struct qore_list_private* QoreListNode::priv

protected

this structure holds the private implementation for the type

therefore changes to the implementation will not affect the C++ ABI

The documentation for this class was generated from the following file:

- include/qore/QoreListNode.h (6de6cc3b438610bf03b2bec44a3d7c61f90e3165)