summaryrefslogtreecommitdiff
path: root/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/brpcompare/HashAlphabet.java
diff options
context:
space:
mode:
authorRené den Hertog2017-10-26 17:34:51 +0200
committerRené den Hertog2017-10-26 17:34:51 +0200
commitac914c719d401c44cb2633127952b022bf563ff3 (patch)
treef7d2399b2ab6cddb86aa996096581a397ff407b9 /assignments/assignment2/Bounded Retransmission Protocol Tester/Source/brpcompare/HashAlphabet.java
parentFinish assignment 2, part 1 (diff)
'Bounded Retransmission Protocol' Blob
Diffstat (limited to 'assignments/assignment2/Bounded Retransmission Protocol Tester/Source/brpcompare/HashAlphabet.java')
-rwxr-xr-xassignments/assignment2/Bounded Retransmission Protocol Tester/Source/brpcompare/HashAlphabet.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/brpcompare/HashAlphabet.java b/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/brpcompare/HashAlphabet.java
new file mode 100755
index 0000000..46742d2
--- /dev/null
+++ b/assignments/assignment2/Bounded Retransmission Protocol Tester/Source/brpcompare/HashAlphabet.java
@@ -0,0 +1,54 @@
+package brpcompare;
+
+import net.automatalib.words.Alphabet;
+import net.automatalib.words.abstractimpl.AbstractAlphabet;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Created by joshua on 14/07/2016.
+ * I noticed that getSymbolIndex was called a lot. So I optimized for that, with a look up structure.
+ * Too bad it wasn't in LearnLib already.
+ */
+public class HashAlphabet<I> extends AbstractAlphabet<I> {
+ private final ArrayList<I> symbols;
+ private final HashMap<I, Integer> indices;
+
+ public HashAlphabet(Alphabet<I> in) {
+ symbols = new ArrayList<>(in);
+ indices = new HashMap<>(in.size());
+ for (int i = 0; i < symbols.size(); i++) {
+ indices.put(symbols.get(i), i);
+ }
+ }
+
+ @Override
+ public I getSymbol(int index) {
+ return symbols.get(index);
+ }
+
+ @Override
+ public int getSymbolIndex(I symbol) {
+ return indices.get(symbol);
+ }
+
+ @Override
+ public int size() {
+ return symbols.size();
+ }
+
+ /* (non-Javadoc)
+ * @see net.automatalib.words.abstractimpl.AbstractAlphabet#writeToArray(int, java.lang.Object[], int, int)
+ */
+ @Override
+ public void writeToArray(int offset, Object[] array, int tgtOfs, int num) {
+ System.arraycopy(symbols, offset, array, tgtOfs, num);
+ }
+
+ @Override
+ public boolean containsSymbol(I symbol) {
+ return indices.containsKey(symbol);
+ }
+
+}