/** * This method puts the last element in the removed elements slot, and * pops off the back, thus preserving contiguity but losing ordering. * @param ledgerIndex the ledger entry index to remove */ public boolean removeUnstable(Hash256 ledgerIndex) { int i = indexOf(ledgerIndex); if (i == -1) { return false; } int last = size() - 1; Hash256 lastIndex = get(last); set(i, lastIndex); remove(last); return true; }
@Override public Object toJSON() { return toJSONArray(); }
Vector256 randomIndexes = new Vector256(); Vector256 prefixedIndexes = new Vector256(); if (usePrefixedKey()) { key = randomPrefixedHash(); prefixedIndexes.add(key); } else { key = randomHash(); randomIndexes.add(key); if (ledgersDone > 1 && MODIFIED_NODES_PER_LEDGER <= randomIndexes.size()) { for (int j = 0; j < MODIFIED_NODES_PER_LEDGER; j++) { ArrayList<Hash256> whichRandom; System.out.println("Random keys used: " + randomIndexes.size()); System.out.println("Prefixed keys used: " + prefixedIndexes.size()); System.out.println("Prefix Histogram"); for (Map.Entry<Integer, Integer> count : prefixIndexes.entrySet()) {
public void updateSkipLists(long currentIndex, Hash256 parentHash) { long prev = currentIndex - 1; if ((prev & 0xFF) == 0) { Hash256 skipIndex = Index.ledgerHashes(prev); LedgerHashes skip = createOrUpdateSkipList(skipIndex); Vector256 hashes = skip.hashes(); assert hashes.size() <= 256; hashes.add(parentHash); skip.put(UInt32.LastLedgerSequence, new UInt32(prev)); } Hash256 skipIndex = Index.ledgerHashes(); LedgerHashes skip = createOrUpdateSkipList(skipIndex); Vector256 hashes = skip.hashes(); if (hashes.size() > 256) throw new AssertionError(); if (hashes.size() == 256) { hashes.remove(0); } hashes.add(parentHash); skip.put(UInt32.LastLedgerSequence, new UInt32(prev)); }
public Iterable<Hash256> directoryIterator(OfferDirectory forQuality) { // TODO: create an actual iterator Vector256 indexes = new Vector256(); OfferDirectory cursor = forQuality; while (cursor != null) { indexes.addAll(cursor.indexes()); if (cursor.hasNextIndex()) { LedgerEntry le = getLE(cursor.nextIndex()); if (le instanceof OfferDirectory) { cursor = (OfferDirectory) le; } else { break; } } else { break; } } return indexes; }
private static LedgerHashes newSkipList(Hash256 skipIndex) { LedgerHashes skip; skip = new LedgerHashes(); skip.put(UInt32.Flags, new UInt32(0)); skip.hashes(new Vector256()); skip.index(skipIndex); return skip; }
private void addToDirectoryNode(DirectoryNode dn, Hash256 index) { onDirectoryModified(dn); dn.indexes().add(index); } private DirectoryNode getDirectoryForUpdating(Hash256 directoryIndex) {
private boolean directoryRemoveStable(DirectoryNode dn, Hash256 index) { onDirectoryModified(dn); return dn.indexes().remove(index); } private boolean directoryRemoveUnstable(DirectoryNode dn, Hash256 index) {
private boolean directoryRemoveUnstable(DirectoryNode dn, Hash256 index) { onDirectoryModified(dn); return dn.indexes().removeUnstable(index); } private void addToDirectoryNode(DirectoryNode dn, Hash256 index) {
@Override public void setDefaults() { super.setDefaults(); if (exchangeRate() != null) { setExchangeDefaults(); } if (indexes() == null) { indexes(new Vector256()); } } }
@Override public JSONArray toJSONArray(Vector256 obj) { return obj.toJSONArray(); }
public Vector256 lineIndexes() { Vector256 ret = new Vector256(); Amount takerGets = takerGets(); for (Amount amt : new Amount[]{takerGets, takerPays()}) { // Actually want to compare by reference here :) if (amt == takerGets()) { // selling own funds continue; } if (!amt.isNative()) { ret.add(lineIndex(amt)); } } return ret; }