Qore Programming Language - C/C++ Library  0.8.13.2
QoreHashNode.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3  QoreHashNode.h
4 
5  Qore Programming Language
6 
7  Copyright (C) 2003 - 2017 Qore Technologies, s.r.o.
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_QOREHASHNODE_H
33 
34 #define _QORE_QOREHASHNODE_H
35 
36 #include <qore/AbstractQoreNode.h>
37 #include <qore/common.h>
38 
39 class LocalVar;
40 class QoreString;
41 class TypedHashDecl;
42 
44 
51  friend class HashIterator;
52  friend class ReverseHashIterator;
53  friend class ConstHashIterator;
54  friend class ReverseConstHashIterator;
55  friend class HashAssignmentHelper;
56  friend class hash_assignment_priv;
57  friend class qore_object_private;
58  friend class qore_hash_private;
59 
60 private:
62  DLLLOCAL QoreHashNode(const QoreHashNode&);
63 
65  DLLLOCAL QoreHashNode& operator=(const QoreHashNode&);
66 
67 protected:
69  class qore_hash_private *priv;
70 
72 
78  DLLEXPORT virtual bool derefImpl(ExceptionSink* xsink);
79 
81 
84  DLLEXPORT virtual AbstractQoreNode* evalImpl(ExceptionSink* xsink) const;
85 
87 
90  DLLLOCAL virtual AbstractQoreNode* evalImpl(bool &needs_deref, ExceptionSink* xsink) const;
91 
93  DLLLOCAL virtual int64 bigIntEvalImpl(ExceptionSink* xsink) const;
94 
96  DLLLOCAL virtual int integerEvalImpl(ExceptionSink* xsink) const;
97 
99  DLLLOCAL virtual bool boolEvalImpl(ExceptionSink* xsink) const;
100 
102  DLLLOCAL virtual double floatEvalImpl(ExceptionSink* xsink) const;
103 
105 
108  DLLEXPORT virtual ~QoreHashNode();
109 
110 public:
112  DLLEXPORT QoreHashNode();
113 
115 
117  DLLEXPORT QoreHashNode(const TypedHashDecl* hd, ExceptionSink* xsink);
118 
120 
122  DLLEXPORT QoreHashNode(const QoreTypeInfo* valueTypeInfo);
123 
125 
127  DLLEXPORT virtual bool getAsBoolImpl() const;
128 
130 
136  DLLEXPORT virtual int getAsString(QoreString& str, int foff, ExceptionSink* xsink) const;
137 
139 
146  DLLEXPORT virtual QoreString* getAsString(bool &del, int foff, ExceptionSink* xsink) const;
147 
149 
151  DLLEXPORT virtual AbstractQoreNode* realCopy() const;
152 
154 
158  DLLEXPORT virtual bool is_equal_soft(const AbstractQoreNode* v, ExceptionSink* xsink) const;
159 
161 
165  DLLEXPORT virtual bool is_equal_hard(const AbstractQoreNode* v, ExceptionSink* xsink) const;
166 
168 
170  DLLEXPORT virtual const char* getTypeName() const;
171 
173 
175  DLLEXPORT QoreHashNode* hashRefSelf() const;
176 
178 
180  DLLEXPORT const char* getFirstKey() const;
181 
183 
185  DLLEXPORT const char* getLastKey() const;
186 
188 
194  DLLEXPORT QoreValue getValueKeyValueExistence(const char* key, bool& exists, ExceptionSink* xsink) const;
195 
197 
202  DLLEXPORT QoreValue getValueKeyValueExistence(const char* key, bool& exists) const;
203 
205 
210  DLLEXPORT QoreValue getValueKeyValue(const char* key, ExceptionSink* xsink) const;
211 
213 
217  DLLEXPORT QoreValue getValueKeyValue(const char* key) const;
218 
220 
226  DLLEXPORT QoreValue getValueKeyValueExistence(const QoreString& key, bool& exists, ExceptionSink* xsink) const;
227 
229 
234  DLLEXPORT QoreValue getValueKeyValueExistence(const QoreString& key, bool& exists) const;
235 
237 
242  DLLEXPORT QoreValue getValueKeyValue(const QoreString& key, ExceptionSink* xsink) const;
243 
245 
251  DLLEXPORT AbstractQoreNode* getKeyValueExistence(const char* key, bool &exists);
252 
254 
260  DLLEXPORT const AbstractQoreNode* getKeyValueExistence(const char* key, bool &exists) const;
261 
263 
272  DLLEXPORT AbstractQoreNode* getKeyValueExistence(const QoreString* key, bool &exists, ExceptionSink* xsink);
273 
275 
284  DLLEXPORT const AbstractQoreNode* getKeyValueExistence(const QoreString* key, bool &exists, ExceptionSink* xsink) const;
285 
287 
295  DLLEXPORT AbstractQoreNode* getKeyValue(const QoreString* key, ExceptionSink* xsink);
296 
298 
306  DLLEXPORT AbstractQoreNode* getKeyValue(const QoreString& key, ExceptionSink* xsink);
307 
309 
317  DLLEXPORT const AbstractQoreNode* getKeyValue(const QoreString* key, ExceptionSink* xsink) const;
318 
320 
325  DLLEXPORT AbstractQoreNode* getKeyValue(const char* key);
326 
328 
333  DLLEXPORT const AbstractQoreNode* getKeyValue(const char* key) const;
334 
336 
342  DLLEXPORT int64 getKeyAsBigInt(const char* key, bool &found) const;
343 
345 
351  DLLEXPORT bool getKeyAsBool(const char* key, bool &found) const;
352 
354 
356  DLLEXPORT QoreHashNode* copy() const;
357 
359 
367  DLLEXPORT AbstractQoreNode** getKeyValuePtr(const QoreString* key, ExceptionSink* xsink);
368 
370 
375  DLLEXPORT AbstractQoreNode** getKeyValuePtr(const char* key);
376 
378 
385  DLLEXPORT AbstractQoreNode** getExistingValuePtr(const QoreString* key, ExceptionSink* xsink);
386 
388 
392  DLLEXPORT AbstractQoreNode** getExistingValuePtr(const char* key);
393 
395 
400  DLLEXPORT void merge(const QoreHashNode* h, ExceptionSink* xsink);
401 
403 
414  DLLEXPORT int setValueKeyValue(const char* key, QoreValue value, ExceptionSink* xsink);
415 
417 
428  DLLEXPORT int setValueKeyValue(const QoreString& key, QoreValue value, ExceptionSink* xsink);
429 
431 
440  DLLEXPORT void setKeyValue(const QoreString* key, AbstractQoreNode* value, ExceptionSink* xsink);
441 
443 
451  DLLEXPORT void setKeyValue(const QoreString& key, AbstractQoreNode* value, ExceptionSink* xsink);
452 
454 
462  DLLEXPORT void setKeyValue(const char* key, AbstractQoreNode* value, ExceptionSink* xsink);
463 
465 
472 
474 
479  DLLEXPORT AbstractQoreNode* swapKeyValue(const char* key, AbstractQoreNode* value);
480 
482 
488  DLLEXPORT AbstractQoreNode* swapKeyValue(const char* key, AbstractQoreNode* value, ExceptionSink* xsink);
489 
491 
496  DLLEXPORT void deleteKey(const QoreString* key, ExceptionSink* xsink);
497 
499 
503  DLLEXPORT void deleteKey(const char* key, ExceptionSink* xsink);
504 
506 
510  DLLEXPORT AbstractQoreNode* takeKeyValue(const QoreString* key, ExceptionSink* xsink);
511 
513 
516  DLLEXPORT AbstractQoreNode* takeKeyValue(const char* key);
517 
519 
522  DLLEXPORT QoreListNode* getKeys() const;
523 
525 
530  DLLEXPORT QoreListNode* getValues() const;
531 
533 
536  DLLEXPORT bool compareSoft(const QoreHashNode* h, ExceptionSink* xsink) const;
537 
539 
542  DLLEXPORT bool compareHard(const QoreHashNode* h, ExceptionSink* xsink) const;
543 
545 
547  DLLEXPORT qore_size_t size() const;
548 
550 
552  DLLEXPORT bool empty() const;
553 
555 
559  DLLEXPORT bool existsKey(const char* key) const;
560 
562 
565  DLLEXPORT bool existsKeyValue(const char* key) const;
566 
568 
572  DLLEXPORT void removeKey(const QoreString* key, ExceptionSink* xsink);
573 
575 
579  DLLEXPORT void removeKey(const char* key, ExceptionSink* xsink);
580 
582 
584  DLLEXPORT const TypedHashDecl* getHashDecl() const;
585 
587 
589  DLLEXPORT const QoreTypeInfo* getValueTypeInfo() const;
590 
592 
594  DLLEXPORT const QoreTypeInfo* getTypeInfo() const;
595 
597 
599  DLLLOCAL static const char* getStaticTypeName() {
600  return "hash";
601  }
602 
604  DLLLOCAL static qore_type_t getStaticTypeCode() {
605  return NT_HASH;
606  }
607 
608  static const qore_type_t TYPE = NT_HASH;
609 
611  DLLLOCAL virtual AbstractQoreNode* parseInit(LocalVar* oflag, int pflag, int& lvids, const QoreTypeInfo*& typeInfo);
612 
613  DLLLOCAL QoreHashNode(bool ne);
614  DLLLOCAL void clear(ExceptionSink* xsink, bool reverse = false);
615 
617  DLLLOCAL void clearNeedsEval();
618 
620  DLLLOCAL void setNeedsEval();
621 
622  DLLLOCAL AbstractQoreNode* evalKeyValue(const QoreString* key, ExceptionSink* xsink) const;
623 
624  // returns a new hash consisting of just the members of value_list
625  DLLLOCAL QoreHashNode* getSlice(const QoreListNode* value_list, ExceptionSink* xsink) const;
626 };
627 
628 #include <qore/ReferenceHolder.h>
629 
631 
635 
636 class qhi_priv;
637 
639 
649  friend class HashAssignmentHelper;
650  friend class qhi_priv;
651 
652 protected:
653  QoreHashNode* h;
654  qhi_priv* priv;
655 
657  DLLLOCAL HashIterator(const HashIterator&);
658 
660  DLLLOCAL HashIterator& operator=(const HashIterator&);
661 
663  DLLLOCAL void* operator new(size_t);
664 
665 public:
667  DLLEXPORT HashIterator(QoreHashNode* h);
668 
670  DLLEXPORT HashIterator(QoreHashNode& h);
671 
673  DLLEXPORT ~HashIterator();
674 
676 
679  DLLEXPORT bool next();
680 
682 
685  DLLEXPORT bool prev();
686 
688  DLLEXPORT const char* getKey() const;
689 
691  DLLEXPORT QoreString* getKeyString() const;
692 
694  DLLEXPORT AbstractQoreNode* getValue() const;
695 
697  DLLEXPORT AbstractQoreNode* takeValueAndDelete();
698 
700 
704  DLLEXPORT void deleteKey(ExceptionSink* xsink);
705 
707 
710  DLLEXPORT AbstractQoreNode** getValuePtr() const;
711 
713  DLLEXPORT AbstractQoreNode* getReferencedValue() const;
714 
716  DLLEXPORT QoreHashNode* getHash() const;
717 
719  DLLEXPORT bool first() const;
720 
722  DLLEXPORT bool last() const;
723 
725  DLLEXPORT bool empty() const;
726 
728  DLLEXPORT bool valid() const;
729 };
730 
732 
742 public:
744  DLLEXPORT ReverseHashIterator(QoreHashNode* h);
745 
747  DLLEXPORT ReverseHashIterator(QoreHashNode& h);
748 
750  DLLEXPORT ~ReverseHashIterator();
751 
753 
756  DLLEXPORT bool next();
757 
759 
762  DLLEXPORT bool prev();
763 
765  DLLEXPORT bool first() const;
766 
768  DLLEXPORT bool last() const;
769 };
770 
772 
782 protected:
783  const QoreHashNode* h;
784  qhi_priv* priv;
785 
787  DLLLOCAL ConstHashIterator& operator=(const HashIterator&);
788 
789 public:
791  DLLEXPORT ConstHashIterator(const QoreHashNode* h);
792 
794  DLLEXPORT ConstHashIterator(const QoreHashNode& h);
795 
797  DLLLOCAL ConstHashIterator(const ConstHashIterator&);
798 
800  DLLEXPORT ~ConstHashIterator();
801 
803 
806  DLLEXPORT bool next();
807 
809 
812  DLLEXPORT bool prev();
813 
815  DLLEXPORT const char* getKey() const;
816 
818  DLLEXPORT QoreString* getKeyString() const;
819 
821  DLLEXPORT const AbstractQoreNode* getValue() const;
822 
824  DLLEXPORT AbstractQoreNode* getReferencedValue() const;
825 
827  DLLEXPORT const QoreHashNode* getHash() const;
828 
830  DLLEXPORT bool first() const;
831 
833  DLLEXPORT bool last() const;
834 
836  DLLEXPORT bool empty() const;
837 
839  DLLEXPORT bool valid() const;
840 
842  DLLEXPORT void reset();
843 };
844 
846 
856 public:
858  DLLEXPORT ReverseConstHashIterator(const QoreHashNode* h);
859 
861  DLLEXPORT ReverseConstHashIterator(const QoreHashNode& h);
862 
864  DLLEXPORT ~ReverseConstHashIterator();
865 
867 
870  DLLEXPORT bool next();
871 
873 
876  DLLEXPORT bool prev();
877 
879  DLLEXPORT bool first() const;
880 
882  DLLEXPORT bool last() const;
883 };
884 
887 friend class hash_assignment_priv;
888 public:
890 
894  DLLEXPORT HashAssignmentHelper(QoreHashNode& n_h, const char* key, bool must_already_exist = false);
895 
897 
901  DLLEXPORT HashAssignmentHelper(QoreHashNode& n_h, const std::string& key, bool must_already_exist = false);
902 
904 
911  DLLEXPORT HashAssignmentHelper(ExceptionSink* xsink, QoreHashNode& n_h, const QoreString& key, bool must_already_exist = false);
912 
914 
921  DLLEXPORT HashAssignmentHelper(ExceptionSink* xsink, QoreHashNode& n_h, const QoreString* key, bool must_already_exist = false);
922 
924 
926  DLLEXPORT HashAssignmentHelper(HashIterator &hi);
927 
929  DLLEXPORT ~HashAssignmentHelper();
930 
932 
937  DLLEXPORT void reassign(const char* key, bool must_already_exist = false);
938 
940 
945  DLLEXPORT void reassign(const std::string& key, bool must_already_exist = false);
946 
948 
950  DLLEXPORT operator bool() const;
951 
953 
957  DLLEXPORT void assign(AbstractQoreNode* v, ExceptionSink* xsink);
958 
960 
963  DLLEXPORT AbstractQoreNode* swap(AbstractQoreNode* v, ExceptionSink* xsink);
964 
966 
968  DLLEXPORT AbstractQoreNode* operator*() const;
969 
970 protected:
972  class hash_assignment_priv *priv;
973 
974 private:
975  DLLLOCAL HashAssignmentHelper(const HashAssignmentHelper&) = delete;
976  DLLLOCAL HashAssignmentHelper& operator=(const HashAssignmentHelper&) = delete;
977  DLLLOCAL void* operator new(size_t) = delete;
978 };
979 
980 #endif // _QORE_HASH_H
DLLEXPORT bool compareSoft(const QoreHashNode *h, ExceptionSink *xsink) const
does a deep "soft" compare of all hash elements (types may be converted for the comparison) and retur...
virtual DLLEXPORT bool derefImpl(ExceptionSink *xsink)
dereferences all elements of the hash
DLLEXPORT int64 getKeyAsBigInt(const char *key, bool &found) const
returns the value of the key as an int64
DLLEXPORT QoreValue getValueKeyValueExistence(const char *key, bool &exists, ExceptionSink *xsink) const
returns the value of the given key
virtual DLLLOCAL int64 bigIntEvalImpl(ExceptionSink *xsink) const
always returns 0
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:50
use this class to make assignments to hash keys from a pointer to the key value
Definition: QoreHashNode.h:886
DLLEXPORT QoreListNode * getValues() const
returns a QoreListNode of AbstractQoreNode pointers representing all values in the hash; caller owns ...
DLLEXPORT bool getKeyAsBool(const char *key, bool &found) const
returns the value of the key as a bool
DLLEXPORT AbstractQoreNode ** getKeyValuePtr(const QoreString *key, ExceptionSink *xsink)
returns a pointer to a pointer of the value of the key so the value may be set or changed externally ...
DLLEXPORT void setKeyValue(const QoreString *key, AbstractQoreNode *value, ExceptionSink *xsink)
sets the value of "key" to "value"
reverse iterator class for QoreHashNode, to be only created on the stack
Definition: QoreHashNode.h:741
virtual DLLEXPORT ~QoreHashNode()
deletes the object, cannot be called directly (use deref(ExceptionSink*) instead) ...
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 bool compareHard(const QoreHashNode *h, ExceptionSink *xsink) const
does a deep "hard" compare of all hash elements (no type conversions are performed) and returns true ...
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:54
DLLEXPORT void merge(const QoreHashNode *h, ExceptionSink *xsink)
appends all key-value pairs of "h" to this hash
static DLLLOCAL qore_type_t getStaticTypeCode()
returns the type code (useful in templates)
Definition: QoreHashNode.h:604
DLLEXPORT const char * getFirstKey() const
returns the cstring value of the first key in the hash
DLLEXPORT AbstractQoreNode * getKeyValueExistence(const char *key, bool &exists)
returns the value of the key (assumed to be in QCS_DEFAULT) if it exists and sets "exists" accordingl...
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:74
DLLEXPORT QoreHashNode * hashRefSelf() const
returns "this" with an incremented reference count
virtual DLLEXPORT AbstractQoreNode * evalImpl(ExceptionSink *xsink) const
evaluates the object and returns a value (or 0)
DLLEXPORT AbstractQoreNode * takeKeyValue(const QoreString *key, ExceptionSink *xsink)
"takes" the value of the key from the hash and removes the key from the hash and returns the value...
virtual 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...
class qore_hash_private * priv
private implementation of the class
Definition: QoreHashNode.h:69
Qore&#39;s string type supported by the QoreEncoding class.
Definition: QoreString.h:82
DLLEXPORT const QoreTypeInfo * getValueTypeInfo() const
returns the value type declaration (only possible if there is no hashdecl set)
DLLEXPORT const TypedHashDecl * getHashDecl() const
returns the hash&#39;s type declaration, if any
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
DLLEXPORT const QoreTypeInfo * getTypeInfo() const
returns the type info structure for the current value; also works for hashes derived from a TypedHash...
virtual DLLEXPORT AbstractQoreNode * realCopy() const
performs a copy of the hash and returns the new hash
const qore_type_t NT_HASH
type value for QoreHashNode
Definition: node_types.h:51
virtual DLLLOCAL double floatEvalImpl(ExceptionSink *xsink) const
always returns 0.0
DLLEXPORT bool existsKeyValue(const char *key) const
returns true if the hash contains the given key and the key has a value (i.e. is not NOTHING) ...
The main value class in Qore, designed to be passed by value.
Definition: QoreValue.h:112
virtual DLLLOCAL int integerEvalImpl(ExceptionSink *xsink) const
always returns 0
DLLLOCAL void clearNeedsEval()
sets "needs_eval" to false and "value" to true
DLLEXPORT bool empty() const
returns true if the hash has no members, false if not
DLLEXPORT AbstractQoreNode * getKeyValue(const QoreString *key, ExceptionSink *xsink)
returns the value of the key if it exists
DLLEXPORT int setValueKeyValue(const char *key, QoreValue value, ExceptionSink *xsink)
sets the value of "key" to "value"
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:47
DLLEXPORT void removeKey(const QoreString *key, ExceptionSink *xsink)
removes the given key from the hash and derefences its value, if any
reverse constant iterator class for QoreHashNode, to be only created on the stack ...
Definition: QoreHashNode.h:855
static DLLLOCAL const char * getStaticTypeName()
returns the type name (useful in templates)
Definition: QoreHashNode.h:599
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 deleteKey(const QoreString *key, ExceptionSink *xsink)
performs a delete operation on the value of the given key
DLLEXPORT const char * getLastKey() const
returns the cstring value of the last key in the hash
virtual DLLEXPORT const char * getTypeName() const
returns the type name as a c string
typed hash declaration
Definition: TypedHashDecl.h:42
DLLEXPORT QoreListNode * getKeys() const
returns a QoreListNode of QoreStringNode pointers representing all keys in the hash, caller owns the reference count returned
DLLLOCAL void setNeedsEval()
sets "needs_eval" to true and "value" to false
DLLEXPORT QoreHashNode * copy() const
performs a copy of the hash and returns the new hash
DLLEXPORT qore_size_t size() const
returns the number of members in the hash, executes in constant time
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
constant iterator class for QoreHashNode, to be only created on the stack
Definition: QoreHashNode.h:781
class hash_assignment_priv * priv
private implementation
Definition: QoreHashNode.h:972
DLLEXPORT AbstractQoreNode * swapKeyValue(const QoreString *key, AbstractQoreNode *value, ExceptionSink *xsink)
sets the value of "key" to "value" and returns the old value (0 if not present or if already 0)...
virtual DLLLOCAL bool boolEvalImpl(ExceptionSink *xsink) const
always returns false
DLLEXPORT AbstractQoreNode ** getExistingValuePtr(const QoreString *key, ExceptionSink *xsink)
returns a pointer to a pointer of the value of the key only if the key already exists ...
DLLEXPORT QoreHashNode()
creates an empty hash
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 bool existsKey(const char *key) const
returns true if the hash contains the given key
virtual DLLLOCAL AbstractQoreNode * parseInit(LocalVar *oflag, int pflag, int &lvids, const QoreTypeInfo *&typeInfo)
initializes during parsing
virtual DLLEXPORT bool getAsBoolImpl() const
returns false unless perl-boolean-evaluation is enabled, in which case it returns false only when emp...
a templated class to manage a reference count of an object that can throw a Qore-language exception w...
Definition: ReferenceHolder.h:51
DLLEXPORT QoreValue getValueKeyValue(const char *key, ExceptionSink *xsink) const
returns the value of the given key
iterator class for QoreHashNode, to be only created on the stack
Definition: QoreHashNode.h:648