package de.gaalop.algebra;
import java.util.Arrays;
import java.util.LinkedList;
/**
* Provides methods for blade arrays
* @author Christian Steinmetz
*/
public class BladeArrayRoutines {
/**
* Facilitate the access for creating an array of blades from a base
* @param base The base
* @return The array of blades
*/
public static TCBlade[] createBlades(String[] base) {
BladeArrayRoutines bladeArrayRoutines = new BladeArrayRoutines(base);
return bladeArrayRoutines.createBlades();
}
/**
* Prints an array of blades with a leading index
* @param blades The array of blades
*/
public static void printBlades(TCBlade[] blades) {
int index = 0;
for (TCBlade blade: blades)
if (blade == null)
System.out.println(index++ +"null");
else
System.out.println(index++ +": "+blade.toString());
}
private String[] base;
private LinkedList<TCBlade> blades = new LinkedList<TCBlade>();
public BladeArrayRoutines(String[] base) {
this.base = base;
}
/**
* Creates an array of blades from a base
* @param base The base
* @return The array of blades
*/
public TCBlade[] createBlades() {
blades.clear();
blades.add(new TCBlade(new String[]{"1"}));
for (int k=1;k<=base.length;k++)
createBladesHelp(new String[0],0,k);
return blades.toArray(new TCBlade[0]);
}
/**
* Helper function for createBlades.
* @param arrTrailing The trailing array to be inserted before each combination
* @param startPos The start position in the base array
* @param k The number of base elements to be inserted
*/
private void createBladesHelp(String[] arrTrailing, int startPos, int k) {
if (k == 1) {
for (int s=startPos;s<base.length;s++) {
String[] nbase = Arrays.copyOf(arrTrailing, arrTrailing.length+1);
nbase[nbase.length-1] = base[s];
blades.add(new TCBlade(nbase));
}
} else {
for (int s=startPos;s<base.length-1;s++) {
String[] nbase = Arrays.copyOf(arrTrailing, arrTrailing.length+1);
nbase[nbase.length-1] = base[s];
createBladesHelp(nbase, s+1, k-1);
}
}
}
}