Merge branch 'development' of
authorFabian Stemmler <stemmler@in.tum.de>
Tue, 27 Aug 2019 13:55:03 +0000 (15:55 +0200)
committerFabian Stemmler <stemmler@in.tum.de>
Tue, 27 Aug 2019 14:03:43 +0000 (16:03 +0200)
https://gitlab.lrz.de/lrr-tum/students/eragp-misim-2019.git into
development

Conflicts:
net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java

1  2 
net.mograsim.machine/src/net/mograsim/machine/mi/parameters/MnemonicFamily.java
net.mograsim.machine/src/net/mograsim/machine/mi/parameters/ParameterClassification.java

@@@ -10,23 -10,21 +10,23 @@@ public class MnemonicFamily implements 
  {
        private final Mnemonic[] values;
        private final Map<String, Mnemonic> byText;
 -      private final int vectorLenght;
 +      private final int vectorLength;
        
        public MnemonicFamily(Mnemonic... values)
        {
                this.values = values;
                if(values.length == 0)
 -                      vectorLenght = 0;
 +                      vectorLength = 0;
                else
                {
-                       vectorLength = values[0].getValue().width();
 -                      vectorLenght = values[0].getValue().length();
++                      vectorLength = values[0].getValue().length();
                        for(int i = 1; i < values.length; i++)
-                               if(values[i].getValue().width() != vectorLength)
 -                              if(values[i].getValue().length() != vectorLenght)
++                              if(values[i].getValue().length() != vectorLength)
                                        throw new IllegalArgumentException("MnemonicFamily is not of uniform vector length!");
                }
                byText = Arrays.stream(values).collect(Collectors.toMap(m -> m.getText(), m -> m));
 +              if(values.length != byText.keySet().size())
 +                      throw new IllegalArgumentException("MnemonicFamily contains multiple Mnemonics with the same name!");
        }
        
        public Mnemonic[] getValues()
                        return false;
        }
        
 +      public boolean contains(String value)
 +      {
 +              return byText.keySet().contains(value);
 +      }
 +      
        public int size()
        {
                return values.length;
        
        public int getVectorLength()
        {
 -              return vectorLenght;
 +              return vectorLength;
        }
  
        @Override
        public boolean conforms(MicroInstructionParameter param)
        {
 -              return param instanceof Mnemonic ? contains((Mnemonic) param) : false;
 +              return ParameterClassification.super.conforms(param) && (param instanceof Mnemonic ? contains((Mnemonic) param) : false);
        }
  
        @Override
        {
                return ParameterType.MNEMONIC;
        }
 +
 +      @Override
 +      public int getExpectedBits()
 +      {
 +              return vectorLength;
 +      }
 +
 +      public String[] getStringValues()
 +      {
 +              return byText.keySet().toArray(new String[values.length]);
 +      }
  }
@@@ -8,18 -8,10 +8,18 @@@ public interface ParameterClassificatio
         * Determines whether a {@link MicroInstructionParameter} is part of this class of parameters.
         * @return true if the classification contains the Parameter, false otherwise
         */
 -      public boolean conforms(MicroInstructionParameter param);
 +      public default boolean conforms(MicroInstructionParameter param)
 +      {
-               return param.getType().equals(getExpectedType()) && param.getValue().width() == getExpectedBits();
++              return param.getType().equals(getExpectedType()) && param.getValue().length() == getExpectedBits();
 +      }
        
        /**
         * @return The type of the parameters in this classification.
         */
        public ParameterType getExpectedType();
 +      
 +      /**
 +       * @return The number of bits of the parameters in this classification.
 +       */
 +      public int getExpectedBits();
  }