void GDNativeLibrary::set_config_file(Ref<ConfigFile> p_config_file) { set_singleton(p_config_file->get_value("general", "singleton", default_singleton)); set_load_once(p_config_file->get_value("general", "load_once", default_load_once)); set_symbol_prefix(p_config_file->get_value("general", "symbol_prefix", default_symbol_prefix)); set_reloadable(p_config_file->get_value("general", "reloadable", default_reloadable)); String entry_lib_path; { List<String> entry_keys; if (p_config_file->has_section("entry")) p_config_file->get_section_keys("entry", &entry_keys); for (List<String>::Element *E = entry_keys.front(); E; E = E->next()) { String key = E->get(); Vector<String> tags = key.split("."); bool skip = false; for (int i = 0; i < tags.size(); i++) { bool has_feature = OS::get_singleton()->has_feature(tags[i]); if (!has_feature) { skip = true; break; } } if (skip) { continue; } entry_lib_path = p_config_file->get_value("entry", key); break; } } Vector<String> dependency_paths; { List<String> dependency_keys; if (p_config_file->has_section("dependencies")) p_config_file->get_section_keys("dependencies", &dependency_keys); for (List<String>::Element *E = dependency_keys.front(); E; E = E->next()) { String key = E->get(); Vector<String> tags = key.split("."); bool skip = false; for (int i = 0; i < tags.size(); i++) { bool has_feature = OS::get_singleton()->has_feature(tags[i]); if (!has_feature) { skip = true; break; } } if (skip) { continue; } dependency_paths = p_config_file->get_value("dependencies", key); break; } } current_library_path = entry_lib_path; current_dependencies = dependency_paths; }
#include "dryad_srtl.h" SNnode * find_last_sorted(SNnode * l) _(requires srtl(l)) _(ensures srtl(l)) _(ensures srtl_lseg(l, \result) && \oset_disjoint(srtl_lseg_reach(l, \result), srtl_reach(\result))) // _(ensures \srtlsegStar(l, \result)) _(ensures srtl_reach(l) == \oset_union(srtl_lseg_reach(l, \result), \oset_singleton(\result))) _(ensures srtl(\result)) _(ensures \result == NULL || \result->next == NULL) _(ensures \oset_subset(srtl_reach(\result), srtl_reach(l))) _(ensures \oset_subset(srtl_lseg_reach(l, \result), srtl_reach(l))) _(ensures \intset_le_one2(sll_keys(l), \result->key)) _(ensures srtl_reach(l) == \old(srtl_reach(l))) _(ensures sll_keys(l) == \old(sll_keys(l))) _(ensures l != NULL ==> \result != NULL) _(ensures l != NULL ==> srtl_reach(\result) == \oset_singleton(\result)) _(ensures l != NULL ==> \intset_in(\result->key, sll_keys(l))) _(ensures l != NULL ==> sll_keys(\result) == \intset_singleton(\result->key)) ; _(dryad) SNnode * concat_sorted(SNnode * l1, SNnode * l2) _(requires srtl(l1) && srtl(l2) && \oset_disjoint(sll_reach(l1), sll_reach(l2))) _(requires l2 != NULL ==> \intset_le_one2(sll_keys(l1), l2->key)) _(ensures srtl(\result)) _(ensures sll_keys(\result) == \intset_union(\old(sll_keys(l1)), \old(sll_keys(l2)))) { if (l2 != NULL) { if (l1 != NULL) {
#include "dryad_treap.h" _(logic \bool mutable_treap(BNode * x) = x != NULL ==> \mutable(x) && \writable(x)) _(dryad) BNode * treap_remove_root_rec(BNode * x) _(requires x != NULL) _(requires treap(x)) _(requires \intset_lt(treap_keys(x->left), treap_keys(x->right))) _(requires \intset_disjoint(treap_prios(x->left), treap_prios(x->right))) _(requires \intset_disjoint(treap_keys(x->left), treap_keys(x->right))) _(ensures treap(\result)) _(ensures \intset_subset(treap_prios(\result), \old(treap_prios(x)))) _(ensures treap_reach(\result) == \oset_diff(\old(treap_reach(x)), \oset_singleton(x))) _(ensures treap_keys(\result) == \intset_diff(\old(treap_keys(x)), \intset_singleton(x->key))) _(ensures treap_keys(\result) == \intset_union(\old(treap_keys(x->left)), \old(treap_keys(x->right)))) _(ensures treap_prios(\result) == \intset_union(\old(treap_prios(x->left)), \old(treap_prios(x->right)))) { _(assume mutable_treap(x)) _(assume \malloc_root(x)) if(x->left == NULL && x->right == NULL) { free(x); return NULL; } else if (x->left == NULL) { BNode * right = x->right; free(x); return right; } else if (x->right == NULL) { BNode * left = x->left; free(x); return left;