utils.alc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. include "modelling.alh"
  2. include "primitives.alh"
  3. include "object_operations.alh"
  4. include "model_management.alh"
  5. String function JSON_print(model : Element):
  6. String result
  7. Element keys_m
  8. String v_m
  9. String type
  10. String attr_key
  11. Element attr_keys
  12. Boolean first
  13. Element attr_value
  14. result = "["
  15. keys_m = dict_keys(model["model"])
  16. first = True
  17. while (read_nr_out(keys_m) > 0):
  18. v_m = set_pop(keys_m)
  19. type = read_type(model["metamodel"], read_type(model, v_m))
  20. if (bool_or(type == "Class", type == "Association")):
  21. if (bool_not(first)):
  22. result = result + ","
  23. else:
  24. first = False
  25. result = result + "{"
  26. result = (((result + "\"id\": \"") + v_m) + "\"")
  27. result = (((result + ",") + "\"type\": \"") + read_type(model, v_m)) + "\""
  28. if (type == "Association"):
  29. result = (((result + ", \"__source\": \"") + reverseKeyLookup(model["model"], read_edge_src(model["model"][v_m]))) + "\"")
  30. result = (((result + ", \"__target\": \"") + reverseKeyLookup(model["model"], read_edge_dst(model["model"][v_m]))) + "\"")
  31. // Has attributes
  32. attr_keys = dict_keys(getAttributeList(model, v_m))
  33. while (0 < read_nr_out(attr_keys)):
  34. attr_key = set_pop(attr_keys)
  35. attr_value = read_attribute(model, v_m, attr_key)
  36. if (element_eq(attr_value, read_root())):
  37. result = (((result + ", \"") + attr_key) + "\": null")
  38. else:
  39. if (is_physical_boolean(attr_value)):
  40. if (attr_value):
  41. result = ((result + ", \"") + attr_key) + "\": true"
  42. else:
  43. result = ((result + ", \"") + attr_key) + "\": false"
  44. else:
  45. result = ((((result + ", \"") + attr_key) + "\": ") + cast_v2s(attr_value))
  46. result = result + "}"
  47. result = result + "]"
  48. return result!
  49. Element function input_timeout(timeout : Float):
  50. Float start
  51. start = time()
  52. // Do this first, such that we will always get at least the chance to push input in
  53. if (has_input()):
  54. return input()!
  55. // Now just try this again from time to time
  56. while (time() - start < timeout):
  57. if (has_input()):
  58. return input()!
  59. else:
  60. // Nothing to do, we should yield...
  61. sleep(0.02)
  62. return read_root()!
  63. Element function list_reverse(lst : Element):
  64. Element result
  65. result = create_node()
  66. Integer i
  67. i = list_len(lst)
  68. while (i > 0):
  69. list_append(result, list_read(lst, i))
  70. i = i - 1
  71. return result!
  72. Element function list_splice(lst : Element, start : Integer, end : Integer):
  73. Element result
  74. result = create_node()
  75. Integer i
  76. i = start
  77. while (i < end):
  78. list_append(result, list_read(lst, i))
  79. i = i + 1
  80. return result!
  81. Void function list_extend(lst : Element, ext : Element):
  82. Integer i
  83. i = 0
  84. while (i < list_len(ext)):
  85. list_append(lst, list_read(ext, i))
  86. i = i + 1
  87. return!
  88. Void function set_difference(set1 : Element, set2 : Element):
  89. set2 = set_copy(set2)
  90. while (read_nr_out(set2) > 0):
  91. set_remove(set1, set_pop(set2))
  92. return!
  93. String function get_taskname():
  94. log("Taskname is: " + reverseKeyLookup(read_root(), read_taskroot()))
  95. return reverseKeyLookup(read_root(), read_taskroot())!