mirror of
https://github.com/Jous99/F4MP.git
synced 2026-01-12 08:40:53 +01:00
69 lines
1.9 KiB
C
69 lines
1.9 KiB
C
#define ZPL_IMPLEMENTATION
|
|
#define ZPL_NANO
|
|
#include "zpl.h"
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//
|
|
// Hash table type and function declaration, call: ZPL_TABLE_DECLARE(PREFIX, NAME, FUNC, VALUE)
|
|
// Hash table function definitions, call: ZPL_TABLE_DEFINE(NAME, FUNC, VALUE)
|
|
//
|
|
// PREFIX - a prefix for function prototypes e.g. extern, static, etc.
|
|
// NAME - Name of the Hash Table
|
|
// FUNC - the name will prefix function names
|
|
// VALUE - the type of the value to be stored
|
|
//
|
|
|
|
|
|
// NOTE(ZaKlaus): Declare user structure
|
|
typedef struct user {
|
|
zpl_string name;
|
|
i64 score;
|
|
} user;
|
|
|
|
// NOTE(ZaKlaus): Declare hash table of type user
|
|
ZPL_TABLE_DECLARE(extern, userbl, tbl_user_, user);
|
|
|
|
// NOTE(ZaKlaus): Define hash table functions
|
|
// Place exactly in __ONE__ source file!
|
|
ZPL_TABLE_DEFINE(userbl, tbl_user_, user);
|
|
|
|
int
|
|
main(void) {
|
|
|
|
// NOTE(ZaKlaus): Create new hash table
|
|
userbl users;
|
|
tbl_user_init(&users, zpl_heap_allocator());
|
|
|
|
// NOTE(ZaKlaus): Create hash key
|
|
u64 key = 0x29;
|
|
|
|
// NOTE(ZaKlaus): Create new user
|
|
user user1;
|
|
user1.name = zpl_string_make(zpl_heap_allocator(), "John Doe");
|
|
user1.score = 2674;
|
|
|
|
// NOTE(ZaKlaus): Add user to the hash table
|
|
tbl_user_set(&users, key, user1);
|
|
|
|
// NOTE(ZaKlaus): Create another user
|
|
user user2;
|
|
user2.name = zpl_string_make(zpl_heap_allocator(), "Steve L.");
|
|
user2.score = 303312;
|
|
|
|
// NOTE(ZaKlaus): Add user to the hash table
|
|
tbl_user_set(&users, key+0xDEADBEEF, user2);
|
|
|
|
// NOTE(ZaKlaus): Retrieve the first user
|
|
user user3 = *tbl_user_get(&users, key);
|
|
|
|
// NOTE(ZaKlaus): Make sure the user is identical to the first user
|
|
ZPL_ASSERT(user3.score == user1.score);
|
|
|
|
// NOTE(ZaKlaus): Release resources
|
|
zpl_string_free(user1.name);
|
|
zpl_string_free(user2.name);
|
|
|
|
tbl_user_destroy(&users);
|
|
|
|
return 0;
|
|
}
|