Skip to content

MapInsertR

Description

Insert a new (key, value) pair. R-value form: key and value are treated as temporary values and are never zeroed on the caller side.

Parameters

Name Direction Description
m in,out Map handle.
in_key in Key expression.
in_value in Value expression.

Success

Returns true. A new (key, value) entry is stored in the map; length grows by one. Both source expressions are untouched. A rehash may have grown the underlying probe table.

Failure

Returns false on allocation failure or policy violation. The map is unchanged.

Usage example (Cross-references)

Usage examples (Cross-references)
        }
    
        if (!MapInsertR(&self->live, user_p, rec)) {
            if (self->config.force_page_backing)
                AllocatorFree(&self->page, user_p);
        IntIntMap        map   = MapInit(i32_hash, i32_compare, &alloc);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapSetOnlyR(&map, 2, 200);
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapSetOnlyR(&map, 2, 200);
        MapSetOnlyR(&map, 3, 30);
        IntIntMap        map   = MapInitWithValueCompare(i32_hash, i32_compare, i32_compare, &alloc);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 1, 12);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 1, 12);
        MapSetFirstR(&map, 1, 100);
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 1, 12);
        MapSetFirstR(&map, 1, 100);
        // Phase 1: fill past the first few growth thresholds.
        for (int i = 0; i < 600; ++i) {
            MapInsertR(&map, i, i * 10);
        }
        result = result && (MapPairCount(&map) == 600);
            int key = 600 + (i & 0x3f); // small cycling window
            MapRemoveAll(&map, key);
            MapInsertR(&map, key, i);
        }
        result = result && (MapPairCount(&map) >= 600);
        Float k1 = FloatFromStr("3.14", &alloc.base);
        Float k2 = FloatFromStr("2.71", &alloc.base);
        MapInsertR(&counts, k1, 1u);
        MapInsertR(&counts, k2, 2u);
        Float k2 = FloatFromStr("2.71", &alloc.base);
        MapInsertR(&counts, k1, 1u);
        MapInsertR(&counts, k2, 2u);
    
        Float probe   = FloatFromStr("314e-2", &alloc.base); // same value as k1
            MapSetOnlyR(&map, i, i * 10);
        }
        MapInsertR(&map, 2, 25);
    
        MapForeachPairPtr(&map, key_ptr, value_ptr) {
        int              key_two_sum    = 0;
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 2, 21);
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 2, 21);
        MapInsertR(&map, 3, 30);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 2, 21);
        MapInsertR(&map, 3, 30);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 2, 21);
        MapInsertR(&map, 3, 30);
    
        MapForeachKey(&map, key) {
    
        MapSetOnlyR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapSetOnlyR(&map, 2, 20);
        IntIntMap        map   = MapInitWithValueCompare(i32_hash, i32_compare, i32_compare, &alloc);
    
        MapInsertR(&map, 5, 50);
        MapInsertR(&map, 5, 51);
        MapInsertR(&map, 5, 52);
    
        MapInsertR(&map, 5, 50);
        MapInsertR(&map, 5, 51);
        MapInsertR(&map, 5, 52);
        MapInsertR(&map, 5, 50);
        MapInsertR(&map, 5, 51);
        MapInsertR(&map, 5, 52);
    
        bool result = MapRemovePair(&map, 5, 51);
        IntIntMap        map   = MapInit(i32_hash, i32_compare, &alloc);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 3, 31);
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 3, 31);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 3, 31);
    
        bool result = (MapRemoveIf(&map, remove_even_values, NULL) == 2);
        IntIntMap        map   = MapInit(i32_hash, i32_compare, &alloc);
    
        MapInsertR(&map, 5, 50);
        MapInsertR(&map, 5, 51);
        MapInsertR(&map, 5, 52);
    
        MapInsertR(&map, 5, 50);
        MapInsertR(&map, 5, 51);
        MapInsertR(&map, 5, 52);
        MapInsertR(&map, 9, 90);
        MapInsertR(&map, 5, 50);
        MapInsertR(&map, 5, 51);
        MapInsertR(&map, 5, 52);
        MapInsertR(&map, 9, 90);
        MapInsertR(&map, 5, 51);
        MapInsertR(&map, 5, 52);
        MapInsertR(&map, 9, 90);
    
        bool result = (MapRemoveAll(&map, 5) == 3);
        Int k3 = IntFrom(100u, &alloc.base); // duplicate of k1 by value
    
        MapInsertR(&counts, k1, 1u);
        MapInsertR(&counts, k2, 2u);
    
        MapInsertR(&counts, k1, 1u);
        MapInsertR(&counts, k2, 2u);
    
        Int  probe   = IntFrom(100u, &alloc.base);
    
        MapSetOnlyR(&map, 7, 70);
        MapInsertR(&map, 7, 71);
        MapSetOnlyR(&map, 9, 90);
    
        MapSetOnlyR(&map, 11, 110);
        MapInsertR(&map, 11, 111);
    
        int *value  = MapGetFirstPtr(&map, 11);
    
        MapSetOnlyR(&map, 11, 110);
        MapInsertR(&map, 11, 111);
    
        int *value  = MapGetFirstPtr(&map, 11);
    
        MapSetOnlyR(&map, 11, 110);
        MapInsertR(&map, 11, 111);
    
        int  found  = MapGetOrDefault(&map, 11, 999);
        int              seen      = 0;
    
        MapInsertR(&map, 4, 40);
        MapInsertR(&map, 4, 41);
        MapInsertR(&map, 4, 42);
    
        MapInsertR(&map, 4, 40);
        MapInsertR(&map, 4, 41);
        MapInsertR(&map, 4, 42);
        MapInsertR(&map, 9, 90);
        MapInsertR(&map, 4, 40);
        MapInsertR(&map, 4, 41);
        MapInsertR(&map, 4, 42);
        MapInsertR(&map, 9, 90);
        MapInsertR(&map, 4, 41);
        MapInsertR(&map, 4, 42);
        MapInsertR(&map, 9, 90);
    
        cursor = MapFindFirstForKey(&map, 4);
        MapValueCursor   cursor = MapValueCursorInvalid();
    
        MapInsertR(&map, 5, 50);
        MapInsertR(&map, 5, 51);
    
        MapInsertR(&map, 5, 50);
        MapInsertR(&map, 5, 51);
    
        cursor = MapFindFirstForKey(&map, 5);
        reserved_capacity = (size)MapCapacity(&map);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapRemoveFirst(&map, 1);
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 1, 11);
        MapInsertR(&map, 2, 20);
        MapRemoveFirst(&map, 1);
        MapClear(&map);
    
        Str key_copy = StrInitFromCstr(StrBegin(name), StrLen(name), alloc);
        MapInsertR(index, key_copy, id);
        return id;
    }
        BitVecPush(&k2, true);
    
        MapInsertR(&counts, k1, 1u);
        MapInsertR(&counts, k2, 2u);
    
        MapInsertR(&counts, k1, 1u);
        MapInsertR(&counts, k2, 2u);
    
        BitVec probe = BitVecInit(base);
    
        MapSetOnlyR(&map, "red", "apple");
        MapInsertR(&map, "red", "cherry");
        MapSetOnlyR(&map, "yellow", "banana");
        MapSetOnlyR(&map, "green", "pear");
        IntIntMap        second = MapInitWithValueCompare(i32_hash, i32_compare, i32_compare, &alloc);
    
        MapInsertR(&first, 1, 10);
        MapInsertR(&first, 1, 11);
        MapInsertR(&first, 2, 20);
    
        MapInsertR(&first, 1, 10);
        MapInsertR(&first, 1, 11);
        MapInsertR(&first, 2, 20);
        MapRemoveFirst(&first, 1);
        MapInsertR(&first, 1, 10);
        MapInsertR(&first, 1, 11);
        MapInsertR(&first, 2, 20);
        MapRemoveFirst(&first, 1);
        MapRemoveFirst(&first, 1);
    
        MapInsertR(&second, 9, 90);
        MapInsertR(&second, 10, 100);
    
        MapInsertR(&second, 9, 90);
        MapInsertR(&second, 10, 100);
    
        bool result = (MapTombstones(&first) == 1);
        int              threshold = 30;
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 3, 30);
    
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 3, 30);
        MapInsertR(&map, 4, 40);
        MapInsertR(&map, 1, 10);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 3, 30);
        MapInsertR(&map, 4, 40);
        MapInsertR(&map, 2, 20);
        MapInsertR(&map, 3, 30);
        MapInsertR(&map, 4, 40);
    
        bool result = (MapRetainIf(&map, retain_values_above_threshold, &threshold) == 2);
    #define MapMustInsertR(m, in_key, in_value)                                                                            \
        do {                                                                                                               \
            if (!MapInsertR((m), (in_key), (in_value))) {                                                                  \
                LOG_FATAL("MapMustInsertR failed");                                                                        \
            }                                                                                                              \
Last updated on