From c8bb547bea279af2bb48c13260f98aa8add07131 Mon Sep 17 00:00:00 2001 From: olpc user Date: Fri, 10 Jan 2020 14:55:19 -0800 Subject: move intellect-framework-from-internet into folder --- .../starts/meaning-vm/level-2/baseref.hpp | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp (limited to 'intellect-framework-from-internet/starts/meaning-vm/level-2/baseref.hpp') 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 + +namespace intellect { +namespace level2 { + +template +struct baseref : public level1::baseref +{ + using level1::template baseref::baseref; + + // thread-local context + static ref & context() { return level2::context(); } + + template + ref operator()(ref first, Refs... rest) { return level2::dohabit(self, {first, rest...}); } + ref operator()(std::initializer_list> pairs) { return level2::dohabit(self, pairs); } + ref operator()() { return level2::dohabit(self); } + + template + ref act(ref habit, Refs... rest) { return level2::dohabit(habit, {self, rest...}); } + + void replace(ref other) { *self.ptr() = *other.ptr(); } +}; + +} +} -- cgit v1.2.3