diff final_main/src/akashaMeta.c @ 0:83f997abf3b5

first commit
author e155702
date Thu, 14 Feb 2019 16:51:50 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/final_main/src/akashaMeta.c	Thu Feb 14 16:51:50 2019 +0900
@@ -0,0 +1,31 @@
+__code meta(struct Context* context, enum Code next) {
+    struct Iterator* iter = &context->data[Iter]->iterator;
+
+    switch (context->prev) {
+        case GoToPreviousDepth:
+            if (iter->iteratedPointDataNum == 0) break;
+            if (iter->iteratedPointHeap == NULL) break;
+
+            unsigned int diff =(unsigned long)context->heap - (unsigned long)iter->iteratedPointHeap;
+            memset(iter->iteratedPointHeap, 0, diff);
+            context->dataNum = iter->iteratedPointDataNum;
+            context->heap    = iter->iteratedPointHeap;
+            break;
+        default:
+            break;
+    }
+    switch (next) {
+        case PutAndGoToNextDepth:   // with assert check
+            if (context->prev == GoToPreviousDepth) break;
+            if (iter->previousDepth == NULL)        break;
+            iter->previousDepth->iteratedPointDataNum = context->dataNum;
+            iter->previousDepth->iteratedPointHeap    = context->heap;
+            break;
+        default:
+            break;
+    }
+
+    context->prev = next;
+    goto (context->code[next])(context);
+}
+