From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id aGjCK5wd7marIgEAqHPOHw:P1 (envelope-from ) for ; Sat, 21 Sep 2024 03:13:00 +0200 Received: from aspmx1.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0.migadu.com with LMTPS id aGjCK5wd7marIgEAqHPOHw (envelope-from ) for ; Sat, 21 Sep 2024 03:13:00 +0200 X-Envelope-To: patches@johnnyrichard.com Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=lists.sr.ht header.s=20240113 header.b=fK0sLh+W; dkim=pass header.d=maniero.me header.s=hostingermail1 header.b=ObUIrAii; spf=pass (aspmx1.migadu.com: domain of lists@sr.ht designates 46.23.81.152 as permitted sender) smtp.mailfrom=lists@sr.ht; dmarc=pass (policy=none) header.from=maniero.me; arc=pass ("mailchannels.net:s=arc-2022:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=johnnyrichard.com; s=key1; t=1726881180; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=BCSt59NQhaJcxoPVdFUov951Wr4nVI25uvH8DRYdUF8=; b=HrCErZnDCCfNk64qGiAxoF5ugDuL8GI9jFegEEBgJXsFX1tr5hPaLhShaDCAJnnSGz6rlz 4elvNnR6jHRgN3O0fQYs2N2tXeWAY/1qXMx2hVpzi0YZFiQ3jgGnDtu9lrXqmgRXUq2hbX JvmCkMekUnrzC79kYYmgBUMdMDOTHexWCqIJ2Jtog45LKvLqVFPVic/WzItvc1OFFuIIRm gYdnSDTU0okO4RSs6pI+ZfcGvruhrCvNLBtWt03CZQ3P37A21VxOYOUYtek9ZEm4SbG0de Z0zVHAByuVNpbgUgySe200ImzXbLauOhaNGklPjdRXcyFniXVLU7B0Zsij6Q0A== ARC-Authentication-Results: i=2; aspmx1.migadu.com; dkim=pass header.d=lists.sr.ht header.s=20240113 header.b=fK0sLh+W; dkim=pass header.d=maniero.me header.s=hostingermail1 header.b=ObUIrAii; spf=pass (aspmx1.migadu.com: domain of lists@sr.ht designates 46.23.81.152 as permitted sender) smtp.mailfrom=lists@sr.ht; dmarc=pass (policy=none) header.from=maniero.me; arc=pass ("mailchannels.net:s=arc-2022:i=1") ARC-Seal: i=2; s=key1; d=johnnyrichard.com; t=1726881180; a=rsa-sha256; cv=pass; b=3wVBhr3NdQ16RExVty+9c/VdJBWSvhHbH/ebH/dtA5Kd9+bMbL82qopsStZmaWkSCjIdxz O/fHv5vY5EhSGVmwueB7na7GNery/PJs5vuadb+ZJfB5RGlXoG76nXG0dmDDrXZoUCLdL7 cfgkA17fd9KdUyq4Wl5AmBs5DKA1YBoHHjToii8BQtiSwHRQhcoW1zzRmj79C7In2FP/zj x0ysFsGwJ0vO1H6RRAc1nAEJBzxwu2mdjRX6IYBbKGezoeCiT4MxQ4wUZUuVEiuZiz7m9b Ff3uYNADTanRLuNXFUyJfw7bA5+Yp6I5Wvs4oSFK7FD6oRL3yv1bElvLiZmwZQ== Received: from mail-a.sr.ht (mail-a.sr.ht [46.23.81.152]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 1E39B33647 for ; Sat, 21 Sep 2024 03:13:00 +0200 (CEST) DKIM-Signature: a=rsa-sha256; bh=eXYFIaBgV9uy4NzHHa1GekE11UgTzm/7LREo6KA7Q68=; c=simple/simple; d=lists.sr.ht; h=From:To:Cc:Subject:In-Reply-To:References:Date:List-Unsubscribe:List-Subscribe:List-Archive:List-Post:List-ID; q=dns/txt; s=20240113; t=1726881179; v=1; b=fK0sLh+W02iJWKvBm61bHgl1sy/tiEnYevJSWed4Y+v7qUOki5nml1FeyVVKb+wfrJTvE8xH tztlAqBoyEpMSsWUOpDyUVklN+tdjV7+N2DpS36lXbZaoCmQIKFMNrFWs0411M5PpIkgM9DAnPQ wF2FduAzNiK8EObu1nL5luQvlCwE6KOSdiW63G150f6ihEjqIvRxufm2Vr45+CxJ54FE+Fh2DDo 2d3fhrU5CUYkdpx4hb1R+m8GI3MWA7GOHWl+pgs3TUMaXDu0BKKW0M6IUr7GwSBnPrkZvs3P7xA FM1xyuPTKNPjH2b2T5UrUzbk3xNG/VN3ncSNmXUUaZDxQ== Received: from lists.sr.ht (unknown [46.23.81.154]) by mail-a.sr.ht (Postfix) with ESMTPSA id E3D6A2028C for ; Sat, 21 Sep 2024 01:12:59 +0000 (UTC) Received: from black.elm.relay.mailchannels.net (black.elm.relay.mailchannels.net [23.83.212.19]) by mail-a.sr.ht (Postfix) with ESMTPS id 0D8A820278 for <~johnnyrichard/olang-devel@lists.sr.ht>; Sat, 21 Sep 2024 01:12:58 +0000 (UTC) X-Sender-Id: hostingeremail|x-authuser|carlos@maniero.me Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 9FFE090A5CE for <~johnnyrichard/olang-devel@lists.sr.ht>; Sat, 21 Sep 2024 01:12:57 +0000 (UTC) Received: from uk-fast-smtpout10.hostinger.io (unknown [127.0.0.6]) (Authenticated sender: hostingeremail) by relay.mailchannels.net (Postfix) with ESMTPA id 0DD3B90A61B for <~johnnyrichard/olang-devel@lists.sr.ht>; Sat, 21 Sep 2024 01:12:56 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1726881177; a=rsa-sha256; cv=none; b=H9TJ0wVijV8yfVYY0U1vXArTaqDjHC6ONxbSNVrYO6pZTBYCuLs3cKhPsoJLv8a46O2LKH +QZup6TEbynxRbuRkD0irLZncLFfpb9EKI67yd6xKVhlLLnjXQ5NnZf8EeO4i92irsNccD P4g8RSewxHhQ4xP6cQ3usQKSd+65xBwIfCS61Kg/BOfdfT7/ihqSJaDMQSwMHWTsqQP0u8 kokUN7LQrZ5GFVkkIlQcro2WwNTF3LYKuvhoclQA0Igl/n1hQEnvjj9yMroFafLV11Ggib VLrfYc30cBvHqMzVZJXp3l6n7S0vEtNc0I3EZXlu5WRs6ODF7Rk/0YBMA5b1Cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1726881177; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=BCSt59NQhaJcxoPVdFUov951Wr4nVI25uvH8DRYdUF8=; b=AovKI4KUyjyB43Y0YYOduja3Mdu3SnoLx5OvlviD9sLy9BTGh/qj89U40o++0LkQMCIUB6 AsG+rmCZkEy16qbpXXO4fbUdesHthf9K1m8L7aXm5e48iiEzbAz/a3wbfFkcPLvo8J4YZk tWAviA99odZlmf4yCe7gGiFk+YaLShF1Uf0JCnABAmD3nrn4TEfGI6ruA5VtywYcR1h4LV LhtmlZHhN3OBO/N23V0a8WOyULKAEQoq6N7/batgCSF9igAPz2InlcnCoygkflfiImrh2U wVgouBLOxQ0bONcDzFXjvWOiyVPnlQRw2gfgCgvhrbs8GkfI0wig+v/7XbjqHw== ARC-Authentication-Results: i=1; rspamd-b5ccff48b-2mst5; auth=pass smtp.auth=hostingeremail smtp.mailfrom=carlos@maniero.me X-Sender-Id: hostingeremail|x-authuser|carlos@maniero.me X-MC-Relay: Neutral X-MailChannels-SenderId: hostingeremail|x-authuser|carlos@maniero.me X-MailChannels-Auth-Id: hostingeremail X-Shelf-Dime: 14876c3a42e95da3_1726881177552_1548903011 X-MC-Loop-Signature: 1726881177552:4225337740 X-MC-Ingress-Time: 1726881177552 Received: from uk-fast-smtpout10.hostinger.io (uk-fast-smtpout10.hostinger.io [145.14.155.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.120.108.164 (trex/7.0.2); Sat, 21 Sep 2024 01:12:57 +0000 From: Carlos Maniero DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=maniero.me; s=hostingermail1; t=1726881175; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BCSt59NQhaJcxoPVdFUov951Wr4nVI25uvH8DRYdUF8=; b=ObUIrAiiiARQj54sda2vHmlYOju7qyl6NjfU4gs8azL7HFGLb1WUOBjsYOiSOBpQElkQR/ mnmttf9cZc6QPsSBbbFYJkqdWDI02GUnYyPSd3VgMaMrmPLetBEkEJ47DyEnLoIpOElLvQ RDN3fyut8igQzxm7TpgZsvx3qENqz35PrA3k5jU0wKEi7Pa1ZbayCpUWohBL5xS/5lpqJT IYB8NcrMWfdGnxHsuK2F98+VxJhlTn2/4Fuf9ZJWpHM97DxVgdIN9PwYLqbFJHsUbTbNAl s3DjVHqogMzJhg+4ZtoAzf/q0HBd5eF4qFZ6TYoUNXZOZkb4nHNnIaU8I49m7w== To: ~johnnyrichard/olang-devel@lists.sr.ht Cc: Carlos Maniero , Johnny Richard Subject: [PATCH olang 1/5] map: add function to retrieve all key-value pairs Message-Id: <20240921011234.191248-2-carlos@maniero.me> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240921011234.191248-1-carlos@maniero.me> References: <20240921011234.191248-1-carlos@maniero.me> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Date: Sat, 21 Sep 2024 01:12:54 +0000 (UTC) X-CM-Analysis: v=2.4 cv=TcnEtgQh c=1 sm=1 tr=0 ts=66ee1d97 a=WwxFCuf3mf1fs3oSi6/dng==:117 a=WwxFCuf3mf1fs3oSi6/dng==:17 a=MKtGQD3n3ToA:10 a=1oJP67jkp3AA:10 a=jziKOLAnAAAA:8 a=zP6vT0ATfFvADk7iKVgA:9 a=1ljl-wuu_96014yfT5Vk:22 a=BXDaF_L80NY05PYiAFlV:22 X-CM-Envelope: MS4xfEnWZhDpzivkwAS7CGn1s41VlBBzPIQt4RzJG2M3PfUy6HurA48f9dM2zLPzC7/KZipe1PNy2wkjA9pP+pFOTRy8KSxW77lprhBgkb1/GW81LvRxxwAw g7cwsN12llWrVyJnpfQ70oIFZihPGGdmshaX/W7ShHXfep5jfeKe8P0WnuS40kChqZAhdxwcMPs2jiJm2Uc0UCH3EqptgzURbF3Tpsxay9sr7VYC+lsEbx0Z RBwb9NkYh1LEwUz2mGtXyN3m82s8vtNbxGx7E0RyIxk= X-AuthUser: carlos@maniero.me X-Sourcehut-Patchset-Status: UNKNOWN List-Unsubscribe: List-Subscribe: List-Archive: Archived-At: List-Post: List-ID: ~johnnyrichard/olang-devel <~johnnyrichard/olang-devel.lists.sr.ht> Sender: ~johnnyrichard/olang-devel <~johnnyrichard/olang-devel@lists.sr.ht> X-Migadu-Flow: FLOW_IN X-Migadu-Country: NL X-Migadu-Spam-Score: -0.16 X-Spam-Score: -0.16 X-Migadu-Queue-Id: 1E39B33647 X-Migadu-Scanner: mx10.migadu.com X-TUID: q5F4SdIWh8yq Signed-off-by: Carlos Maniero Signed-off-by: Johnny Richard --- src/map.c | 17 +++++++++++++++++ src/map.h | 10 ++++++++++ tests/unit/map_test.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/src/map.c b/src/map.c index 6665e18..a6bc3a3 100644 --- a/src/map.c +++ b/src/map.c @@ -80,6 +80,8 @@ bool map_put(map_t *map, char *key, void *value) { assert(map && key); + map->size++; + uint32_t hash = u32_fnv1a_hash(key); map_entry_t *entry = map->entries + map_get_index(map, hash); @@ -126,6 +128,21 @@ map_get_index(map_t *map, uint32_t hash) return hash & capacity_mask; } +void +map_get_kvs(map_t *map, map_kv_t **kvs) +{ + size_t index = 0; + + for (size_t j = 0; j < map->capacity; ++j) { + map_entry_t *entry = map->entries + j; + + while (entry != NULL && entry->key != NULL) { + kvs[index++] = (map_kv_t *)entry; + entry = entry->next; + } + } +} + static char * _strdup(const char *s, arena_t *arena) { diff --git a/src/map.h b/src/map.h index 123ad4d..6f8681c 100644 --- a/src/map.h +++ b/src/map.h @@ -37,8 +37,15 @@ typedef struct map arena_t *arena; map_entry_t *entries; size_t capacity; + size_t size; } map_t; +typedef struct map_kv +{ + char *key; + void *value; +} map_kv_t; + typedef struct map_entry { char *key; @@ -56,4 +63,7 @@ map_put(map_t *map, char *key, void *value); void * map_get(map_t *map, char *key); +void +map_get_kvs(map_t *map, map_kv_t **kvs); + #endif /* MAP_H */ diff --git a/tests/unit/map_test.c b/tests/unit/map_test.c index 449bca6..9497c7c 100644 --- a/tests/unit/map_test.c +++ b/tests/unit/map_test.c @@ -49,6 +49,7 @@ test_map_put_and_get(const MunitParameter params[], void *user_data_or_fixture) map_put(map, "n1", (void *)&n1); map_put(map, "n2", (void *)&n2); + assert_int(map->size, ==, 2); assert_int(*((int *)map_get(map, "n1")), ==, n1); assert_int(*((int *)map_get(map, "n2")), ==, n2); @@ -61,6 +62,35 @@ test_map_put_and_get(const MunitParameter params[], void *user_data_or_fixture) return MUNIT_OK; } +static MunitResult +test_map_get_kvs(const MunitParameter params[], void *user_data_or_fixture) +{ + arena_t arena = arena_new(MAP_TEST_ARENA_CAPACITY); + map_t *map = map_new(&arena); + + int n1 = 1; + int n2 = 2; + + map_put(map, "n1", (void *)&n1); + map_put(map, "n2", (void *)&n2); + + assert_int(map->size, ==, 2); + + map_kv_t map_kvs[map->size]; + + map_get_kvs(map, (map_kv_t **)map_kvs); + + assert_string_equal(map_kvs[0].key, "n1"); + assert_int(*((int *)(map_kvs[0].value)), ==, 1); + + assert_string_equal(map_kvs[1].key, "n2"); + assert_int(*((int *)(map_kvs[1].value)), ==, 2); + + arena_free(&arena); + + return MUNIT_OK; +} + static MunitTest tests[] = { { "/test_create_new", test_create_new, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, { "/test_map_put_and_get", test_map_put_and_get, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, -- 2.34.1