// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under the BSD-style license found in the // LICENSE file in the root directory of this source tree. An additional grant // of patent rights can be found in the PATENTS file in the same directory. // // This file implements the "bridge" between Java and C++ for MemTables. #include "rocksjni/portal.h" #include "include/org_rocksdb_HashSkipListMemTableConfig.h" #include "include/org_rocksdb_HashLinkedListMemTableConfig.h" #include "include/org_rocksdb_VectorMemTableConfig.h" #include "include/org_rocksdb_SkipListMemTableConfig.h" #include "rocksdb/memtablerep.h" /* * Class: org_rocksdb_HashSkipListMemTableConfig * Method: newMemTableFactoryHandle * Signature: (JII)J */ jlong Java_org_rocksdb_HashSkipListMemTableConfig_newMemTableFactoryHandle( JNIEnv* env, jobject jobj, jlong jbucket_count, jint jheight, jint jbranching_factor) { rocksdb::Status s = rocksdb::check_if_jlong_fits_size_t(jbucket_count); if (s.ok()) { return reinterpret_cast(rocksdb::NewHashSkipListRepFactory( static_cast(jbucket_count), static_cast(jheight), static_cast(jbranching_factor))); } rocksdb::IllegalArgumentExceptionJni::ThrowNew(env, s); return 0; } /* * Class: org_rocksdb_HashLinkedListMemTableConfig * Method: newMemTableFactoryHandle * Signature: (JJIZI)J */ jlong Java_org_rocksdb_HashLinkedListMemTableConfig_newMemTableFactoryHandle( JNIEnv* env, jobject jobj, jlong jbucket_count, jlong jhuge_page_tlb_size, jint jbucket_entries_logging_threshold, jboolean jif_log_bucket_dist_when_flash, jint jthreshold_use_skiplist) { rocksdb::Status statusBucketCount = rocksdb::check_if_jlong_fits_size_t(jbucket_count); rocksdb::Status statusHugePageTlb = rocksdb::check_if_jlong_fits_size_t(jhuge_page_tlb_size); if (statusBucketCount.ok() && statusHugePageTlb.ok()) { return reinterpret_cast(rocksdb::NewHashLinkListRepFactory( static_cast(jbucket_count), static_cast(jhuge_page_tlb_size), static_cast(jbucket_entries_logging_threshold), static_cast(jif_log_bucket_dist_when_flash), static_cast(jthreshold_use_skiplist))); } rocksdb::IllegalArgumentExceptionJni::ThrowNew(env, !statusBucketCount.ok()?statusBucketCount:statusHugePageTlb); return 0; } /* * Class: org_rocksdb_VectorMemTableConfig * Method: newMemTableFactoryHandle * Signature: (J)J */ jlong Java_org_rocksdb_VectorMemTableConfig_newMemTableFactoryHandle( JNIEnv* env, jobject jobj, jlong jreserved_size) { rocksdb::Status s = rocksdb::check_if_jlong_fits_size_t(jreserved_size); if (s.ok()) { return reinterpret_cast(new rocksdb::VectorRepFactory( static_cast(jreserved_size))); } rocksdb::IllegalArgumentExceptionJni::ThrowNew(env, s); return 0; } /* * Class: org_rocksdb_SkipListMemTableConfig * Method: newMemTableFactoryHandle0 * Signature: (J)J */ jlong Java_org_rocksdb_SkipListMemTableConfig_newMemTableFactoryHandle0( JNIEnv* env, jobject jobj, jlong jlookahead) { rocksdb::Status s = rocksdb::check_if_jlong_fits_size_t(jlookahead); if (s.ok()) { return reinterpret_cast(new rocksdb::SkipListFactory( static_cast(jlookahead))); } rocksdb::IllegalArgumentExceptionJni::ThrowNew(env, s); return 0; }