/** * Equivalent to <code>{@link #incrementCount}({o}, count)</code>; only works for a depth 1 * GeneralizedCounter. */ public void incrementCount1D(K o, double count) { if (depth > 1) { wrongDepth(); } addToTotal(count); if (tempMDouble == null) { tempMDouble = new MutableDouble(); } tempMDouble.set(count); MutableDouble oldMDouble = (MutableDouble) map.put(o, tempMDouble); if (oldMDouble != null) { tempMDouble.set(count + oldMDouble.doubleValue()); } tempMDouble = oldMDouble; }
/* this is (non-tail) recursive right now, haven't figured out a way * to speed it up */ private Set<Map.Entry<Object, Double>> entrySet( Set<Map.Entry<Object, Double>> s, Object[] key, boolean useLists) { if (depth == 1) { // System.out.println("key is long enough to add to set"); Set<K> keys = map.keySet(); for (K finalKey : keys) { // array doesn't escape K[] newKey = ErasureUtils.<K>mkTArray(Object.class, key.length + 1); if (key.length > 0) { System.arraycopy(key, 0, newKey, 0, key.length); } newKey[key.length] = finalKey; MutableDouble value = (MutableDouble) map.get(finalKey); Double value1 = new Double(value.doubleValue()); if (useLists) { s.add(new Entry<Object, Double>(Arrays.asList(newKey), value1)); } else { s.add(new Entry<Object, Double>(newKey[0], value1)); } } } else { Set<K> keys = map.keySet(); // System.out.println("key length " + key.length); // System.out.println("keyset level " + depth + " " + keys); for (K o : keys) { Object[] newKey = new Object[key.length + 1]; if (key.length > 0) { System.arraycopy(key, 0, newKey, 0, key.length); } newKey[key.length] = o; // System.out.println("level " + key.length + " current key " + Arrays.asList(newKey)); conditionalizeHelper(o).entrySet(s, newKey, true); } } // System.out.println("leaving key length " + key.length); return s; }