CK_HS_PUT_UNIQUE(3)

πŸ’– CK_HS_PUT_UNIQUE(3) πŸ’–

okay bestie, welcome to ck_hs_put_unique β€” the manual page, the moment, the main character of hash set inserts. this one lives in the Concurrency Kit library, aka libck, and you link it with -lck. slay. let's get into it 🫢


🌸 NAME 🌸

ck_hs_put_unique β€” unconditionally store a unique key into a hash set. no cap. it just does the thing πŸ’…


πŸŽ€ LIBRARY πŸŽ€

Concurrency Kit (libck, -lck) ✨


πŸ¦‹ SYNOPSIS πŸ¦‹

#include <ck_hs.h>

bool
ck_hs_put_unique(ck_hs_t *hs, unsigned long hash, const void *key);

like. look at that signature. it's giving confident. it returns a bool, it takes a pointer to a ck_hs_t, it wants an unsigned long hash, and it wants a const void *key. periodt 🌈


πŸ’œ DESCRIPTION πŸ’œ

so basically, the ck_hs_put_unique(3) function stores the key you pass in via the key argument into the hash set that hs points to. 🌸

and here's the little detail that matters, bestie: the key in key is expected to already have the hash value you pass in through the hash argument β€” and you get that number from the CK_HS_HASH(3) macro. it was previously generated with it, iykyk. don't just make one up, okay? πŸ™ˆ

now, if the call to ck_hs_put(3) was successful, then the key in key was successfully stored in the hash set pointed to by hs. πŸ”₯

⚠️ but listen. the function will cause undefined behavior if a key with an equivalent value is already present in the hash set. that's literally the whole point of the "unique" in the name, and it is not playing around πŸ’€

if what you actually want is replacement semantics β€” like, swap the old one out, put the new one in β€” then go see the ck_hs_set(3) function instead. that's your girl for that job πŸ‘‘


✨ RETURN VALUES ✨

upon successful completion, ck_hs_put_unique(3) returns true πŸ’– and otherwise it returns false on failure. simple. iconic. no notes.


πŸ’… ERRORS πŸ’…

  • behavior is undefined if key or hs are uninitialized. please initialize your stuff, bestie, i'm begging 😭
  • the function will also return false if the hash set could not be enlarged to accomodate key insertion. (yes, the original says "accomodate" β€” we don't fix typos in this house, we respect the canon πŸŽ€)
  • the function will result in undefined behavior if it's called for an already inserted key value. do not do this. not even once. πŸ™…β€β™€οΈ

🌈 SEE ALSO 🌈

additional information is available at http://concurrencykit.org/ ⭐


and that's the whole page, bestie!! 🧚 this one came from the Concurrency Kit source, dated December 7, 2013 β€” a true vintage baddie πŸ’– go forth and store your unique keys responsibly, ily, bye 🫢🌸✨

πŸ“¦ where this page comes from