package ezdb.leveldb; import java.io.IOException; import org.iq80.leveldb.DB; import org.iq80.leveldb.WriteBatch; import ezdb.batch.RangeBatch; import ezdb.serde.Serde; import ezdb.util.Util; public class EzLevelDbBatch<H, R, V> implements RangeBatch<H, R, V> { private final DB db; private final WriteBatch writeBatch; private Serde<H> hashKeySerde; private Serde<R> rangeKeySerde; private Serde<V> valueSerde; public EzLevelDbBatch(DB db, Serde<H> hashKeySerde, Serde<R> rangeKeySerde, Serde<V> valueSerde) { this.db = db; this.writeBatch = db.createWriteBatch(); this.hashKeySerde = hashKeySerde; this.rangeKeySerde = rangeKeySerde; this.valueSerde = valueSerde; } @Override public void put(H hashKey, V value) { put(hashKey, null, value); } @Override public void delete(H hashKey) { delete(hashKey, null); } @Override public void flush() { db.write(writeBatch); } @Override public void close() throws IOException { writeBatch.close(); } @Override public void put(H hashKey, R rangeKey, V value) { writeBatch.put( Util.combine(hashKeySerde, rangeKeySerde, hashKey, rangeKey), valueSerde.toBytes(value)); } @Override public void delete(H hashKey, R rangeKey) { writeBatch.delete(Util.combine(hashKeySerde, rangeKeySerde, hashKey, rangeKey)); } }