Exemple #1
0
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;
}
Exemple #2
0
#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;