Filtering a tuple of containers with indices

maik klein via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Nov 17 06:32:12 PST 2015


The question is also posted on

https://stackoverflow.com/questions/33757981/filtering-a-tuple-of-containers-with-indicies


template tupIndexToRange(alias Tup, Indices...){
   import std.meta;
   static if(Indicies.length == 0){
     alias tupIndexToRange = AliasSeq!();
   }
   else{
     alias tupIndexToRange = AliasSeq!(Tup[ Indices[0] ][], 
tupIndexToRange!(Tup,Indices[1..$]));
   }
}

void main{
   alias Integrals = AliasSeq!(Array!int, Array!float, 
Array!double);
   Integrals integrals;

   alias IntegralRange = tupIndexToRange!(integrals,0,1);
}

void main{
   alias Integrals = AliasSeq!(Array!int, Array!float, 
Array!double);
   Integrals integrals;

   alias IntegralRange = tupIndexToRange!(integrals,0,1);
}

I want to achieve something like this

auto range = zip(tupIndexToRange!(integrals,0,1));

I think the main problem is that Tup[ Indicies[0] ] doesn't work, 
to me it should have expanded to this 
AliasSeq!(itegrals[0][],integrals[1][]);


This is roughly what I want to achieve

   alias Integrals = AliasSeq!(Array!int, Array!float, 
Array!double);
   Integrals integrals;
   integrals[0].insertBack(1);
   integrals[1].insertBack(2);
   integrals[2].insertBack(3);

   auto range = zip(tuple(integrals[0][],integrals[1][]).expand);
   writeln(range);
   foreach(e;range){
     writeln("element: ",e);
   }
But instead of "auto range = 
zip(tuple(integrals[0][],integrals[1][]).expand);" I want it to 
be generic "auto range = zip(tupIndexToRange!(integrals, 
AliasSeq!(0, 1)).expand);"

Maybe I need use mixins?


More information about the Digitalmars-d-learn mailing list