diff options
| author | Elizabeth Alexander Hunt <me@liz.coffee> | 2026-07-02 11:55:17 -0700 |
|---|---|---|
| committer | Elizabeth Alexander Hunt <me@liz.coffee> | 2026-07-02 11:55:17 -0700 |
| commit | 6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 (patch) | |
| tree | ed97e39ec77c5231ffd2c394493e68d00ddac5a4 /Homework/cs5300/project-three/parser/State.java | |
| download | misc-undergrad-6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6.tar.gz misc-undergrad-6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6.zip | |
Diffstat (limited to 'Homework/cs5300/project-three/parser/State.java')
| -rw-r--r-- | Homework/cs5300/project-three/parser/State.java | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/Homework/cs5300/project-three/parser/State.java b/Homework/cs5300/project-three/parser/State.java new file mode 100644 index 0000000..90c9c33 --- /dev/null +++ b/Homework/cs5300/project-three/parser/State.java @@ -0,0 +1,94 @@ +package parser; + +import java.util.*; + +public class State implements Comparable<State> { + private Set<Item> itemSet; + private List<Item> items; + private int name; + + public State(int name) { + this.itemSet = new HashSet<>(); + this.items = new ArrayList<>(); + this.name = name; + } + + public State() { + this(0); + } + + public State(Item item) { + this(); + addItem(item); + } + + public void setName(int name) { + this.name = name; + } + + public int getName() { + return this.name; + } + + public List<Item> getItems() { + return this.items; + } + + public int size() { + return items.size(); + } + + /* + * true if the item was added, false if it was already in the set + */ + public boolean addItem(Item item) { + if (!itemSet.contains(item)) { + itemSet.add(item); + items.add(item); + return true; + } + return false; + } + + @Override + public int hashCode() { + int hash = 7; + ArrayList<Item> sortedList = new ArrayList<>(items); + sortedList.sort(Comparator.comparingInt(Item::hashCode)); + for (Item item : sortedList) { + hash = 37 * hash + Objects.hashCode(item); + } + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final State other = (State) obj; + if (items.size() != other.items.size()) { + return false; + } + for (Item item : items) { + if (!other.itemSet.contains(item)) { + return false; + } + } + return true; + } + + @Override + public String toString() { + return this.name + ": " + items.toString(); + } + + @Override + public int compareTo(State o) { + return Integer.valueOf(this.name).compareTo(Integer.valueOf(o.name)); + } + +} |
