From 5b5517ad2958fe2bc3c1a38302169a61ab011691 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sun, 24 Nov 2013 06:45:30 +0000 Subject: [PATCH] replace TreeMapOfLists with Guava Multimap --- .gitattributes | 1 - .../main/java/forge/card/mana/ManaPool.java | 22 ++----- .../java/forge/game/ai/ComputerUtilMana.java | 30 +++++----- .../java/forge/util/maps/TreeMapOfLists.java | 57 ------------------- 4 files changed, 22 insertions(+), 88 deletions(-) delete mode 100644 forge-gui/src/main/java/forge/util/maps/TreeMapOfLists.java diff --git a/.gitattributes b/.gitattributes index 12bb4bbc0ee..c994c95a07f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15628,7 +15628,6 @@ forge-gui/src/main/java/forge/util/maps/EnumMapToAmount.java -text forge-gui/src/main/java/forge/util/maps/HashMapOfLists.java -text forge-gui/src/main/java/forge/util/maps/MapOfLists.java -text forge-gui/src/main/java/forge/util/maps/MapToAmount.java -text -forge-gui/src/main/java/forge/util/maps/TreeMapOfLists.java -text forge-gui/src/main/java/forge/util/maps/TreeMapToAmount.java -text forge-gui/src/main/java/forge/util/maps/package-info.java -text forge-gui/src/main/java/forge/util/package-info.java -text diff --git a/forge-gui/src/main/java/forge/card/mana/ManaPool.java b/forge-gui/src/main/java/forge/card/mana/ManaPool.java index d1e2ee4916a..62ac784d39d 100644 --- a/forge-gui/src/main/java/forge/card/mana/ManaPool.java +++ b/forge-gui/src/main/java/forge/card/mana/ManaPool.java @@ -25,9 +25,9 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; -import com.google.common.base.Supplier; +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Lists; - +import com.google.common.collect.Multimap; import forge.card.MagicColor; import forge.card.spellability.AbilityManaPart; import forge.card.spellability.SpellAbility; @@ -38,8 +38,6 @@ import forge.game.event.GameEventZone; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.ZoneType; -import forge.util.maps.MapOfLists; -import forge.util.maps.TreeMapOfLists; /** *

@@ -51,11 +49,7 @@ import forge.util.maps.TreeMapOfLists; */ public class ManaPool { - private final static Supplier> listFactory = new Supplier>(){ - @Override public List get() { return new ArrayList(); } - }; - - private final MapOfLists floatingMana = new TreeMapOfLists(listFactory); + private final Multimap floatingMana = ArrayListMultimap.create(); /** Constant map. */ private final Player owner; @@ -78,7 +72,7 @@ public class ManaPool { } private void addMana(final Mana mana) { - floatingMana.add(mana.getColorCode(), mana); + floatingMana.put(mana.getColorCode(), mana); owner.getGame().fireEvent(new GameEventManaPool(owner, EventValueChangeType.Added, mana)); } @@ -132,7 +126,7 @@ public class ManaPool { } numRemoved += floatingMana.get(b).size() - pMana.size(); floatingMana.get(b).clear(); - floatingMana.addAll(b, pMana); + floatingMana.putAll(b, pMana); } else { numRemoved += floatingMana.get(b).size(); floatingMana.get(b).clear(); @@ -320,11 +314,7 @@ public class ManaPool { * @return a int. */ public final int totalMana() { - int total = 0; - for (Collection cm : floatingMana.values()) { - total += cm.size(); - } - return total; + return floatingMana.values().size(); } /** diff --git a/forge-gui/src/main/java/forge/game/ai/ComputerUtilMana.java b/forge-gui/src/main/java/forge/game/ai/ComputerUtilMana.java index 633c0546bf8..166b231eed5 100644 --- a/forge-gui/src/main/java/forge/game/ai/ComputerUtilMana.java +++ b/forge-gui/src/main/java/forge/game/ai/ComputerUtilMana.java @@ -13,6 +13,9 @@ import java.util.Set; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Predicate; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; + import forge.Card; import forge.CardLists; import forge.CardUtil; @@ -38,7 +41,6 @@ import forge.game.zone.ZoneType; import forge.util.CollectionSuppliers; import forge.util.maps.EnumMapOfLists; import forge.util.maps.MapOfLists; -import forge.util.maps.TreeMapOfLists; /** * TODO: Write javadoc for this type. @@ -103,7 +105,7 @@ public class ComputerUtilMana { } // arrange all mana abilities by color produced. - final MapOfLists manaAbilityMap = ComputerUtilMana.groupSourcesByManaColor(ai, checkPlayable); + final Multimap manaAbilityMap = ComputerUtilMana.groupSourcesByManaColor(ai, checkPlayable); if ( manaAbilityMap.isEmpty() ) { manapool.clearManaPaid(sa, test); handleOfferingsAI(sa, test, cost.isPaid()); @@ -415,7 +417,7 @@ public class ComputerUtilMana { * @param foundAllSources * @return Were all mana sources found? */ - private static MapOfLists groupAndOrderToPayShards(final Player ai, final MapOfLists manaAbilityMap, + private static MapOfLists groupAndOrderToPayShards(final Player ai, final Multimap manaAbilityMap, final ManaCostBeingPaid cost) { MapOfLists res = new EnumMapOfLists(ManaCostShard.class, CollectionSuppliers.arrayLists()); @@ -435,9 +437,9 @@ public class ComputerUtilMana { continue; } - for(Entry> kv : manaAbilityMap.entrySet()) { + for(Entry kv : manaAbilityMap.entries()) { if( shard.canBePaidWithManaOfColor(kv.getKey().byteValue()) ) - res.addAll(shard, kv.getValue()); + res.add(shard, kv.getValue()); } } @@ -620,8 +622,8 @@ public class ComputerUtilMana { //This method is currently used by AI to estimate mana available - private static MapOfLists groupSourcesByManaColor(final Player ai, boolean checkPlayable) { - final MapOfLists manaMap = new TreeMapOfLists(CollectionSuppliers.arrayLists()); + private static Multimap groupSourcesByManaColor(final Player ai, boolean checkPlayable) { + final Multimap manaMap = ArrayListMultimap.create(); final Game game = ai.getGame(); // Loop over all current available mana sources @@ -640,7 +642,7 @@ public class ComputerUtilMana { } } - manaMap.add(ManaAtom.COLORLESS, m); // add to colorless source list + manaMap.put(ManaAtom.COLORLESS, m); // add to colorless source list AbilityManaPart mp = m.getManaPart(); // setup produce mana replacement effects @@ -667,22 +669,22 @@ public class ComputerUtilMana { Set reflectedColors = CardUtil.getReflectableManaColors(m); // find possible colors if (mp.canProduce("W", m) || reflectedColors.contains(MagicColor.Constant.WHITE)) { - manaMap.add(ManaAtom.WHITE, m); + manaMap.put(ManaAtom.WHITE, m); } if (mp.canProduce("U", m) || reflectedColors.contains(MagicColor.Constant.BLUE)) { - manaMap.add(ManaAtom.BLUE, m); + manaMap.put(ManaAtom.BLUE, m); } if (mp.canProduce("B", m) || reflectedColors.contains(MagicColor.Constant.BLACK)) { - manaMap.add(ManaAtom.BLACK, m); + manaMap.put(ManaAtom.BLACK, m); } if (mp.canProduce("R", m) || reflectedColors.contains(MagicColor.Constant.RED)) { - manaMap.add(ManaAtom.RED, m); + manaMap.put(ManaAtom.RED, m); } if (mp.canProduce("G", m) || reflectedColors.contains(MagicColor.Constant.GREEN)) { - manaMap.add(ManaAtom.GREEN, m); + manaMap.put(ManaAtom.GREEN, m); } if (mp.isSnow()) { - manaMap.add(ManaAtom.IS_SNOW, m); + manaMap.put(ManaAtom.IS_SNOW, m); } } // end of mana abilities loop } // end of mana sources loop diff --git a/forge-gui/src/main/java/forge/util/maps/TreeMapOfLists.java b/forge-gui/src/main/java/forge/util/maps/TreeMapOfLists.java deleted file mode 100644 index f6e40dced67..00000000000 --- a/forge-gui/src/main/java/forge/util/maps/TreeMapOfLists.java +++ /dev/null @@ -1,57 +0,0 @@ -package forge.util.maps; - -import java.util.Collection; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; - -import com.google.common.base.Supplier; - -public class TreeMapOfLists extends TreeMap> implements MapOfLists { - private static final long serialVersionUID = -5881288393640446185L; - private final Supplier> factory; - - public TreeMapOfLists(Supplier> factory) { - super(); - this.factory = factory; - } - - public TreeMapOfLists(Comparator comparator, Supplier> factory) { - super(comparator); - this.factory = factory; - } - - public TreeMapOfLists(Map> m, Supplier> factory) { - super(m); - this.factory = factory; - } - - public TreeMapOfLists(SortedMap> m, Supplier> factory) { - super(m); - this.factory = factory; - } - - public Collection ensureCollectionFor(K key) { - Collection value = get(key); - if ( value == null ) { - value = factory.get(); - put(key, value); - } - return value; - } - - @Override - public void add(K key, V element) { - ensureCollectionFor(key).add(element); - } - - - @Override - public void addAll(K key, Collection elements) { - ensureCollectionFor(key).addAll(elements); - - } - -}