First class data visualization and communication library with embedded devices. Code is maintained at github.com/Overdrivr/Telemetry
Dependents: telemetry_car_demo telemetry_demo_FRDM-TFC telemetry_example_01 telemetry_indexed_data_demo ... more
c_api/dictionnary.cpp
- Committer:
- Overdrivr
- Date:
- 2016-04-12
- Revision:
- 7:d224bddd5405
File content as of revision 7:d224bddd5405:
#include "dictionnary.h" #include "stdlib.h" #include "stdint.h" #include "string.h" /* hash: form hash value for string s */ unsigned hash(const char * s) { unsigned hashval; for (hashval = 0; *s != '\0'; s++) hashval = *s + 31 * hashval; return hashval % HASHSIZE; } char * strdup(const char * s) /* make a duplicate of s */ { char *p; p = (char *) malloc(strlen(s)+1); /* +1 for ’\0’ */ if (p != NULL) strcpy(p, s); return p; } void init_entry(struct nlist * entry) { entry->ptr_f32 = NULL; entry->ptr_u8 = NULL; entry->ptr_u16 = NULL; entry->ptr_u32 = NULL; entry->ptr_i8 = NULL; entry->ptr_i16 = NULL; entry->ptr_i32 = NULL; entry->ptr_function = NULL; } void init_table(struct nlist ** hashtab) { uint32_t i = 0; for(i = 0 ; i < HASHSIZE ; i++) { hashtab[i] = NULL; } } /* lookup: look for s in hashtab */ struct nlist *lookup(struct nlist ** hashtab, const char * key) { struct nlist *np; for (np = hashtab[hash(key)]; np != NULL; np = np->next) { if (strcmp(key, np->key) == 0) { return np; /* found */ } } return NULL; /* not found */ } struct nlist * install(struct nlist ** hashtab, const char * key, void * ptr, ptr_type type) { struct nlist * np; unsigned hashval; if ((np = lookup(hashtab, key)) == NULL) { // Allocate new hastable entry and initialize it np = (struct nlist *) malloc(sizeof(*np)); // If allocation failed if (np == NULL || (np->key = strdup(key)) == NULL) return NULL; init_entry(np); hashval = hash(key); np->next = hashtab[hashval]; hashtab[hashval] = np; } // Set value switch(type) { case ptr_f32: np->ptr_f32 = (float *)(ptr); break; case ptr_u8: np->ptr_u8 = (uint8_t *)(ptr); break; case ptr_u16: np->ptr_u16 = (uint16_t *)(ptr); break; case ptr_u32: np->ptr_u32 = (uint32_t *)(ptr); break; case ptr_i8: np->ptr_i8 = (int8_t *)(ptr); break; case ptr_i16: np->ptr_i16 = (int16_t *)(ptr); break; case ptr_i32: np->ptr_i32 = (int32_t *)(ptr); break; case ptr_function: np->ptr_function = ptr; break; } return np; }