+ private Map<String, Mnemonic> byText;
+ private int vectorLength;
+
+ public MnemonicFamily(String... names)
+ {
+ this.values = new Mnemonic[names.length];
+ this.stringValues = new String[names.length];
+ BitVector[] values = new BitVector[names.length];
+ int bits = (int) Math.ceil(Math.log(names.length));
+ for(int i = 0; i < names.length; i++)
+ {
+ values[i] = BitVector.from(i, bits);
+ }
+
+ setup(names, values);
+ }
+
+ public MnemonicFamily(String[] names, long[] values, int bits)
+ {
+ if(names.length != values.length)
+ throw new IllegalArgumentException();
+ this.values = new Mnemonic[values.length];
+ this.stringValues = new String[values.length];
+ BitVector[] vectors = new BitVector[values.length];
+
+ for(int i = 0; i < vectors.length; i++)
+ {
+ vectors[i] = BitVector.from(values[i], bits);
+ }
+
+ setup(names, vectors);
+ }
+
+ public MnemonicFamily(String[] names, BitVector[] values)
+ {
+ if(names.length != values.length)
+ throw new IllegalArgumentException();
+ this.values = new Mnemonic[values.length];
+ this.stringValues = new String[values.length];
+
+ setup(names, values);
+ }