From fadc9d01f662ab001d9fdd0fd92c5f0c177557cd Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Sat, 27 Jul 2019 23:10:16 -0400 Subject: Reimplement AbbrevMap, and implement Multimap This reimplements the old AbbrevMap structure as AbbrevMap2, and created a new Multimap structure as a apart of it. Multimap is exactly what it sounds like; a map that allows multiple values for a given key. The only real thing that is different about it, is that if you add a key-value pair multiple times, you'll have to remove it multiple times. --- src/main/java/bjc/esodata/AbbrevMap.java | 206 ------------------------------- 1 file changed, 206 deletions(-) delete mode 100644 src/main/java/bjc/esodata/AbbrevMap.java (limited to 'src/main/java/bjc/esodata/AbbrevMap.java') diff --git a/src/main/java/bjc/esodata/AbbrevMap.java b/src/main/java/bjc/esodata/AbbrevMap.java deleted file mode 100644 index 51ec5c0..0000000 --- a/src/main/java/bjc/esodata/AbbrevMap.java +++ /dev/null @@ -1,206 +0,0 @@ -package bjc.esodata; - -import java.util.*; - -import bjc.funcdata.*; - -/* - * Represents a mapping from a set of strings to a mapping of all unambiguous - * prefixes of their respective strings. - * - * This works the same as Ruby's Abbrev module. - * - * @author EVE - */ -//public class AbbrevMap { -// private ThresholdSet wordSet; -// -// /* All of the words we have abbreviations for. */ -// private final Set wrds; -// -// /* Maps abbreviations to their strings. */ -// private IMap abbrevMap; -// -// /* Counts how many times we've seen a substring. */ -// private Set seen; -// -// /* Maps ambiguous abbreviations to the strings they could be. */ -// private SetMultimap ambMap; -// -// /** -// * Create a new abbreviation map. -// * -// * @param words -// * The initial set of words to put in the map. -// */ -// public AbbrevMap(final String... words) { -// wrds = new HashSet<>(Arrays.asList(words)); -// -// recalculate(); -// } -// -// /** -// * Recalculate all the abbreviations in this map. -// * -// * This may be needed after certain operations to ensure that all of the -// * results are correct. -// */ -// public void recalculate() { -// abbrevMap = new FunctionalMap<>(); -// -// ambMap = HashMultimap.create(); -// -// seen = new HashSet<>(); -// -// for(final String word : wrds) { -// intAddWord(word); -// } -// } -// -// /** -// * Adds words to the abbreviation map. -// * -// * @param words -// * The words to add to the abbreviation map. -// */ -// public void addWords(final String... words) { -// wrds.addAll(Arrays.asList(words)); -// -// for(final String word : words) { -// intAddWord(word); -// } -// } -// -// /* Actually add abbreviations of a word. */ -// private void intAddWord(final String word) { -// /* A word always abbreviates to itself. */ -// abbrevMap.put(word, word); -// -// /* Skip blank words. */ -// if(word.equals("")) return; -// -// /* Handle each possible abbreviation. */ -// for(int i = word.length(); i > 0; i--) { -// final String subword = word.substring(0, i); -// -// if(seen.contains(subword)) { -// /* -// * Remove a mapping if its ambiguous and not a -// * whole word. -// */ -// if(abbrevMap.containsKey(subword) && !wrds.contains(subword)) { -// final String oldword = abbrevMap.remove(subword); -// -// ambMap.put(subword, oldword); -// ambMap.put(subword, word); -// } else if(!wrds.contains(subword)) { -// ambMap.put(subword, word); -// } -// } else { -// seen.add(subword); -// -// abbrevMap.put(subword, word); -// } -// } -// } -// -// /** -// * Removes words from the abbreviation map. -// * -// * NOTE: There may be inconsistent behavior after removing a word from -// * the map. Use {@link AbbrevMap#recalculate()} to fix it if it occurs. -// * -// * @param words -// * The words to remove. -// */ -// public void removeWords(final String... words) { -// wrds.removeAll(Arrays.asList(words)); -// -// for(final String word : words) { -// intRemoveWord(word); -// } -// } -// -// /* Actually remove a word. */ -// private void intRemoveWord(final String word) { -// /* Skip blank words. */ -// if(word.equals("")) return; -// -// /* Handle each possible abbreviation. */ -// for(int i = word.length(); i > 0; i--) { -// final String subword = word.substring(0, i); -// -// if(abbrevMap.containsKey(subword)) { -// abbrevMap.remove(subword); -// } else { -// ambMap.remove(subword, word); -// -// final Set possWords = ambMap.get(subword); -// -// if(possWords.size() == 0) { -// seen.remove(subword); -// } else if(possWords.size() == 1) { -// /* -// * An abbreviation went from ambiguous -// * to non-ambiguous. -// */ -// final String newWord = possWords.iterator().next(); -// -// abbrevMap.put(subword, newWord); -// ambMap.remove(subword, newWord); -// } -// } -// } -// } -// -// /** -// * Convert an abbreviation into all the strings it could abbreviate -// * into. -// * -// * @param abbrev -// * The abbreviation to convert. -// * -// * @return All the expansions for the provided abbreviation. -// */ -// public String[] deabbrev(final String abbrev) { -// if(abbrevMap.containsKey(abbrev)) { -// return new String[] { -// abbrevMap.get(abbrev) -// }; -// } -// -// return ambMap.get(abbrev).toArray(new String[0]); -// } -// -// @Override -// public int hashCode() { -// final int prime = 31; -// -// int result = 1; -// result = prime * result + (wrds == null ? 0 : wrds.hashCode()); -// -// return result; -// } -// -// @Override -// public boolean equals(final Object obj) { -// if(this == obj) return true; -// if(obj == null) return false; -// if(!(obj instanceof AbbrevMap)) return false; -// -// final AbbrevMap other = (AbbrevMap) obj; -// -// if(wrds == null) { -// if(other.wrds != null) return false; -// } else if(!wrds.equals(other.wrds)) return false; -// -// return true; -// } -// -// @Override -// public String toString() { -// final String fmt = "AbbrevMap [wrds=%s, abbrevMap=%s, seen=%s, ambMap=%s]"; -// -// return String.format(fmt, wrds, abbrevMap, seen, ambMap); -// } -//} -- cgit v1.2.3