浏览代码

Fix difference between set_difference and set_subtract

Yentl Van Tendeloo 7 年之前
父节点
当前提交
4eebd63e94
共有 3 个文件被更改,包括 11 次插入2 次删除
  1. 9 1
      bootstrap/semi_primitives.alc
  2. 1 0
      interface/HUTN/includes/primitives.alh
  3. 1 1
      models/SCCD_execute.alc

+ 9 - 1
bootstrap/semi_primitives.alc

@@ -438,5 +438,13 @@ Element function set_difference(sa : Element, sb : Element):
 		if (set_in(sa, elem)):
 			// Shared between both
 			set_remove(result, elem)
-
 	return result!
+
+Void function set_subtract(set1 : Element, set2 : Element):
+	Element elem
+	set2 = set_copy(set2)
+	while (set_len(set2) > 0):
+		elem = set_pop(set2)
+		if (set_in(set1, elem)):
+			set_remove(set1, elem)
+	return!

+ 1 - 0
interface/HUTN/includes/primitives.alh

@@ -110,6 +110,7 @@ String function dict_to_string(dict : Element)
 Element function set_overlap(sa : Element, sb : Element)
 Element function set_equality(sa : Element, sb : Element)
 Element function set_difference(sa : Element, sb : Element)
+Void function set_subtract(sa : Element, sb : Element)
 Element function dict_eq(da : Element, db : Element)
 Element function dict_copy(dict : Element)
 Element function set_to_list(s : Element)

+ 1 - 1
models/SCCD_execute.alc

@@ -442,7 +442,7 @@ Boolean function step_class(model : Element, data : Element, class : String):
 				// When leaving an orthogonal component, we must also pop all related states that might be processed in the future!
 				Element leaving
 				leaving = expand_current_state(model, current_state, data)
-				set_difference(states, leaving)
+				set_subtract(states, leaving)
 
 				transitioned = True
 				found = True