{
var no_overlap = true;//( pd.algorithm == match_types.TwoGroupsNoOver )
//|| ( pd.algorithm == match_types.TwoGroupsPrimeNoOver );
//var prime = ( pd.algorithm == match_types.TwoGroupsPrime )
// || ( pd.algorithm == match_types.TwoGroupsPrimeNoOver );
var g;
var masks = []
var index = [];
var n = 0;
var m = 0;
for( g = 0; g < pd.groups.length; g++ ) {
simple_masks.push( ExpandMods( pd.groups[g].mode_mod, pd.groups[g].masks ) )
index.push(0);
}
do {
var composite = 0;
for( g = 0; g < pd.groups.length; g++ ) {
masks[g] = simple_masks[g][index[g]];
if( no_overlap )
if( composite & masks[g] ) {
break;
}
composite |= masks[g];
}
if( g < pd.groups.length ) {
g++; // add 1 to g... so 'this' gets incremented
// this faulted, so next iterate.
for( var h = g; h < pd.groups.length; h++ ){
index[h] = 0; // reset all the following counters
}
}
else
composite_masks.push(composite);
// iterate combination set.
index[g-1]++;
while( g > 0 && ( index[g-1] >= simple_masks[g-1].length ) ) {
if( g > 1 ) // don't reset 0.
index[g-1] = 0;
if( --g > 0 )
index[g-1]++;
}
if( !g ){
if( index[0] >= simple_masks[0].length )
break;
}
}while(1);
}
This is all algorithmic; no expression calls a function, so a lot of things should be easiliy identifiable as unchanging.