+ 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, reverse);
+ }
+
+ public MnemonicFamily(String[] names, BitVector[] values)
+ {
+ this(false, names, values);
+ }
+
+ public MnemonicFamily(boolean reverse, 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, reverse);
+ }
+
+ public MnemonicFamily(MnemonicPair... values)
+ {
+ this(false, values);
+ }
+
+ public MnemonicFamily(boolean reverse, MnemonicPair... values)
+ {
+ this.values = new Mnemonic[values.length];
+ this.stringValues = new String[values.length];
+
+ setup(values);
+ }
+
+ private void setup(String[] names, BitVector[] values, boolean reverse)
+ {
+ MnemonicPair[] mnemonics = new MnemonicPair[values.length];
+ for (int i = 0; i < values.length; i++)
+ mnemonics[i] = new MnemonicPair(names[i], reverse ? values[i].reverse() : values[i]);
+ setup(mnemonics);
+ }
+
+ private void setup(MnemonicPair[] values)
+ {
+ for (int i = 0; i < values.length; i++)
+ {
+ this.values[i] = createMnemonic(values[i], i);
+ this.stringValues[i] = values[i].name;
+ }
+ if (values.length == 0)