|
@@ -30,7 +30,7 @@ package haxe.ds;
|
|
|
**/
|
|
|
class EnumValueMap<K:EnumValue, V> extends haxe.ds.BalancedTree<K, V> implements Map.IMap<K,V> {
|
|
|
|
|
|
- override function compare(k1:EnumValue, k2:EnumValue) {
|
|
|
+ override function compare(k1:EnumValue, k2:EnumValue):Int {
|
|
|
var d = k1.getIndex() - k2.getIndex();
|
|
|
if (d != 0) return d;
|
|
|
var p1 = k1.getParameters();
|
|
@@ -39,15 +39,23 @@ class EnumValueMap<K:EnumValue, V> extends haxe.ds.BalancedTree<K, V> implements
|
|
|
return compareArgs(p1, p2);
|
|
|
}
|
|
|
|
|
|
- function compareArgs(a1:Array<Dynamic>, a2:Array<Dynamic>) {
|
|
|
+ function compareArgs(a1:Array<Dynamic>, a2:Array<Dynamic>):Int {
|
|
|
var ld = a1.length - a2.length;
|
|
|
if (ld != 0) return ld;
|
|
|
for (i in 0...a1.length) {
|
|
|
- var v1:Dynamic = a1[i], v2:Dynamic = a2[i];
|
|
|
- var d = if (Reflect.isEnumValue(v1) && Reflect.isEnumValue(v2)) compare(v1, v2);
|
|
|
- else Reflect.compare(v1, v2);
|
|
|
+ var d = compareArg(a1[i], a2[i]);
|
|
|
if (d != 0) return d;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+ function compareArg(v1:Dynamic, v2:Dynamic):Int {
|
|
|
+ return if (Reflect.isEnumValue(v1) && Reflect.isEnumValue(v2)) {
|
|
|
+ compare(v1, v2);
|
|
|
+ } else if (Std.is(v1, Array) && Std.is(v2, Array)) {
|
|
|
+ compareArgs(v1, v2);
|
|
|
+ } else {
|
|
|
+ Reflect.compare(v1, v2);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|