Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

rt.aaA

Implementation of associative arrays.
Authors:
Martin Nowak

Source rt/aaA.d

immutable int _aaVersion;
AA version for debuggers, bump whenever changing the layout
struct AA;
Opaque AA wrapper
Impl* _aaNew(const TypeInfo_AssociativeArray ti);
Allocate associative array data. Called for new SomeAA expression.
Parameters:
TypeInfo_AssociativeArray ti TypeInfo for the associative array
Returns:
A new associative array.
pure nothrow @nogc size_t _aaLen(scope const AA aa);
Determine number of entries in associative array.
void* _aaGetY(scope AA* paa, const TypeInfo_AssociativeArray ti, const size_t valsz, scope const void* pkey);
Lookup *pkey in aa. Called only from implementation of (aa[key]) expressions when value is mutable.
Parameters:
AA* paa associative array opaque pointer
TypeInfo_AssociativeArray ti TypeInfo for the associative array
size_t valsz ignored
void* pkey pointer to the key value
Returns:
if key was in the aa, a mutable pointer to the existing value. If key was not in the aa, a mutable pointer to newly inserted value which is set to all zeros
void* _aaGetX(scope AA* paa, const TypeInfo_AssociativeArray ti, const size_t valsz, scope const void* pkey, out bool found);
Lookup *pkey in aa. Called only from implementation of require
Parameters:
AA* paa associative array opaque pointer
TypeInfo_AssociativeArray ti TypeInfo for the associative array
size_t valsz ignored
void* pkey pointer to the key value
bool found true if the value was found
Returns:
if key was in the aa, a mutable pointer to the existing value. If key was not in the aa, a mutable pointer to newly inserted value which is set to all zeros
inout(void)* _aaGetRvalueX(inout AA aa, scope const TypeInfo keyti, const size_t valsz, scope const void* pkey);
Lookup *pkey in aa. Called only from implementation of (aa[key]) expressions when value is not mutable.
Parameters:
AA aa associative array opaque pointer
TypeInfo keyti TypeInfo for the key
size_t valsz ignored
void* pkey pointer to the key value
Returns:
pointer to value if present, null otherwise
inout(void)* _aaInX(inout AA aa, scope const TypeInfo keyti, scope const void* pkey);
Lookup *pkey in aa. Called only from implementation of (key in aa) expressions.
Parameters:
AA aa associative array opaque pointer
TypeInfo keyti TypeInfo for the key
void* pkey pointer to the key value
Returns:
pointer to value if present, null otherwise
bool _aaDelX(AA aa, scope const TypeInfo keyti, scope const void* pkey);
Delete entry scope const AA, return true if it was present
pure nothrow void _aaClear(AA aa);
Remove all elements from AA.
pure nothrow void* _aaRehash(AA* paa, scope const TypeInfo keyti);
Rehash AA
pure nothrow inout(void[]) _aaValues(inout AA aa, const size_t keysz, const size_t valsz, const TypeInfo tiValueArray);
Return a GC allocated array of all values
pure nothrow inout(void[]) _aaKeys(inout AA aa, const size_t keysz, const TypeInfo tiKeyArray);
Return a GC allocated array of all keys
int _aaApply(AA aa, const size_t keysz, dg_t dg);
foreach opApply over all values
int _aaApply2(AA aa, const size_t keysz, dg2_t dg);
foreach opApply over all key/value pairs
Impl* _d_assocarrayliteralTX(const TypeInfo_AssociativeArray ti, void[] keys, void[] vals);
Construct an associative array of type ti from corresponding keys and values. Called for an AA literal [k1:v1, k2:v2].
Parameters:
TypeInfo_AssociativeArray ti TypeInfo for the associative array
void[] keys array of keys
void[] vals array of values
Returns:
A new associative array opaque pointer, or null if keys is empty.
int _aaEqual(scope const TypeInfo tiRaw, scope const AA aa1, scope const AA aa2);
compares 2 AAs for equality
nothrow hash_t _aaGetHash(scope const AA* paa, scope const TypeInfo tiRaw);
compute a hash
struct Range;
aaRange implements a ForwardRange