// 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;

/**
 * <p>A RocksEnv is an interface used by the rocksdb implementation to access
 * operating system functionality like the filesystem etc.</p>
 *
 * <p>All Env implementations are safe for concurrent access from
 * multiple threads without any external synchronization.</p>
 */
public class RocksEnv extends Env {

  /**
   * <p>Package-private constructor that uses the specified native handle
   * to construct a RocksEnv.</p>
   *
   * <p>Note that the ownership of the input handle
   * belongs to the caller, and the newly created RocksEnv will not take
   * the ownership of the input handle.  As a result, calling
   * {@code dispose()} of the created RocksEnv will be no-op.</p>
   */
  RocksEnv(final long handle) {
    super(handle);
    disOwnNativeHandle();
  }

  /**
   * <p>The helper function of {@link #dispose()} which all subclasses of
   * {@link RocksObject} must implement to release their associated C++
   * resource.</p>
   *
   * <p><strong>Note:</strong> this class is used to use the default
   * RocksEnv with RocksJava. The default env allocation is managed
   * by C++.</p>
   */
  @Override
  protected final void disposeInternal(final long handle) {
  }
}
