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;
  
  /**
   * ColumnFamilyHandle class to hold handles to underlying rocksdb
   * ColumnFamily Pointers.
   */
  public class ColumnFamilyHandle extends RocksObject {
    ColumnFamilyHandle(final RocksDB rocksDB,
        final long nativeHandle) {
      super(nativeHandle);
      // rocksDB must point to a valid RocksDB instance;
      assert(rocksDB != null);
      // ColumnFamilyHandle must hold a reference to the related RocksDB instance
      // to guarantee that while a GC cycle starts ColumnFamilyHandle instances
      // are freed prior to RocksDB instances.
      this.rocksDB_ = rocksDB;
    }
  
    /**
     * <p>Deletes underlying C++ iterator pointer.</p>
     *
     * <p>Note: the underlying handle can only be safely deleted if the RocksDB
     * instance related to a certain ColumnFamilyHandle is still valid and
     * initialized. Therefore {@code disposeInternal()} checks if the RocksDB is
     * initialized before freeing the native handle.</p>
     */
    @Override
    protected void disposeInternal() {
      if(rocksDB_.isOwningHandle()) {
        disposeInternal(nativeHandle_);
      }
    }
  
    @Override protected final native void disposeInternal(final long handle);
  
    private final RocksDB rocksDB_;
  }
  