getRange method
Implementation
List<Konto> getRange(String min,String max,{List<Konto>? passthrough} )
{
List<Konto> result = (passthrough!= null)?passthrough:[];
//print("searching for $min to $max in $name/$children");
if(children.length == 0) {
//print("ehm.... '$name,$desc' missed something somewhere..... adding ourselves??");
result.add(this);
}
else if(min.length == 1)
{
children.forEach((key, val) { if((key.compareTo(min) >=0) && (max == "all" || key.compareTo(max) <=0))
{
result.add(val);
//print("added direct ${val.desc}");
}});
}
else if(min =="all" )
{
//print("adding all children ");
children.forEach((key, val) { if(max == "all" || key.compareTo(max) <=0) {if(val.children.length <=0)
{
//print("val has no children adding $key ${val.desc}");
result.add(val);
}
else
{
//print("val has ${val.children} diving from ${val.desc}");
val.getRange("all","all",passthrough:result);
}}});
}
else if(min.length > 1)
{
String keyMin = min[0];
String keyMax = max[0];
String restMin = min.substring(1);
String restMax = max.substring(1);
//print("$name need to recurse deeper [$keyMin, $keyMax] [$restMin, $restMax]...");
children.forEach((key, val)
{
if(key.compareTo(keyMin) ==0) {
//print("entering $key for $restMin to all");
val.getRange(restMin,"all",passthrough:result);}
else if(key.compareTo(keyMin) >0 && key.compareTo(keyMax) <0){
//print("entering $key for all");
val.getRange("all","all",passthrough:result);}
else if(key.compareTo(keyMin) >0 && key.compareTo(keyMax) ==0){
//print("entering $key for all to $restMax");
val.getRange("all",restMax,passthrough:result);}
//else print("should bee: $key < $min or $key > $max, so ignore it");
}
);
}
else
print("Konto Error, nevershould be here");
return result;
}