32 #ifndef _QORE_QOREHASHNODE_H 34 #define _QORE_QOREHASHNODE_H 36 #include <qore/AbstractQoreNode.h> 55 friend class hash_assignment_priv;
56 friend class qore_object_private;
57 friend class qore_hash_private;
64 DLLLOCAL QoreHashNode& operator=(
const QoreHashNode&);
68 class qore_hash_private *
priv;
262 DLLEXPORT
bool getKeyAsBool(
const char* key,
bool &found)
const;
267 DLLEXPORT QoreHashNode*
copy()
const;
420 DLLEXPORT
bool empty()
const;
427 DLLEXPORT
bool existsKey(
const char* key)
const;
467 DLLLOCAL
void clear(
ExceptionSink* xsink,
bool reverse =
false);
484 DLLLOCAL
AbstractQoreNode* getReferencedKeyValue(
const char* key,
bool& exists)
const;
487 #include <qore/ReferenceHolder.h> 518 DLLLOCAL HashIterator& operator=(
const HashIterator&);
521 DLLLOCAL
void*
operator new(size_t);
531 DLLEXPORT ~HashIterator();
537 DLLEXPORT
bool next();
543 DLLEXPORT
bool prev();
546 DLLEXPORT
const char* getKey()
const;
574 DLLEXPORT
bool first()
const;
577 DLLEXPORT
bool last()
const;
580 DLLEXPORT
bool empty()
const;
583 DLLEXPORT
bool valid()
const;
605 DLLEXPORT ~ReverseHashIterator();
611 DLLEXPORT
bool next();
617 DLLEXPORT
bool prev();
620 DLLEXPORT
bool first()
const;
623 DLLEXPORT
bool last()
const;
652 DLLLOCAL ConstHashIterator(
const ConstHashIterator&);
655 DLLEXPORT ~ConstHashIterator();
661 DLLEXPORT
bool next();
667 DLLEXPORT
bool prev();
670 DLLEXPORT
const char* getKey()
const;
682 DLLEXPORT
bool first()
const;
685 DLLEXPORT
bool last()
const;
688 DLLEXPORT
bool empty()
const;
691 DLLEXPORT
bool valid()
const;
694 DLLEXPORT
void reset();
713 DLLEXPORT ReverseConstHashIterator(
const QoreHashNode& h);
716 DLLEXPORT ~ReverseConstHashIterator();
722 DLLEXPORT
bool next();
728 DLLEXPORT
bool prev();
731 DLLEXPORT
bool first()
const;
734 DLLEXPORT
bool last()
const;
744 DLLLOCAL HashAssignmentHelper& operator=(
const HashAssignmentHelper&);
747 DLLLOCAL
void*
operator new(size_t);
751 class hash_assignment_priv *
priv;
759 DLLEXPORT HashAssignmentHelper(
QoreHashNode& n_h,
const char* key,
bool must_already_exist =
false);
766 DLLEXPORT HashAssignmentHelper(
QoreHashNode& n_h,
const std::string& key,
bool must_already_exist =
false);
794 DLLEXPORT ~HashAssignmentHelper();
802 DLLEXPORT
void reassign(
const char* key,
bool must_already_exist =
false);
810 DLLEXPORT
void reassign(
const std::string& key,
bool must_already_exist =
false);
815 DLLEXPORT
operator bool()
const;
836 #endif // _QORE_HASH_H virtual DLLEXPORT bool derefImpl(ExceptionSink *xsink)
dereferences all elements of the hash
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 ...
DLLEXPORT QoreListNode * getKeys() const
returns a QoreListNode of QoreStringNodes representing all keys in the hash, caller owns the referenc...
This is the hash or associative list container type in Qore, dynamically allocated only...
Definition: QoreHashNode.h:49
use this class to make assignments to hash keys from a pointer to the key value
Definition: QoreHashNode.h:738
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...
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:596
virtual DLLEXPORT ~QoreHashNode()
deletes the object, cannot be called directly (use deref(ExceptionSink*) instead) ...
The base class for all value and parse types in Qore expression trees.
Definition: AbstractQoreNode.h:55
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:457
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:71
DLLEXPORT int64 getKeyAsBigInt(const char *key, bool &found) const
returns the value of the key as an int64
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...
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...
class qore_hash_private * priv
private implementation of the class
Definition: QoreHashNode.h:68
virtual DLLEXPORT AbstractQoreNode * evalImpl(ExceptionSink *xsink) const
evaluates the object and returns a value (or 0)
Qore's string type supported by the QoreEncoding class.
Definition: QoreString.h:82
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
DLLEXPORT QoreHashNode * hashRefSelf() const
returns "this" with an incremented reference count
This is the list container type in Qore, dynamically allocated only, reference counted.
Definition: QoreListNode.h:52
virtual DLLLOCAL int64 bigIntEvalImpl(ExceptionSink *xsink) const
always returns 0
virtual DLLEXPORT bool getAsBoolImpl() const
returns false unless perl-boolean-evaluation is enabled, in which case it returns false only when emp...
virtual DLLEXPORT AbstractQoreNode * realCopy() const
performs a copy of the hash and returns the new hash
DLLEXPORT const char * getFirstKey() const
returns the cstring value of the first key in the hash
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...
const qore_type_t NT_HASH
type value for QoreHashNode
Definition: node_types.h:51
virtual DLLLOCAL bool boolEvalImpl(ExceptionSink *xsink) const
always returns false
DLLLOCAL void clearNeedsEval()
sets "needs_eval" to false and "value" to true
DLLEXPORT AbstractQoreNode * getKeyValue(const QoreString *key, ExceptionSink *xsink)
returns the value of the key if it exists
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:43
DLLEXPORT void removeKey(const QoreString *key, ExceptionSink *xsink)
removes the given key from the hash and derefences its value, if any
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) ...
reverse constant iterator class for QoreHashNode, to be only created on the stack ...
Definition: QoreHashNode.h:707
virtual DLLLOCAL int integerEvalImpl(ExceptionSink *xsink) const
always returns 0
static DLLLOCAL const char * getStaticTypeName()
returns the type name (useful in templates)
Definition: QoreHashNode.h:452
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:228
DLLEXPORT bool empty() const
returns true if the hash has no members, false if not
DLLEXPORT void deleteKey(const QoreString *key, ExceptionSink *xsink)
performs a delete operation on the value of the given key
DLLEXPORT qore_size_t size() const
returns the number of members in the hash, executes in constant time
virtual DLLLOCAL double floatEvalImpl(ExceptionSink *xsink) const
always returns 0.0
DLLLOCAL void setNeedsEval()
sets "needs_eval" to true and "value" to false
DLLEXPORT bool getKeyAsBool(const char *key, bool &found) const
returns the value of the key as a bool
int16_t qore_type_t
used to identify unique Qore data and parse types (descendents of AbstractQoreNode) ...
Definition: common.h:68
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:160
constant iterator class for QoreHashNode, to be only created on the stack
Definition: QoreHashNode.h:636
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...
class hash_assignment_priv * priv
private implementation
Definition: QoreHashNode.h:751
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)...
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
DLLEXPORT QoreHashNode * copy() const
performs a copy of the hash and returns the new hash
virtual DLLLOCAL AbstractQoreNode * parseInit(LocalVar *oflag, int pflag, int &lvids, const QoreTypeInfo *&typeInfo)
initializes during parsing
DLLEXPORT bool existsKey(const char *key) const
returns true if the hash contains the given key
a templated class to manage a reference count of an object that can throw a Qore-language exception w...
Definition: ReferenceHolder.h:51
iterator class for QoreHashNode, to be only created on the stack
Definition: QoreHashNode.h:507