@SuppressWarnings("unchecked") @Override protected void getAsync(UserTObject object, Object key, FutureWithCallback<Object> future) { if (object.getSharedVersion_objectfabric().getUnion() instanceof Record) { long record = getOrFetchRecord(object.getSharedVersion_objectfabric()); if (Record.isStored(record)) { BTree tree = BTree.load(getRecordManager(), record, false); _writer.write(key); byte[] data = new byte[_writer.getOffset()]; PlatformAdapter.arraycopy(_writer.getBuffer(), 0, data, 0, data.length); long id = tree.fetch(data); if (id != 0) { data = getRecordManager().fetch(id); Object value = _reader.read(data); _reader.readVersions(); Version version = _reader.getOrCreateVersion(object); TKeyedEntry entry = new TKeyedEntry(key, TKeyed.hash(key), value, false); if (Debug.ENABLED) Debug.assertion(value != TKeyedEntry.REMOVAL); ((LazyMapVersion) version).putEntry(key, entry, true, true); _reader.importVersions(); future.set(value); return; } } } future.set(null); }
@Override protected void setRootAsync(Object value, FutureWithCallback<Void> future) { if (value instanceof UserTObject && ((UserTObject) value).getTrunk().getStore() != BinaryStore.this) future.setException(new RuntimeException(Strings.WRONG_STORE)); else { byte[] data = writeObject(value); long id = _jdbm.getRoot(ROOT); if (id != 0) _jdbm.update(id, data); else { id = _jdbm.insert(data); _jdbm.setRoot(ROOT, id); } future.set(null); } }
@Override protected void getRootAsync(FutureWithCallback<Object> future) { long rootId = _jdbm.getRoot(ROOT); byte[] data = null; if (rootId == 0) future.set(null); else { data = _jdbm.fetch(rootId); if (data == null) throw new RuntimeIOException(Strings.CORRUPTED_STORE); Object root = _reader.read(data); _reader.readVersions(); _reader.importVersions(); future.set(root); } }