summaryrefslogtreecommitdiff
path: root/src/struct.h
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-01-17 12:08:59 -0500
committerAdrian Thurston <thurston@complang.org>2015-01-17 12:08:59 -0500
commit986766e7b9305ceb7856a96941ce919bb3885570 (patch)
treee036c1e45dc9704014ca64b444ac27d55a228225 /src/struct.h
parent46ec944af0047c5dddd5d413a22fcea4c44c4f10 (diff)
downloadcolm-986766e7b9305ceb7856a96941ce919bb3885570.tar.gz
object-based maps: insert and find implementation
Diffstat (limited to 'src/struct.h')
-rw-r--r--src/struct.h22
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