diff options
author | Adrian Thurston <thurston@complang.org> | 2015-01-17 12:08:59 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-01-17 12:08:59 -0500 |
commit | 986766e7b9305ceb7856a96941ce919bb3885570 (patch) | |
tree | e036c1e45dc9704014ca64b444ac27d55a228225 /src/struct.h | |
parent | 46ec944af0047c5dddd5d413a22fcea4c44c4f10 (diff) | |
download | colm-986766e7b9305ceb7856a96941ce919bb3885570.tar.gz |
object-based maps: insert and find implementation
Diffstat (limited to 'src/struct.h')
-rw-r--r-- | src/struct.h | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/struct.h b/src/struct.h index 6f447107..7ff8256b 100644 --- a/src/struct.h +++ b/src/struct.h @@ -73,19 +73,18 @@ typedef struct colm_list GenericInfo *genericInfo; } List; -#define COLM_MAP_EL_SIZE 6 typedef struct colm_map_el { - /* Must overlay Kid. */ - Tree *tree; - struct colm_map_el *next; - struct colm_map_el *prev; + Tree *key; struct colm_map_el *left, *right, *parent; long height; - Tree *key; + + struct colm_map_el *next, *prev; } MapEl; +#define COLM_MAP_EL_SIZE ( sizeof(colm_map_el) / sizeof(void*) ) + typedef struct colm_map { short id; @@ -94,9 +93,7 @@ typedef struct colm_map void *buffer[8]; - MapEl *head; - MapEl *tail; - MapEl *root; + struct colm_map_el *head, *tail, *root; long treeSize; GenericInfo *genericInfo; } Map; @@ -122,12 +119,15 @@ struct colm_struct *colm_struct_inbuilt( struct colm_program *prg, int size, #define colm_struct_container( el, field ) \ ((void*)el) - (field * sizeof(void*)) - sizeof(struct colm_struct) -#define colm_list_el_container( prg, el, genId ) \ +#define colm_generic_el_container( prg, el, genId ) \ colm_struct_container( el, prg->rtd->genericInfo[genId].elOffset ) #define colm_struct_to_list_el( prg, obj, genId ) \ colm_struct_get_addr( obj, ListEl*, prg->rtd->genericInfo[genId].elOffset ) +#define colm_struct_to_map_el( prg, obj, genId ) \ + colm_struct_get_addr( obj, MapEl*, prg->rtd->genericInfo[genId].elOffset ) + Parser *colm_parser_new( struct colm_program *prg, GenericInfo *gi ); Stream *colm_stream_new( struct colm_program *prg ); Stream *colm_stream_new_struct( struct colm_program *prg ); @@ -141,6 +141,8 @@ ListEl *colm_list_detach_head( List *list ); long colm_list_length( List *list ); Map *colm_map_new( struct colm_program *prg ); +struct colm_struct *colm_map_el_get( struct colm_program *prg, + MapEl *mapEl, Word genId, Word field ); #define STRUCT_INBUILT_ID -1 |