diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-10-08 22:39:59 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-10-08 22:39:59 -0300 |
| commit | c82e3b3b2de0633317ec8fc85925e91422820597 (patch) | |
| tree | 96567416ce23c5ce85601f9cedc3a94bb1c55cba /BJC-Utils2/src/main/java/bjc/utils/esodata/TapeLibrary.java | |
| parent | b3ac1c8690c3e14c879913e5dcc03a5f5e14876e (diff) | |
Start splitting into maven modules
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/esodata/TapeLibrary.java')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/esodata/TapeLibrary.java | 340 |
1 files changed, 0 insertions, 340 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/esodata/TapeLibrary.java b/BJC-Utils2/src/main/java/bjc/utils/esodata/TapeLibrary.java deleted file mode 100644 index 2dbc70b..0000000 --- a/BJC-Utils2/src/main/java/bjc/utils/esodata/TapeLibrary.java +++ /dev/null @@ -1,340 +0,0 @@ -package bjc.utils.esodata; - -import java.util.HashMap; -import java.util.Map; - -/** - * A tape changer is essentially a map of tapes. - * - * It has a current tape that you can do operations to, but also operations to - * add/remove other tapes. - * - * If there is no tape currently loaded into the changer, all the methods will - * either return null/false. - * - * @param <T> - * The element type of the tapes. - */ -public class TapeLibrary<T> implements Tape<T> { - private final Map<String, Tape<T>> tapes; - private Tape<T> currentTape; - - /** - * Create a new empty tape library. - */ - public TapeLibrary() { - tapes = new HashMap<>(); - } - - /** - * Get the item the tape is currently on. - * - * @return The item the tape is on. - */ - @Override - public T item() { - if (currentTape == null) return null; - - return currentTape.item(); - } - - /** - * Set the item the tape is currently on. - * - * @param itm - * The new value for the tape item. - */ - @Override - public void item(final T itm) { - if (currentTape == null) return; - - currentTape.item(itm); - } - - /** - * Get the current number of elements in the tape. - * - * @return The current number of elements in the tape. - */ - @Override - public int size() { - if (currentTape == null) return 0; - - return currentTape.size(); - } - - @Override - public int position() { - if (currentTape == null) return 0; - - return currentTape.position(); - } - /** - * Insert an element before the current item. - * - * @param itm - * The item to add. - */ - @Override - public void insertBefore(final T itm) { - if (currentTape == null) return; - - currentTape.insertBefore(itm); - } - - /** - * Insert an element after the current item. - */ - @Override - public void insertAfter(final T itm) { - if (currentTape == null) return; - - currentTape.insertAfter(itm); - } - - /** - * Remove the current element. - * - * Also moves the cursor back one step if possible to maintain relative - * position, and removes the corresponding item from the non-active side - * - * @return The removed item from the active side. - */ - @Override - public T remove() { - if (currentTape == null) return null; - - return currentTape.remove(); - } - - /** - * Move the cursor to the left-most position. - */ - @Override - public void first() { - if (currentTape == null) return; - - currentTape.first(); - } - - /** - * Move the cursor the right-most position. - */ - @Override - public void last() { - if (currentTape == null) return; - - currentTape.last(); - } - - /** - * Move the cursor one space left. - * - * The cursor can't go past zero. - * - * @return True if the cursor was moved left. - */ - @Override - public boolean left() { - return left(1); - } - - /** - * Move the cursor the specified amount left. - * - * The cursor can't go past zero. Attempts to move the cursor by amounts - * that would exceed zero don't move the cursor at all. - * - * @param amt - * The amount to attempt to move the cursor left. - * - * @return True if the cursor was moved left. - */ - @Override - public boolean left(final int amt) { - if (currentTape == null) return false; - - return currentTape.left(amt); - } - - /** - * Move the cursor one space right. - * - * Moving the cursor right will auto-extend the tape if that is enabled. - * - * @return Whether the cursor was moved right. - */ - @Override - public boolean right() { - return right(1); - } - - /** - * Move the cursor the specified amount right. - * - * Moving the cursor right will auto-extend the tape if that is enabled. - * - * @param amt - * The amount to move the cursor right by. - * - * @return Whether the cursor was moved right. - */ - @Override - public boolean right(final int amt) { - if (currentTape == null) return false; - - return currentTape.right(amt); - } - - /** - * Flips the tape. - * - * The active side becomes inactive, and the inactive side becomes - * active. - * - * If the current tape is not double-sided, does nothing. - */ - public void flip() { - if (currentTape == null) return; - - if (currentTape.isDoubleSided()) { - ((DoubleTape<T>) currentTape).flip(); - } - } - - @Override - public boolean isDoubleSided() { - if (currentTape == null) return false; - - return currentTape.isDoubleSided(); - } - - /** - * Check if a tape is currently loaded. - * - * @return Whether or not a tape is loaded. - */ - public boolean isLoaded() { - return currentTape != null; - } - - /** - * Move to the specified tape in the library. - * - * Attempting to load a tape that isn't there won't eject the current - * tape. - * - * @param label - * The label of the tape to load. - * - * @return Whether or not the next tape was loaded. - */ - public boolean switchTape(final String label) { - if (tapes.containsKey(label)) { - currentTape = tapes.get(label); - return true; - } - - return false; - } - - /** - * Inserts a tape into the tape library. - * - * Any currently loaded tape is ejected. - * - * The specified tape is loaded. - * - * Adding a duplicate tape will overwrite any existing types. - * - * @param label - * The label of the tape to add. - * - * @param tp - * The tape to insert and load. - */ - public void insertTape(final String label, final Tape<T> tp) { - tapes.put(label, tp); - - currentTape = tp; - } - - /** - * Remove a tape from the library. - * - * Does nothing if there is not a tape of that name loaded. - * - * @param label - * The tape to remove. - * - * @return The removed tape. - */ - public Tape<T> removeTape(final String label) { - return tapes.remove(label); - } - - /** - * Ejects the current tape. - * - * Does nothing if no tape is loaded. - */ - public void eject() { - currentTape = null; - } - - /** - * Get how many tapes are currently in the library. - * - * @return How many tapes are currently in the library. - */ - public int tapeCount() { - return tapes.size(); - } - - /** - * Check if a specific tape is loaded into the library. - * - * @param label - * The tape to check for. - * - * @return Whether or not a tape of that name exists - */ - public boolean hasTape(final String label) { - return tapes.containsKey(label); - } - - @Override - public int hashCode() { - final int prime = 31; - - int result = 1; - result = prime * result + (currentTape == null ? 0 : currentTape.hashCode()); - result = prime * result + (tapes == null ? 0 : tapes.hashCode()); - - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) return true; - if (obj == null) return false; - if (!(obj instanceof TapeLibrary<?>)) return false; - - final TapeLibrary<?> other = (TapeLibrary<?>) obj; - - if (currentTape == null) { - if (other.currentTape != null) return false; - } else if (!currentTape.equals(other.currentTape)) return false; - - if (tapes == null) { - if (other.tapes != null) return false; - } else if (!tapes.equals(other.tapes)) return false; - - return true; - } - - @Override - public String toString() { - return String.format("TapeLibrary [tapes=%s, currentTape='%s']", tapes, currentTape); - } -} |
