content: // Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
  //  This source code is licensed under both the GPLv2 (found in the
  //  COPYING file in the root directory) and Apache 2.0 License
  //  (found in the LICENSE.Apache file in the root directory).
  
  package org.rocksdb;
  
  public abstract class AbstractWriteBatch extends RocksObject
      implements WriteBatchInterface {
  
    protected AbstractWriteBatch(final long nativeHandle) {
      super(nativeHandle);
    }
  
    @Override
    public int count() {
      return count0(nativeHandle_);
    }
  
    @Override
    public void put(byte[] key, byte[] value) {
      put(nativeHandle_, key, key.length, value, value.length);
    }
  
    @Override
    public void put(ColumnFamilyHandle columnFamilyHandle, byte[] key,
        byte[] value) {
      put(nativeHandle_, key, key.length, value, value.length,
          columnFamilyHandle.nativeHandle_);
    }
  
    @Override
    public void merge(byte[] key, byte[] value) {
      merge(nativeHandle_, key, key.length, value, value.length);
    }
  
    @Override
    public void merge(ColumnFamilyHandle columnFamilyHandle, byte[] key,
        byte[] value) {
      merge(nativeHandle_, key, key.length, value, value.length,
          columnFamilyHandle.nativeHandle_);
    }
  
    @Override
    public void remove(byte[] key) {
      remove(nativeHandle_, key, key.length);
    }
  
    @Override
    public void remove(ColumnFamilyHandle columnFamilyHandle, byte[] key) {
      remove(nativeHandle_, key, key.length, columnFamilyHandle.nativeHandle_);
    }
  
    @Override
    public void deleteRange(byte[] beginKey, byte[] endKey) {
      deleteRange(nativeHandle_, beginKey, beginKey.length, endKey, endKey.length);
    }
  
    @Override
    public void deleteRange(ColumnFamilyHandle columnFamilyHandle, byte[] beginKey, byte[] endKey) {
      deleteRange(nativeHandle_, beginKey, beginKey.length, endKey, endKey.length,
          columnFamilyHandle.nativeHandle_);
    }
  
    @Override
    public void putLogData(byte[] blob) {
      putLogData(nativeHandle_, blob, blob.length);
    }
  
    @Override
    public void clear() {
      clear0(nativeHandle_);
    }
  
    @Override
    public void setSavePoint() {
      setSavePoint0(nativeHandle_);
    }
  
    @Override
    public void rollbackToSavePoint() throws RocksDBException {
      rollbackToSavePoint0(nativeHandle_);
    }
  
    abstract int count0(final long handle);
  
    abstract void put(final long handle, final byte[] key, final int keyLen,
        final byte[] value, final int valueLen);
  
    abstract void put(final long handle, final byte[] key, final int keyLen,
        final byte[] value, final int valueLen, final long cfHandle);
  
    abstract void merge(final long handle, final byte[] key, final int keyLen,
        final byte[] value, final int valueLen);
  
    abstract void merge(final long handle, final byte[] key, final int keyLen,
        final byte[] value, final int valueLen, final long cfHandle);
  
    abstract void remove(final long handle, final byte[] key,
        final int keyLen);
  
    abstract void remove(final long handle, final byte[] key,
        final int keyLen, final long cfHandle);
  
    abstract void deleteRange(final long handle, final byte[] beginKey, final int beginKeyLen,
        final byte[] endKey, final int endKeyLen);
  
    abstract void deleteRange(final long handle, final byte[] beginKey, final int beginKeyLen,
        final byte[] endKey, final int endKeyLen, final long cfHandle);
  
    abstract void putLogData(final long handle, final byte[] blob,
        final int blobLen);
  
    abstract void clear0(final long handle);
  
    abstract void setSavePoint0(final long handle);
  
    abstract void rollbackToSavePoint0(final long handle);
  }
  