getRange method

List<Konto> getRange(
  1. String min,
  2. String max, {
  3. List<Konto>? passthrough,
})

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;
}