123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- include "modelling.alh"
- include "primitives.alh"
- include "object_operations.alh"
- include "model_management.alh"
- String function JSON_print(model : Element):
- String result
- Element keys_m
- String v_m
- String type
- String attr_key
- Element attr_keys
- Boolean first
- Element attr_value
- result = "["
- keys_m = dict_keys(model["model"])
- first = True
- while (read_nr_out(keys_m) > 0):
- v_m = set_pop(keys_m)
- type = read_type(model["metamodel"], read_type(model, v_m))
- if (bool_or(type == "Class", type == "Association")):
- if (bool_not(first)):
- result = result + ","
- else:
- first = False
- result = result + "{"
- result = (((result + "\"id\": \"") + v_m) + "\"")
- result = (((result + ",") + "\"type\": \"") + read_type(model, v_m)) + "\""
- if (type == "Association"):
- result = (((result + ", \"__source\": \"") + reverseKeyLookup(model["model"], read_edge_src(model["model"][v_m]))) + "\"")
- result = (((result + ", \"__target\": \"") + reverseKeyLookup(model["model"], read_edge_dst(model["model"][v_m]))) + "\"")
- // Has attributes
- attr_keys = dict_keys(getAttributeList(model, v_m))
- while (0 < read_nr_out(attr_keys)):
- attr_key = set_pop(attr_keys)
- attr_value = read_attribute(model, v_m, attr_key)
- if (element_eq(attr_value, read_root())):
- result = (((result + ", \"") + attr_key) + "\": null")
- else:
- if (is_physical_boolean(attr_value)):
- if (attr_value):
- result = ((result + ", \"") + attr_key) + "\": true"
- else:
- result = ((result + ", \"") + attr_key) + "\": false"
- else:
- result = ((((result + ", \"") + attr_key) + "\": ") + cast_v2s(attr_value))
- result = result + "}"
- result = result + "]"
- return result!
- Element function input_timeout(timeout : Float):
- Float start
- start = time()
- // Do this first, such that we will always get at least the chance to push input in
- if (has_input()):
- return input()!
- // Now just try this again from time to time
- while (time() - start < timeout):
- if (has_input()):
- return input()!
- else:
- // Nothing to do, we should yield...
- sleep(0.02)
- return read_root()!
- Element function list_reverse(lst : Element):
- Element result
- result = create_node()
- Integer i
- i = list_len(lst)
- while (i > 0):
- list_append(result, list_read(lst, i))
- i = i - 1
- return result!
- Element function list_splice(lst : Element, start : Integer, end : Integer):
- Element result
- result = create_node()
- Integer i
- i = start
- while (i < end):
- list_append(result, list_read(lst, i))
- i = i + 1
- return result!
- Void function list_extend(lst : Element, ext : Element):
- Integer i
- i = 0
- while (i < list_len(ext)):
- list_append(lst, list_read(ext, i))
- i = i + 1
- return!
- Void function set_difference(set1 : Element, set2 : Element):
- set2 = set_copy(set2)
- while (read_nr_out(set2) > 0):
- set_remove(set1, set_pop(set2))
- return!
- String function get_taskname():
- log("Taskname is: " + reverseKeyLookup(read_root(), read_taskroot()))
- return reverseKeyLookup(read_root(), read_taskroot())!
|