NAME
src/pmc/hash.pmc - Hash PMC
DESCRIPTION
Hash PMC wraps Parrot's _hash to provide a high-level API:
- Convert between various types to use as hash keys.
- Convert between various types to use as hash values.
- Handle compound Keys for nested Hash/Array lookups.
- Provide
HashIterator
to iterate overHash
.
By default Hash uses string keys and PMC values.
Methods set_key_type
and set_value_type
may be used to switch key and values type.
For PMC
keys hash value is calculated using VTABLE get_hashvalue
function.
These are the vtable functions for the Hash PMC.
Functions
static PMC* get_next_hash(PARROT_INTERP, Hash *hash, void *key)
Get the next hash for multipart keys.
Autovivify a hash if it doesn't exist.
void init()
Initializes the instance.
void init_int(INTVAL value_type)
Initializes the instance with the value_type provided.
void destroy()
Free hash structure.
void mark()
Marks the hash as live.
PMC *clone()
Creates and returns a clone of the hash.
void set_pointer(void *ptr)
Use void set_integer(INTVAL type)
void set_key_type(INTVAL type)
Reset Hash to use different keys.
See enum METHOD get_key_type()
Return type of keys in Hash.
METHOD set_value_type(INTVAL type)
Reset Hash to use different value-type for stored items.
If there is no previous _hash was set defaults to STRING* keys.NB: this method will destroy all old data!
void *get_pointer()
Get a pointer to this PMC's Hash*.
INTVAL get_integer()
FLOATVAL get_number()
Returns the size of the hash.
STRING *get_string()
Returns a string representation of the hash,
showing its class name and memory address.
STRING *get_repr()
Return a representation of the hash contents.
INTVAL get_integer_keyed_str(STRING *key)
INTVAL get_integer_keyed_int(INTVAL key)
INTVAL get_integer_keyed(PMC *key)
Returns the integer value for the element at void set_integer_keyed(PMC *key, INTVAL value)
void set_integer_keyed_str(STRING *key, INTVAL value)
FLOATVAL get_number_keyed_str(STRING *key)
FLOATVAL get_number_keyed_int(INTVAL key)
FLOATVAL get_number_keyed(PMC *key)
Returns the floating-point value for the element at STRING *get_string_keyed_str(STRING *key)
STRING *get_string_keyed_int(INTVAL key)
STRING *get_string_keyed(PMC *key)
Returns the string value for the element at void set_string_keyed(PMC *key, STRING *value)
void set_string_keyed_str(STRING *key, STRING *value)
PMC *get_pmc_keyed(PMC *key)
PMC *get_pmc_keyed_str(STRING *key)
PMC *get_pmc_keyed_int(INTVAL key)
Returns the PMC value for the element at void set_number_keyed(PMC *key, FLOATVAL value)
void set_number_keyed_str(STRING *key, FLOATVAL value)
Sets void set_pmc_keyed(PMC *dest_key, PMC *value)
void set_pmc_keyed_str(STRING *key, PMC *value)
Sets INTVAL exists_keyed_str(STRING *key)
INTVAL exists_keyed(PMC *key)
Returns whether a key INTVAL defined_keyed_str(STRING *key)
INTVAL defined_keyed(PMC *key)
Returns whether the value for void delete_keyed_str(STRING *key)
void delete_keyed(PMC *key)
Deletes the element associated with INTVAL get_bool()
Returns true if the hash size is not zero.
INTVAL elements()
Returns the number of elements in the hash.
PMC *get_iter()
Return a new iterator.
INTVAL is_same(const PMC *other)
Returns whether the hash is the same as INTVAL is_equal(PMC *value)
The void freeze(PMC *info)
Used to archive the hash.
void thaw(PMC *info)
Used to unarchive the hash.
ptr
as this PMC's Hash*.
Hash_key_type
for possible values.NB: this method will destroy all old data!
*key
.
*key
.
*key
.
*key
.
value
as the value for *key
.
*value
as the value for *key
.
*key
exists in the hash.
*key
is defined.
*key
.
*other
.
==
operation.Check if two hashes hold the same keys and values.
Auxiliar functions
static void entry_type_must_be_pmc(PARROT_INTERP)
static void cannot_autovivify_nested(PARROT_INTERP)
*/PARROT_DOES_NOT_RETURN static void entry_type_must_be_pmc(PARROT_INTERP) { ASSERT_ARGS(entry_type_must_be_pmc) Parrot_ex_throw_from_c_args(interp,
NULL,
EXCEPTION_INVALID_OPERATION,
"Hash entry type must be PMC for multipart keys."); }PARROT_DOES_NOT_RETURN static void cannot_autovivify_nested(PARROT_INTERP) { ASSERT_ARGS(cannot_autovivify_nested) Parrot_ex_throw_from_c_args(interp,
NULL,
EXCEPTION_INVALID_OPERATION,
"Cannot autovivify nested hashes"); }/*
SEE ALSO
docs/pdds/pdd08_keys.pod.