summaryrefslogtreecommitdiff
path: root/intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp
diff options
context:
space:
mode:
authorolpc user <olpc@xo-5d-f7-86.localdomain>2020-01-10 14:55:19 -0800
committerolpc user <olpc@xo-5d-f7-86.localdomain>2020-01-10 14:55:19 -0800
commitc8bb547bea279af2bb48c13260f98aa8add07131 (patch)
tree7f64265d514dc50427d2e5d8a70e09a46927dfbd /intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp
parent5601d1f3324c30651ad3f264ac2d6e7f12ea8b34 (diff)
downloadstandingwithresilience-c8bb547bea279af2bb48c13260f98aa8add07131.tar.gz
standingwithresilience-c8bb547bea279af2bb48c13260f98aa8add07131.zip
move intellect-framework-from-internet into folder
Diffstat (limited to 'intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp')
-rw-r--r--intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp b/intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp
new file mode 100644
index 0000000..644f4b8
--- /dev/null
+++ b/intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp
@@ -0,0 +1,32 @@
+#pragma once
+
+#include "common.hpp"
+#include "funcs.hpp"
+#include "../level-1/baseref.hpp"
+
+#include <functional>
+
+namespace intellect {
+namespace level2 {
+
+template <typename ref>
+struct baseref : public level1::baseref<ref>
+{
+ using level1::template baseref<ref>::baseref;
+
+ // thread-local context
+ static ref & context() { return level2::context(); }
+
+ template <typename... Refs>
+ ref operator()(ref first, Refs... rest) { return level2::dohabit(self, {first, rest...}); }
+ ref operator()(std::initializer_list<std::initializer_list<ref>> pairs) { return level2::dohabit(self, pairs); }
+ ref operator()() { return level2::dohabit(self); }
+
+ template <typename... Refs>
+ ref act(ref habit, Refs... rest) { return level2::dohabit(habit, {self, rest...}); }
+
+ void replace(ref other) { *self.ptr() = *other.ptr(); }
+};
+
+}
+}