d954103ce44f797024133d41f2189e37c97bc4ca
[lunaix-os.git] / lunaix-os / includes / lunaix / ds / hstr.h
1 #ifndef __LUNAIX_HSTR_H
2 #define __LUNAIX_HSTR_H
3
4 #include <lib/hash.h>
5
6 #define HSTR_FULL_HASH 32
7
8 struct hstr
9 {
10     u32_t hash;
11     u32_t len;
12     const char* value;
13 };
14
15 #define HSTR(str, length)                                                      \
16     (struct hstr)                                                              \
17     {                                                                          \
18         .len = (length), .value = (str)                                        \
19     }
20
21 #define HHSTR(str, length, strhash)                                            \
22     (struct hstr)                                                              \
23     {                                                                          \
24         .len = (length), .value = (str), .hash = (strhash)                     \
25     }
26
27 #define HSTR_EQ(str1, str2) ((str1)->hash == (str2)->hash)
28
29 inline void
30 hstr_rehash(struct hstr* hash_str, u32_t truncate_to)
31 {
32     hash_str->hash = strhash_32(hash_str->value, truncate_to);
33 }
34
35 void
36 hstrcpy(struct hstr* dest, struct hstr* src);
37
38 #endif /* __LUNAIX_HSTR_H */