|
@@ -37,7 +37,7 @@ Element function filter(model : Element, set : Element, attribute_name : String,
|
|
|
String key
|
|
|
Element result
|
|
|
|
|
|
- result = create_node()
|
|
|
+ result = set_create()
|
|
|
while (set_len(set) > 0):
|
|
|
key = set_pop(set)
|
|
|
if (value_eq(read_attribute(model, key, attribute_name), attribute_value)):
|
|
@@ -50,7 +50,7 @@ Element function filter_exists(model : Element, set : Element, attribute_name :
|
|
|
String key
|
|
|
Element result
|
|
|
|
|
|
- result = create_node()
|
|
|
+ result = set_create()
|
|
|
while (set_len(set) > 0):
|
|
|
key = set_pop(set)
|
|
|
if (element_neq(read_attribute(model, key, attribute_name), read_root())):
|
|
@@ -62,7 +62,7 @@ Element function expand_current_state(model : Element, state : String, data : El
|
|
|
// Find the hierarchy of all current states, and select those that contain the currently selected state
|
|
|
Element result
|
|
|
Element current_states
|
|
|
- result = create_node()
|
|
|
+ result = set_create()
|
|
|
current_states = set_copy(data["current_class_handle"]["states"])
|
|
|
|
|
|
Element hierarchy
|
|
@@ -94,7 +94,7 @@ Element function expand_initial_state(model : Element, state : String, data : El
|
|
|
else:
|
|
|
// Probably just an atomic, so return this one only
|
|
|
Element result
|
|
|
- result = create_node()
|
|
|
+ result = set_create()
|
|
|
set_add(result, state)
|
|
|
return result!
|
|
|
|
|
@@ -115,7 +115,7 @@ Element function expand_parallel_state(model : Element, parallel_state : String,
|
|
|
Element expanded_children
|
|
|
|
|
|
children = allAssociationDestinations(model, parallel_state, "SCCD/parallel_children")
|
|
|
- result = create_node()
|
|
|
+ result = set_create()
|
|
|
|
|
|
while (set_len(children) > 0):
|
|
|
set_merge(result, expand_initial_state(model, set_pop(children), data))
|
|
@@ -131,12 +131,12 @@ Void function start_class(model : Element, data : Element, class : String, ident
|
|
|
|
|
|
// Create the data structure for a running class
|
|
|
Element class_handle
|
|
|
- class_handle = create_node()
|
|
|
+ class_handle = dict_create()
|
|
|
dict_add(class_handle, "type", class)
|
|
|
dict_add(class_handle, "ID", identifier)
|
|
|
- dict_add(class_handle, "events", create_node())
|
|
|
- dict_add(class_handle, "new_events", create_node())
|
|
|
- dict_add(class_handle, "timers", create_node())
|
|
|
+ dict_add(class_handle, "events", set_create())
|
|
|
+ dict_add(class_handle, "new_events", set_create())
|
|
|
+ dict_add(class_handle, "timers", dict_create())
|
|
|
dict_add(data["classes"], class_handle["ID"], class_handle)
|
|
|
|
|
|
String prev_class
|
|
@@ -155,7 +155,7 @@ Void function start_class(model : Element, data : Element, class : String, ident
|
|
|
Element cstates
|
|
|
String cstate
|
|
|
|
|
|
- history = create_node()
|
|
|
+ history = dict_create()
|
|
|
dict_add(class_handle, "history", history)
|
|
|
cstates = allInstances(model, "SCCD/CompositeState")
|
|
|
while (set_len(cstates) > 0):
|
|
@@ -164,7 +164,7 @@ Void function start_class(model : Element, data : Element, class : String, ident
|
|
|
|
|
|
// Add all attributes
|
|
|
Element attributes
|
|
|
- attributes = create_node()
|
|
|
+ attributes = dict_create()
|
|
|
Element attrs
|
|
|
attrs = allAssociationDestinations(model, class, "SCCD/class_attributes")
|
|
|
while (set_len(attrs) > 0):
|
|
@@ -181,7 +181,7 @@ Void function start_class(model : Element, data : Element, class : String, ident
|
|
|
|
|
|
// Execute all entry actions
|
|
|
Element init
|
|
|
- init = create_node()
|
|
|
+ init = set_create()
|
|
|
set_add(init, "")
|
|
|
// Initial state before initialization is the set with an empty hierarchy
|
|
|
// Empty set would not find any difference between the source and target
|
|
@@ -206,11 +206,11 @@ Element function get_enabled_transitions(model : Element, state : String, data :
|
|
|
Element event_names
|
|
|
Element event_parameters
|
|
|
|
|
|
- result = create_node()
|
|
|
+ result = set_create()
|
|
|
to_filter = allOutgoingAssociationInstances(model, state, "SCCD/transition")
|
|
|
|
|
|
- event_names = create_node()
|
|
|
- event_parameters = create_node()
|
|
|
+ event_names = set_create()
|
|
|
+ event_parameters = set_create()
|
|
|
events = set_copy(data["current_class_handle"]["events"])
|
|
|
while (set_len(events) > 0):
|
|
|
evt = set_pop(events)
|
|
@@ -219,7 +219,7 @@ Element function get_enabled_transitions(model : Element, state : String, data :
|
|
|
if (bool_not(set_in(event_names, evt_name))):
|
|
|
// Not yet registered the event
|
|
|
set_add(event_names, evt_name)
|
|
|
- dict_add(event_parameters, evt_name, create_node())
|
|
|
+ dict_add(event_parameters, evt_name, set_create())
|
|
|
// Add event parameters
|
|
|
set_add(event_parameters[evt_name], list_read(evt, 1))
|
|
|
|
|
@@ -382,7 +382,7 @@ Boolean function step_class(model : Element, data : Element, class : String):
|
|
|
dict_overwrite(data, "current_class_handle", data["classes"][class])
|
|
|
|
|
|
states = set_copy(data["current_class_handle"]["states"])
|
|
|
- new_states = create_node()
|
|
|
+ new_states = set_create()
|
|
|
transitioned = False
|
|
|
|
|
|
while (set_len(states) > 0):
|
|
@@ -434,7 +434,7 @@ Element function find_hierarchy(model : Element, state : String, data : Element)
|
|
|
if (bool_not(dict_in(data["cache_hierarchy"], state))):
|
|
|
Element result
|
|
|
if (state == ""):
|
|
|
- result = create_node()
|
|
|
+ result = list_create()
|
|
|
else:
|
|
|
String parent
|
|
|
parent = get_parent(model, state)
|
|
@@ -447,8 +447,8 @@ Element function find_hierarchy(model : Element, state : String, data : Element)
|
|
|
Void function execute_actions(model : Element, source_states : Element, target_states : Element, data : Element, transition_source : String):
|
|
|
Element exit
|
|
|
Element entry
|
|
|
- exit = create_node()
|
|
|
- entry = create_node()
|
|
|
+ exit = list_create()
|
|
|
+ entry = list_create()
|
|
|
|
|
|
source_states = set_copy(source_states)
|
|
|
target_states = set_copy(target_states)
|
|
@@ -461,11 +461,11 @@ Void function execute_actions(model : Element, source_states : Element, target_s
|
|
|
Element hierarchy_targets
|
|
|
Element all_hierarchies
|
|
|
|
|
|
- hierarchy_sources = create_node()
|
|
|
+ hierarchy_sources = set_create()
|
|
|
while (set_len(source_states) > 0):
|
|
|
set_add(hierarchy_sources, find_hierarchy(model, set_pop(source_states), data))
|
|
|
|
|
|
- hierarchy_targets = create_node()
|
|
|
+ hierarchy_targets = set_create()
|
|
|
while (set_len(target_states) > 0):
|
|
|
set_add(hierarchy_targets, find_hierarchy(model, set_pop(target_states), data))
|
|
|
|
|
@@ -540,7 +540,7 @@ Void function execute_actions(model : Element, source_states : Element, target_s
|
|
|
Element spliced_hierarchy
|
|
|
Element hierarchy_source
|
|
|
Element hierarchy_target
|
|
|
- visited = create_node()
|
|
|
+ visited = set_create()
|
|
|
while (set_len(hierarchy_sources) > 0):
|
|
|
// Get one of these hierarchies
|
|
|
hierarchy_source = set_pop(hierarchy_sources)
|
|
@@ -560,7 +560,7 @@ Void function execute_actions(model : Element, source_states : Element, target_s
|
|
|
|
|
|
// Add hierarchy_targets actions
|
|
|
// Clear visited, just to be safe, though it should not matter
|
|
|
- visited = create_node()
|
|
|
+ visited = set_create()
|
|
|
while (set_len(hierarchy_targets) > 0):
|
|
|
// Get one of these hierarchies
|
|
|
hierarchy_target = set_pop(hierarchy_targets)
|
|
@@ -692,10 +692,10 @@ Float function step(model : Element, data : Element):
|
|
|
Boolean function main(model : Element):
|
|
|
// Executes the provided SCCD model
|
|
|
Element data
|
|
|
- data = create_node()
|
|
|
- dict_add(data, "classes", create_node())
|
|
|
- dict_add(data, "cache_operations", create_node())
|
|
|
- dict_add(data, "cache_hierarchy", create_node())
|
|
|
+ data = dict_create()
|
|
|
+ dict_add(data, "classes", dict_create())
|
|
|
+ dict_add(data, "cache_operations", dict_create())
|
|
|
+ dict_add(data, "cache_hierarchy", dict_create())
|
|
|
dict_add(data, "current_class", "")
|
|
|
|
|
|
Float time_0
|
|
@@ -732,14 +732,14 @@ Boolean function main(model : Element):
|
|
|
// Update the simulated time to the time of interrupt
|
|
|
time_sim = time() - time_0
|
|
|
|
|
|
- dict_overwrite(data, "new_events", create_node())
|
|
|
+ dict_overwrite(data, "new_events", set_create())
|
|
|
Element classes
|
|
|
classes = dict_keys(data["classes"])
|
|
|
while(set_len(classes) > 0):
|
|
|
String class
|
|
|
class = set_pop(classes)
|
|
|
dict_overwrite(data["classes"][class], "events", data["classes"][class]["new_events"])
|
|
|
- dict_overwrite(data["classes"][class], "new_events", create_node())
|
|
|
+ dict_overwrite(data["classes"][class], "new_events", set_create())
|
|
|
|
|
|
if (element_neq(interrupt, read_root())):
|
|
|
// Got interrupt, so append it already
|