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;