diff options
author | olpc user <olpc@xo-5d-f7-86.localdomain> | 2020-01-10 14:56:27 -0800 |
---|---|---|
committer | olpc user <olpc@xo-5d-f7-86.localdomain> | 2020-01-10 14:56:27 -0800 |
commit | 26c980d302adce8e3d802cb8db8ab1c69d58ce1a (patch) | |
tree | e296225f17370c9e472660396b3a51539f76ff28 /intellect-framework-from-internet/starts/meaning-vm/level-1/sugar.hpp | |
parent | 2e01fed206e46a669ba56f57b4b943cfe661a0f1 (diff) | |
parent | c8bb547bea279af2bb48c13260f98aa8add07131 (diff) | |
download | standingwithresilience-26c980d302adce8e3d802cb8db8ab1c69d58ce1a.tar.gz standingwithresilience-26c980d302adce8e3d802cb8db8ab1c69d58ce1a.zip |
Merge branch 'intellect-framework-from-internet'
Diffstat (limited to 'intellect-framework-from-internet/starts/meaning-vm/level-1/sugar.hpp')
-rw-r--r-- | intellect-framework-from-internet/starts/meaning-vm/level-1/sugar.hpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/intellect-framework-from-internet/starts/meaning-vm/level-1/sugar.hpp b/intellect-framework-from-internet/starts/meaning-vm/level-1/sugar.hpp new file mode 100644 index 0000000..5ebf01c --- /dev/null +++ b/intellect-framework-from-internet/starts/meaning-vm/level-1/sugar.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include "common.hpp" +#include "ref.hpp" + +#include <string> +#include <sstream> + +namespace intellect { +namespace level1 { + +ref a(ref group); +ref an(ref group); +ref a(ref group, ref name); +ref an(ref group, ref name); + +bool isanonymous(ref topic); +ref movetoname(ref anonymous, ref name); + +namespace internal { + template <typename... T> + void init_ref_names(std::string names, T &... refrefs) + { + std::stringstream ss(names); + ref* refptrs[] = {&static_cast<ref&>(refrefs)...}; + for (std::size_t i = 0; i < sizeof...(refrefs); ++ i) { + std::string name; + ss >> name; + if (name[name.size() - 1] == ',') { + name = name.substr(0, name.size() - 1); + } + refptrs[i]->ptr() = ref(name).ptr(); + } + } +} + +#define decl(r) \ + ref r(#r) + +#define decls(...) \ + ref __VA_ARGS__; \ + intellect::level1::internal::init_ref_names(#__VA_ARGS__, __VA_ARGS__) + +} +} |