001package com.fs.starfarer.api.util;
002
003import java.util.LinkedHashMap;
004
005public class CountingMap<K> extends LinkedHashMap<K, Integer> {
006        private static final long serialVersionUID = 1L;
007
008        public void add(K key, int quantity) {
009                Integer val = super.get(key);
010                if (val == null) val = 0;
011                val+=quantity;
012                put(key, val);
013        }
014        
015        public void add(K key) {
016                add(key, 1);
017        }
018        
019        public void sub(K key) {
020                sub(key, 1);
021        }
022        public void sub(K key, int quantity) {
023                Integer val = super.get(key);
024                if (val == null) val = 0;
025                val-=quantity;
026                if (val <= 0) {
027                        remove(key);
028                        return;
029                }
030                put(key, val);
031        }
032        
033        public int getCount(K key) {
034                Integer val = super.get(key);
035                if (val == null) val = 0;
036                return val;
037        }
038
039        @Override
040        public Integer get(Object key) {
041                return getCount((K) key);
042        }
043        
044        public int getTotal() {
045                int total = 0;
046                for (K key : keySet()) {
047                        total += get(key);
048                }
049                return total;
050        }
051
052        public K getLargest() {
053                int max = 0;
054                K maxKey = null;
055                for (K key : keySet()) {
056                        int c = getCount(key);
057                        if (c > max) {
058                                max = c;
059                                maxKey = key;
060                        }
061                }
062                return maxKey;
063        }
064        
065}