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;
  
  /**
   * RocksObject is an implementation of {@link AbstractNativeReference} which
   * has an immutable and therefore thread-safe reference to the underlying
   * native C++ RocksDB object.
   * <p>
   * RocksObject is the base-class of almost all RocksDB classes that have a
   * pointer to some underlying native C++ {@code rocksdb} object.</p>
   * <p>
   * The use of {@code RocksObject} should always be preferred over
   * {@link RocksMutableObject}.</p>
   */
  public abstract class RocksObject extends AbstractImmutableNativeReference {
  
    /**
     * An immutable reference to the value of the C++ pointer pointing to some
     * underlying native RocksDB C++ object.
     */
    protected final long nativeHandle_;
  
    protected RocksObject(final long nativeHandle) {
      super(true);
      this.nativeHandle_ = nativeHandle;
    }
  
    /**
     * Deletes underlying C++ object pointer.
     */
    @Override
    protected void disposeInternal() {
      disposeInternal(nativeHandle_);
    }
  
    protected abstract void disposeInternal(final long handle);
  }
  