32 #ifndef _QORE_QOREHASHNODE_H 34 #define _QORE_QOREHASHNODE_H 36 #include <qore/AbstractQoreNode.h> 56 friend class hash_assignment_priv;
57 friend class qore_object_private;
58 friend class qore_hash_private;
65 DLLLOCAL QoreHashNode& operator=(
const QoreHashNode&);
69 class qore_hash_private *
priv;
104 DLLEXPORT
QoreHashNode(
const QoreTypeInfo* valueTypeInfo);
242 DLLEXPORT
bool getKeyAsBool(
const char* key,
bool &found)
const;
247 DLLEXPORT QoreHashNode*
copy()
const;
249 DLLEXPORT
QoreValue& getKeyValueReference(
const char* key);
339 DLLEXPORT
bool empty()
const;
346 DLLEXPORT
bool existsKey(
const char* key)
const;
398 DLLLOCAL
virtual void parseInit(
QoreValue& val, LocalVar* oflag,
int pflag,
int& lvids,
const QoreTypeInfo*& typeInfo);
401 DLLLOCAL
void clear(
ExceptionSink* xsink,
bool reverse =
false);
413 #include <qore/ReferenceHolder.h> 435 friend class qhi_priv;
445 DLLLOCAL HashIterator& operator=(
const HashIterator&);
448 DLLLOCAL
void*
operator new(size_t);
458 DLLEXPORT ~HashIterator();
464 DLLEXPORT
bool next();
470 DLLEXPORT
bool prev();
473 DLLEXPORT
const char* getKey()
const;
495 DLLEXPORT
QoreValue getReferenced()
const;
501 DLLEXPORT
bool first()
const;
504 DLLEXPORT
bool last()
const;
507 DLLEXPORT
bool empty()
const;
510 DLLEXPORT
bool valid()
const;
532 DLLEXPORT ~ReverseHashIterator();
538 DLLEXPORT
bool next();
544 DLLEXPORT
bool prev();
547 DLLEXPORT
bool first()
const;
550 DLLEXPORT
bool last()
const;
579 DLLLOCAL ConstHashIterator(
const ConstHashIterator&);
582 DLLEXPORT ~ConstHashIterator();
588 DLLEXPORT
bool next();
594 DLLEXPORT
bool prev();
597 DLLEXPORT
const char* getKey()
const;
609 DLLEXPORT
QoreValue getReferenced()
const;
615 DLLEXPORT
bool first()
const;
618 DLLEXPORT
bool last()
const;
621 DLLEXPORT
bool empty()
const;
624 DLLEXPORT
bool valid()
const;
627 DLLEXPORT
void reset();
646 DLLEXPORT ReverseConstHashIterator(
const QoreHashNode& h);
649 DLLEXPORT ~ReverseConstHashIterator();
655 DLLEXPORT
bool next();
661 DLLEXPORT
bool prev();
664 DLLEXPORT
bool first()
const;
667 DLLEXPORT
bool last()
const;
672 friend class hash_assignment_priv;
686 DLLEXPORT HashAssignmentHelper(
QoreHashNode& n_h,
const std::string& key,
bool must_already_exist =
false);
714 DLLEXPORT ~HashAssignmentHelper();
722 DLLEXPORT
void reassign(
const char* key,
bool must_already_exist =
false);
730 DLLEXPORT
void reassign(
const std::string& key,
bool must_already_exist =
false);
735 DLLEXPORT
operator bool()
const;
764 class hash_assignment_priv *
priv;
767 DLLLOCAL HashAssignmentHelper(
const HashAssignmentHelper&) =
delete;
768 DLLLOCAL HashAssignmentHelper& operator=(
const HashAssignmentHelper&) =
delete;
769 DLLLOCAL
void*
operator new(size_t) =
delete;
772 #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
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:671
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
reverse iterator class for QoreHashNode, to be only created on the stack
Definition: QoreHashNode.h:523
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
DLLEXPORT int setKeyValue(const char *key, QoreValue value, ExceptionSink *xsink)
sets the value of "key" to "value"
static DLLLOCAL qore_type_t getStaticTypeCode()
returns the type code (useful in templates)
Definition: QoreHashNode.h:391
DLLEXPORT const char * getFirstKey() const
returns the cstring value of the first key in the hash
size_t qore_size_t
used for sizes (same range as a pointer)
Definition: common.h:73
virtual DLLLOCAL QoreValue evalImpl(bool &needs_deref, ExceptionSink *xsink) const
optionally evaluates the argument
DLLEXPORT QoreHashNode * hashRefSelf() const
returns "this" with an incremented reference count
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's string type supported by the QoreEncoding class.
Definition: QoreString.h:81
DLLEXPORT const QoreTypeInfo * getValueTypeInfo() const
returns the value type declaration (only possible if there is no hashdecl set)
virtual DLLLOCAL void parseInit(QoreValue &val, LocalVar *oflag, int pflag, int &lvids, const QoreTypeInfo *&typeInfo)
initializes during parsing
DLLEXPORT const TypedHashDecl * getHashDecl() const
returns the hash'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
DLLEXPORT QoreValue takeKeyValue(const char *key)
removes the value from the hash and returns the value removed, if any
DLLEXPORT QoreValue getKeyValue(const char *key, ExceptionSink *xsink) const
returns the value of the given key
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:262
DLLEXPORT QoreValue getKeyValueExistence(const char *key, bool &exists, ExceptionSink *xsink) const
returns the value of the given key
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
container for holding Qore-language exception information and also for registering a "thread_exit" ca...
Definition: ExceptionSink.h:46
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:640
static DLLLOCAL const char * getStaticTypeName()
returns the type name (useful in templates)
Definition: QoreHashNode.h:386
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:260
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:44
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:70
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:324
constant iterator class for QoreHashNode, to be only created on the stack
Definition: QoreHashNode.h:563
class hash_assignment_priv * priv
private implementation
Definition: QoreHashNode.h:764
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 DLLEXPORT bool getAsBoolImpl() const
returns false unless perl-boolean-evaluation is enabled, in which case it returns false only when emp...
iterator class for QoreHashNode, to be only created on the stack
Definition: QoreHashNode.h:433