From deebd0eaa8347e5a6fea577007e5a69744ef7572 Mon Sep 17 00:00:00 2001 From: rhuibertsjr Date: Tue, 4 Jun 2024 15:31:35 +0200 Subject: [PATCH] Added: Gazoo-specific ID --- src/base.h | 3 +++ src/hash_store.c | 17 +++++---------- src/hash_store.h | 8 ++++++- src/keywords.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++-- src/main.c | 12 +++++------ 5 files changed, 73 insertions(+), 21 deletions(-) diff --git a/src/base.h b/src/base.h index 1c5716e..250fac6 100644 --- a/src/base.h +++ b/src/base.h @@ -32,6 +32,9 @@ typedef uint64_t b64; #define MIN(A,B) (((A)<(B))?(A):(B)) +#define STRINGIFY_(S) #S +#define STRINGIFY(S) STRINGIFY_(S) + #define array_count(a) (sizeof(a) / sizeof((a)[0])) //= rhjr: linked-list diff --git a/src/hash_store.c b/src/hash_store.c index 3ca91e1..35831ce 100644 --- a/src/hash_store.c +++ b/src/hash_store.c @@ -3,14 +3,7 @@ internal Key hash_store_hash(String8 data) { Key result = {0}; - - u64 hash = 5381; - for(u64 i = 0; i < data.length; i += 1) - { - hash = ((hash << 5) + hash) + data.content[i]; - } - - memory_copy(&result, &hash, sizeof(u64)); + blake2b((u8*) &result.U16[0], sizeof(u32), data.content, data.length, 0, 0); return result; } @@ -23,7 +16,7 @@ hash_store_initialize(void) Table *table = arena_push(arena, Table); table->arena = arena; table->str8_arena = str8_arena; - table->slots_count = 200; + table->slots_count = 230; table->slots = arena_push_array(arena, TableSlot, table->slots_count); @@ -34,7 +27,7 @@ internal Key hash_store_string8_to_key(Table *table, String8 data) { Key result = hash_store_hash(data); - u64 slot_idx = result.U32[0]%table->slots_count; + u64 slot_idx = result.U16[0]%table->slots_count; TableNode *node = arena_push(table->arena, TableNode); node->data.content = arena_push_array(table->str8_arena, char, data.length); @@ -54,12 +47,12 @@ internal String8 hash_store_string8_from_key(Table *table, Key key) { String8 result = {0}; - u64 slot_idx = key.U32[0]%table->slots_count; + u64 slot_idx = key.U16[0]%table->slots_count; TableSlot *slot = &table->slots[slot_idx]; for (TableNode *n = slot->first; n != 0; n = n->next) { - if (key.U32[1] == n->key.U32[1]) + if (key.U16[1] == n->key.U16[1]) { result = n->data; break; diff --git a/src/hash_store.h b/src/hash_store.h index d4bbf46..f7f213b 100644 --- a/src/hash_store.h +++ b/src/hash_store.h @@ -1,10 +1,16 @@ #ifndef HASH_TABLE_H #define HASH_TABLE_H +#if !defined(BLAKE2_H) +#define HAVE_SSE2 +#include "thirdparty/blake2/blake2.h" +#include "thirdparty/blake2/blake2b.c" +#endif + typedef struct Key Key; struct Key { - u32 U32[2]; + u16 U16[2]; }; typedef struct TableNode TableNode; diff --git a/src/keywords.h b/src/keywords.h index 0d41ff3..733c61f 100644 --- a/src/keywords.h +++ b/src/keywords.h @@ -13,7 +13,10 @@ internal String8 keywords[] = { str8_lit_comp("precondities"), str8_lit_comp("product configuratie"), str8_lit_comp("toestand"), - //... + + str8_lit_comp("luchtwasser pH"), + str8_lit_comp("luchtwasser EC"), + str8_lit_comp("luchtwasser spuiteller"), //- rhjr: testcase procedure str8_lit_comp("testprocedure"), @@ -25,21 +28,68 @@ internal String8 keywords[] = { str8_lit_comp("luchtwasser vultijd"), str8_lit_comp("luchtwasser sproeiklep"), str8_lit_comp("luchtwasser wasserpomp"), + str8_lit_comp("luchtwasser spuiklep"), + str8_lit_comp("spuitijd teller"), //- rhjr: acties str8_lit_comp("luchtwasser"), str8_lit_comp("maximale-vlotter"), str8_lit_comp("minimale-vlotter"), + str8_lit_comp("verhoog"), //- rhjr: values str8_lit_comp("wassen"), str8_lit_comp("vullen"), + str8_lit_comp("spuien"), + + str8_lit_comp("start"), str8_lit_comp("open"), str8_lit_comp("dicht"), str8_lit_comp("aan"), - str8_lit_comp("uit") + str8_lit_comp("uit"), + + //- rhjr: unique + str8_lit_comp("luchtwasser EC spui-waarde"), + str8_lit_comp("luchtwasser maximale spuitijd") }; +typedef enum { + TESTCASE = 0xF8E8, + IDENTIFICATIECODE = 0x78b0, + TITEL = 0x98d2, + BESCHRIJVING = 0x19fd, + PRECONDITIES = 0x91fb, + PRODUCT_CONFIGURATIE = 0xf925, + TOESTAND = 0xcfd8, + LUCHTWASSER_PH = 0x543f, + LUCHTWASSER_EC = 0x031a, + LUCHTWASSER_SPUITELLER = 0xadae, + TESTPROCEDURE = 0x614f, + LUCHTWASSER_VENTILATOR = 0x70e6, + LUCHTWASSER_WATERKLEP = 0xa991, + LUCHTWASSER_TOESTAND = 0x63f8, + LUCHTWASSER_VULTIJD = 0xb6db, + LUCHTWASSER_SPROEIKLEP = 0x39f5, + LUCHTWASSER_WASSERPOMP = 0x159f, + LUCHTWASSER_SPUIKLEP = 0x93d1, + SPUITIJD_TELLER = 0xdaf9, + LUCHTWASSER = 0x0529, + MAXIMALE_VLOTTER = 0xa318, + MINIMALE_VLOTTER = 0xab74, + VERHOOG = 0x4e7d, + WASSEN = 0xfbcb, + VULLEN = 0xa2c3, + SPUIEN = 0xbe62, + START = 0xf5b3, + OPEN = 0x1690, + DICHT = 0x9be6, + AAN = 0x5f2e, + UIT = 0x6fe8, + LUCHTWASSER_EC_SPUI_WAARDE = 0x996a, + LUCHTWASSER_MAXIMALE_SPUITIJD = 0xbacb, +} Translation; + + #endif diff --git a/src/main.c b/src/main.c index 32d0a09..9b41ca2 100644 --- a/src/main.c +++ b/src/main.c @@ -18,15 +18,15 @@ main(void) for (u64 idx = 0; idx < list_size; idx += 1) { - if (string8_match(keywords[idx], str8_lit("luchtwasser toestand"))){ - int x = 0; - } - Key key = hash_store_string8_to_key(table, keywords[idx]); String8 string = hash_store_string8_from_key(table, key); - printf("%.*s\n", (i32) string.length, string.content); - printf("str8 arena: %lld - arena %lld\n", table->str8_arena->current->offset, table->arena->current->offset); + Translation trans = key.U16[0]; + + printf("%.*s =\t %04x - %04x - %u\n", + (i32) string.length, string.content, key.U16[0], trans, + ((key.U16[0] == trans) ? 1 : 0) + ); } return 0;