aboutsummaryrefslogtreecommitdiff
path: root/src/name_table.h
diff options
context:
space:
mode:
authorShinya Sato <shinnya.sato@gmail.com>2022-02-09 14:35:55 +0900
committerShinya Sato <shinnya.sato@gmail.com>2022-02-09 14:35:55 +0900
commitf867b11f97b105ccb563e1157fe480ad63712df0 (patch)
tree71e6b93d0d5df6c8fb5c13258b8511e0455a55c2 /src/name_table.h
parent224274a8c7d00588ecb2471b425e249e38af90fc (diff)
parentbe334c15c2718a66378666358eaefabbda21bff9 (diff)
downloadinpla-f867b11f97b105ccb563e1157fe480ad63712df0.tar.gz
inpla-f867b11f97b105ccb563e1157fe480ad63712df0.zip
Merge branch 'develop'
Diffstat (limited to '')
-rw-r--r--src/name_table.h36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/name_table.h b/src/name_table.h
index 4bc1361..70d71cc 100644
--- a/src/name_table.h
+++ b/src/name_table.h
@@ -3,7 +3,7 @@
#include "mytype.h"
#include "id_table.h"
-
+#include "inpla.h"
/**************************************
NAME TABLE
@@ -15,13 +15,9 @@
typedef struct NameList {
- char *name; // KEY
- IDTYPE id;
+ char *name; // KEY
+ int id; // -1: no entry
- // `heap' stores a heap only of a global name,
- // that is, is kept having NULL for other nodes, such as agents.
- VALUE heap;
-
struct NameList *next;
} NameList;
@@ -35,12 +31,16 @@ void NameTable_init();
void NameTable_set_heap_id(char *key, VALUE heap, IDTYPE id);
-// Erace key entry from NameHashTable
-void NameTable_erase(char *key);
+// Set id at key entry to -1
+void NameTable_erase_id(char *key);
+
+
+int NameTable_get_id(char *key);
+void NameTable_set_id(char *key, IDTYPE id);
-VALUE NameTable_get_heap(char *key);
-IDTYPE NameTable_get_set_id(char *key);
+IDTYPE NameTable_get_set_id_with_IdTable_forAgent(char *key);
+
void NameTable_puts_all();
void NameTable_free_all();
@@ -52,4 +52,18 @@ int keynode_exists_in_another_term(VALUE keynode, VALUE *connected_from);
void global_replace_keynode_in_another_term(VALUE keynode, VALUE term);
+#ifndef THREAD
+// Mark and Sweep for error recovery
+
+/* 30bit目が 1 ならば、Garbage Collection の Mark&Sweep にて、
+ Mark されたことを意味する*/
+#define FLAG_MARKED 0x01 << 30
+#define IS_FLAG_MARKED(a) ((a) & FLAG_MARKED)
+#define SET_FLAG_MARKED(a) ((a) = ((a) | FLAG_MARKED))
+#define TOGGLE_FLAG_MARKED(a) ((a) = ((a) ^ FLAG_MARKED))
+
+void mark_allHash(void);
+#endif
+
+
#endif