aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/equalparts/cardbase/cardstorage/ReferenceCardContainer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/eu/equalparts/cardbase/cardstorage/ReferenceCardContainer.java')
-rw-r--r--src/eu/equalparts/cardbase/cardstorage/ReferenceCardContainer.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/eu/equalparts/cardbase/cardstorage/ReferenceCardContainer.java b/src/eu/equalparts/cardbase/cardstorage/ReferenceCardContainer.java
new file mode 100644
index 0000000..ccd5508
--- /dev/null
+++ b/src/eu/equalparts/cardbase/cardstorage/ReferenceCardContainer.java
@@ -0,0 +1,50 @@
+package eu.equalparts.cardbase.cardstorage;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import eu.equalparts.cardbase.cards.Card;
+
+public abstract class ReferenceCardContainer {
+
+ @JsonProperty private Map<Integer, Integer> cardReferences;
+
+ public ReferenceCardContainer() {
+ cardReferences = new HashMap<>();
+ }
+
+ public int getCount(Card cardToCount) {
+ int hashCode = cardToCount.hashCode();
+ return cardReferences.containsKey(hashCode) ? cardReferences.get(hashCode) : 0;
+ }
+
+ public void addCard(Card cardToAdd, int count) {
+ int hashCode = cardToAdd.hashCode();
+ if (cardReferences.containsKey(hashCode)) {
+ cardReferences.replace(hashCode, cardReferences.get(hashCode) + count);
+ } else {
+ cardReferences.put(hashCode, count);
+ }
+ }
+
+ public int removeCard(Card cardToRemove, int count) {
+ int hashCode = cardToRemove.hashCode();
+ int removed = 0;
+
+ if (cardReferences.containsKey(hashCode) && count > 0) {
+ int oldCount = cardReferences.get(hashCode);
+
+ if (oldCount > count) {
+ cardReferences.replace(hashCode, oldCount - count);
+ removed = count;
+ } else {
+ cardReferences.remove(hashCode);
+ removed = oldCount;
+ }
+ }
+
+ return removed;
+ }
+}