@Override public <T> T decode(Type type, byte[] value) { return (T) getLexicoder(type).decode(value); }
@Override public Map<K, V> decode(byte[] b) { byte[][] escapedElements = split(b); Map<K, V> decodedMap = new HashMap<>(); for (int i = 0; i < escapedElements.length; i += 2) { K key = keyLexicoder.decode(unescape(escapedElements[i])); V value = valueLexicoder.decode(unescape(escapedElements[i + 1])); decodedMap.put(key, value); } return decodedMap; } }
@Override protected T decodeUnchecked(byte[] data, int offset, int len) { byte ret[] = new byte[len - 1]; int dataIndex; for (int i = 0; i < ret.length; i++) { dataIndex = offset + i; ret[i] = (byte) (0xff - (0xff & data[dataIndex])); } return lexicoder.decode(unescape(ret)); } }
@Override protected List<LT> decodeUnchecked(byte[] b, int offset, int len) { byte[][] escapedElements = split(b, offset, len); ArrayList<LT> ret = new ArrayList<>(escapedElements.length); for (byte[] escapedElement : escapedElements) { ret.add(lexicoder.decode(unescape(escapedElement))); } return ret; } }
@Override protected ComparablePair<A,B> decodeUnchecked(byte[] data, int offset, int len) { byte[][] fields = split(data, offset, len); if (fields.length != 2) { throw new RuntimeException("Data does not have 2 fields, it has " + fields.length); } return new ComparablePair<>(firstLexicoder.decode(unescape(fields[0])), secondLexicoder.decode(unescape(fields[1]))); }
@Override public void update(Key k, Value v) { int tri = UINTEGER_LEXICODER.decode(v.get()); if( tri % 2 == 0 ) return; triangles += (tri-1)/2; }
@Override protected T decodeUnchecked(byte[] data, int offset, int len) { byte ret[] = new byte[len - 1]; int dataIndex; for (int i = 0; i < ret.length; i++) { dataIndex = offset + i; ret[i] = (byte) (0xff - (0xff & data[dataIndex])); } return lexicoder.decode(unescape(ret)); } }
@Override protected List<LT> decodeUnchecked(byte[] b, int offset, int len) { byte[][] escapedElements = split(b, offset, len); ArrayList<LT> ret = new ArrayList<>(escapedElements.length); for (byte[] escapedElement : escapedElements) { ret.add(lexicoder.decode(unescape(escapedElement))); } return ret; } }
@Override protected ComparablePair<A,B> decodeUnchecked(byte[] data, int offset, int len) { byte[][] fields = split(data, offset, len); if (fields.length != 2) { throw new RuntimeException("Data does not have 2 fields, it has " + fields.length); } return new ComparablePair<>(firstLexicoder.decode(unescape(fields[0])), secondLexicoder.decode(unescape(fields[1]))); }
@Override public Value getTopValue() { Value v = super.getTopValue(); v.set(Double.toString(LEXDOUBLE.decode(super.getTopValue().get())).getBytes(UTF_8)); return v; }
@Override public Iterator<? extends Map.Entry<Key, Value>> apply(Key k, Value v) { // log.info("keyretainonlyapply see "+k.toStringNoTime()+" -> "+INTEGER_LEXICODER.decode(v.get())); final int i = INTEGER_LEXICODER.decode(v.get()); final int inew = i % 2 == 0 ? (i/2)*(i-1) : ((i-1)/2)*i; // try to avoi overflow final Value vnew = new Value(INTEGER_LEXICODER.encode(inew)); return Iterators.singletonIterator(new AbstractMap.SimpleImmutableEntry<>(k, vnew)); }
final long thisCnt = UINTEGER_LEXICODER.decode(next.getValue().get()); cnt += thisCnt*(thisCnt-1)/2; if( cnt >= threshold ) {
public long sumAllPowerLawTriangle(final String table) { Objects.requireNonNull(table); final BatchScanner bs; try { bs = connector.createBatchScanner(table, Authorizations.EMPTY, 50); // todo: 50 threads is arbitrary } catch (TableNotFoundException e) { log.error("table "+table+" does not exist", e); throw new RuntimeException(e); } bs.setRanges(Collections.singleton(new Range())); bs.addScanIterator(KeyRetainOnlyApply.iteratorSetting(28, null)); bs.addScanIterator(PowerLawDegreeTriangleApply.iteratorSetting(29)); final IteratorSetting itset = new IteratorSetting(30, "sumAllPowerLawTriangle", IntSummingCombiner.class); IntSummingCombiner.setEncodingType(itset, Type.BYTE); IntSummingCombiner.setCombineAllColumns(itset, true); bs.addScanIterator(itset); long cnt = 0L; try { for (Map.Entry<Key, Value> entry : bs) { cnt += UINTEGER_LEXICODER.decode(entry.getValue().get()); } } finally { bs.close(); } log.info("sumAllPowerLawTriangle: "+cnt); return cnt; }