package edu.stanford.nlp.ling.tokensregex.matcher; import edu.stanford.nlp.stats.ClassicCounter; import edu.stanford.nlp.stats.Counter; import edu.stanford.nlp.util.CollectionFactory; import edu.stanford.nlp.util.CollectionValuedMap; import edu.stanford.nlp.util.MapFactory; import edu.stanford.nlp.util.MutableDouble; import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Set; /** * Utility functions for using trie maps * * @author Angel Chang */ public class TrieMapUtils { public static <K> Counter<Iterable<K>> trieMapCounter() { return new ClassicCounter<>(TrieMapUtils.<K, MutableDouble>trieMapFactory()); } public static <K,V> CollectionValuedMap<Iterable<K>, V> collectionValuedTrieMap() { return new CollectionValuedMap<>( TrieMapUtils.<K, Collection<V>>trieMapFactory(), CollectionFactory.<V>hashSetFactory(), false); } public static <K,V> CollectionValuedMap<Iterable<K>, V> collectionValuedTrieMap(CollectionFactory<V> collectionFactory) { return new CollectionValuedMap<>( TrieMapUtils.<K, Collection<V>>trieMapFactory(), collectionFactory, false); } @SuppressWarnings("unchecked") public static <K,V> MapFactory<Iterable<K>,V> trieMapFactory() { return TRIE_MAP_FACTORY; } @SuppressWarnings("unchecked") private static final MapFactory TRIE_MAP_FACTORY = new TrieMapFactory(); private static class TrieMapFactory<K,V> extends MapFactory<Iterable<K>,V> { private static final long serialVersionUID = 1; @Override public Map<Iterable<K>,V> newMap() { return new TrieMap<>(); } @Override public Map<Iterable<K>,V> newMap(int initCapacity) { return new TrieMap<>(initCapacity); } @Override public Set<Iterable<K>> newSet() { return Collections.newSetFromMap(new TrieMap<>()); } @Override public Set<Iterable<K>> newSet(Collection<Iterable<K>> init) { Set<Iterable<K>> set = Collections.newSetFromMap(new TrieMap<>()); init.addAll(init); return set; } @Override public <K1, V1> Map<K1, V1> setMap(Map<K1, V1> map) { throw new UnsupportedOperationException(); } @Override public <K1, V1> Map<K1, V1> setMap(Map<K1,V1> map, int initCapacity) { throw new UnsupportedOperationException(); } } // end class TrieMapFactory }