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-0/concept.cpp | 136 ---------------------------------- 1 file changed, 136 deletions(-) delete mode 100644 starts/meaning-vm/level-0/concept.cpp (limited to 'starts/meaning-vm/level-0/concept.cpp') diff --git a/starts/meaning-vm/level-0/concept.cpp b/starts/meaning-vm/level-0/concept.cpp deleted file mode 100644 index 66e5af1..0000000 --- a/starts/meaning-vm/level-0/concept.cpp +++ /dev/null @@ -1,136 +0,0 @@ -#include "concept.hpp" -#include "errors.hpp" - -using namespace intellect::level0; - -#define selfref const_cast(&self) - -concept* concept::id() -{ - return this; -} - -void concept::link(concept* type, concept* target) -{ - if (type == 0 || target == 0) { throw null_reference(); } - links.insert({type, target}); -} - -bool concept::crucial(concept* type, concept* target) -{ - auto ls = links.equal_range(type); - bool wascrucial = false; - bool wasnotcrucial = false; - for (auto l = ls.first; l != ls.second; ++ l) { - if (l->second == target) { - if (crucialparts.count(l)) { wascrucial = true; } - else { wasnotcrucial = true; } - } - } - if (wascrucial && wasnotcrucial) { throw link_type_not_unique(selfref, type); } - if ((!wascrucial) && (!wasnotcrucial)) { throw no_such_link_type(selfref, type); } - return wascrucial; -} - -void concept::setcrucial(concept* type, concept* target) -{ - auto ls = links.equal_range(type); - for (auto l = ls.first; l != ls.second; ++ l) { - if (l->second == target) { - if (!crucialparts.count(l)) { - setcrucial(l); - return; - } - } - } - throw no_such_link_type(selfref, type); -} - -void concept::unlink(concept* type, concept* target) -{ - auto ls = links.equal_range(type); - bool wascrucial = false; - for (auto l = ls.first; l != ls.second; ++ l) { - if (l->second == target) { - if (crucialparts.count(l)) { wascrucial = true; continue; } - links.erase(l); - return; - } - } - if (wascrucial) { throw crucial_link_type_target(selfref, type, target); } - throw no_such_link_type_target(selfref, type, target); -} - -void concept::unlink(concept* type) -{ - auto ls = links.equal_range(type); - if (ls.first == ls.second) { - throw no_such_link_type(selfref, type); - } - auto mid = ls.first; - ++ mid; - if (mid != ls.second) { - throw link_type_not_unique(selfref, type); - } - unlink(ls.first); -} - -void concept::unlink(decltype(links)::iterator it) -{ - if (crucialparts.count(it)) { - throw crucial_link_type_target(selfref, it->first, it->second); - } - links.erase(it++); -} - -bool concept::linked(concept* type) const -{ - return links.count(type) > 0; -} - -bool concept::linked(concept* type, concept* target) const -{ - for (concept* t : getAll(type)) { - if (t == target) { - return true; - } - } - return false; -} - -concept::array concept::getAll(concept* type) const -{ - array ret; - for ( - auto range = links.equal_range(type); - range.first != range.second; - ++ range.first - ) { - ret.emplace_back(range.first->second); - } - return ret; -} - -concept* concept::get(concept* type) const -{ - auto result = links.equal_range(type); - if (result.first == result.second) { - throw no_such_link_type(selfref, type); - } - auto test = result.first; - ++ test; - if (test != result.second) { - throw link_type_not_unique(selfref, type); - } - return result.first->second; -} - -void concept::set(concept* type, concept* target) -{ - if (linked(type)) { - unlink(type); - } - link(type, target); -} - - -- cgit v1.2.3