Mercurial > hg > Gears > Gears
changeset 738:0b8e69ff20de
add metaDataGear API
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 15 Dec 2020 19:29:29 +0900 |
parents | ff5c5ab7b95f |
children | e0c7ca60108c |
files | src/parallel_execution/examples/pop_and_push/StackTestImpl3.cbc src/parallel_execution/generate_context.pl src/parallel_execution/lib/Gears/Context/Template.pm src/parallel_execution/plautogen/interface/Meta.h |
diffstat | 4 files changed, 27 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/examples/pop_and_push/StackTestImpl3.cbc Tue Dec 15 14:08:30 2020 +0900 +++ b/src/parallel_execution/examples/pop_and_push/StackTestImpl3.cbc Tue Dec 15 19:29:29 2020 +0900 @@ -12,6 +12,11 @@ __code insertTest1(struct StackTestImpl3* stackTest, struct Stack* stack, __code next(...)) { String* str = &ALLOCATE(context, String)->String; str->size = 99; + Meta* secondeMeta = (Meta*)(context->heapStart + (sizeof(Meta)*2)); + printf("seconde: %d\n", secondeMeta->type); + Meta* prevMeta = GET_PREV_META(str); + printf("prev: %d\n", prevMeta->type); + printf("str: %d\n", GET_TYPE(str)); goto stack->push((union Data*)str, insertTest2); }
--- a/src/parallel_execution/generate_context.pl Tue Dec 15 14:08:30 2020 +0900 +++ b/src/parallel_execution/generate_context.pl Tue Dec 15 19:29:29 2020 +0900 @@ -235,6 +235,8 @@ ${context_name}\->data = NEWN(ALLOCATE_SIZE, union Data*); ${context_name}\->heapStart = NEWN(${context_name}\->heapLimit, char); ${context_name}\->heap = ${context_name}\->heapStart; + ${context_name}\->metaDataStart = NEWN(ALLOCATE_SIZE, struct Meta*); + ${context_name}\->metaData = ${context_name}\->metaDataStart; // ${context_name}\->codeNum = Exit; $code_init
--- a/src/parallel_execution/lib/Gears/Context/Template.pm Tue Dec 15 14:08:30 2020 +0900 +++ b/src/parallel_execution/lib/Gears/Context/Template.pm Tue Dec 15 19:29:29 2020 +0900 @@ -27,6 +27,9 @@ meta->size = sizeof(dseg);\ meta->len = 1;\ context->heap += sizeof(Meta);\ + meta->data = context->heap; \ + *context->metaData = meta; \ + context->metaData++; \ context->data[D_##dseg] = context->heap; context->heap += sizeof(dseg); (dseg *)context->data[D_##dseg]; }) #define ALLOC_DATA_TYPE(context, dseg, t) ({\ @@ -35,6 +38,9 @@ meta->size = sizeof(t);\ meta->len = 1;\ context->heap += sizeof(Meta);\ + meta->data = context->heap; \ + *context->metaData = meta; \ + context->metaData++; \ context->data[D_##dseg] = context->heap; context->heap += sizeof(t); (t *)context->data[D_##dseg]; }) #define ALLOCATE(context, t) ({ \ @@ -45,6 +51,9 @@ meta->type = D_##t; \ meta->size = sizeof(t); \ meta->len = 1;\ + meta->data = data; \ + *context->metaData = meta; \ + context->metaData++; \ data; }) #define ALLOCATE_ARRAY(context, t, length) ({ \ @@ -55,6 +64,9 @@ meta->type = D_##t; \ meta->size = sizeof(t)*length; \ meta->len = length; \ + meta->data = data; \ + *context->metaData = meta; \ + context->metaData++; \ data; }) #define ALLOCATE_PTR_ARRAY(context, dseg, length) ({\ @@ -65,6 +77,9 @@ meta->type = D_##dseg; \ meta->size = sizeof(dseg *)*length; \ meta->len = length; \ + meta->data = data; \ + *context->metaData = meta; \ + context->metaData++; \ data; }) #define ALLOCATE_DATA_GEAR(context, t) ({ \ @@ -74,12 +89,14 @@ data; }) #define ALLOC(context, t) (&ALLOCATE(context, t)->t) +#define NALLOC(t) (&ALLOCATE(context, t)->t) #define GET_META(dseg) ((Meta*)(((void*)dseg) - sizeof(Meta))) #define GET_TYPE(dseg) (GET_META(dseg)->type) #define GET_SIZE(dseg) (GET_META(dseg)->size) #define GET_LEN(dseg) (GET_META(dseg)->len) #define GET_WAIT_LIST(dseg) (GET_META(dseg)->wait) +#define GET_PREV_META(dseg) ((Meta*)(((void*)dseg) - (sizeof(Meta) * 2))) #define Gearef(context, t) (&(context)->data[D_##t]->t) @@ -110,6 +127,8 @@ int codeNum; __code (**code) (struct Context*); union Data **data; + struct Meta **metaDataStart; + struct Meta **metaData; void* heapStart; void* heap; long heapLimit;
--- a/src/parallel_execution/plautogen/interface/Meta.h Tue Dec 15 14:08:30 2020 +0900 +++ b/src/parallel_execution/plautogen/interface/Meta.h Tue Dec 15 19:29:29 2020 +0900 @@ -2,5 +2,6 @@ enum DataType type; long size; long len; + union Data* data; struct Queue* wait; // tasks waiting this dataGear; } Meta;