Add doc + refactor + fix formatting

This commit is contained in:
Ankit Gupta 2014-04-19 13:05:21 -07:00
parent 1d6c1e018f
commit dc28a726c1
7 changed files with 111 additions and 73 deletions

View File

@ -141,9 +141,9 @@ public class RocksDBSample {
System.out.println("Failed in call to geHistogramData()");
assert(false); //Should never reach here.
}
Iterator iterator = db.iterator();
boolean seekToFirstPassed = false;
for (iterator.seekToFirst(); iterator.isValid(); iterator.next()) {
iterator.status();
@ -154,7 +154,7 @@ public class RocksDBSample {
if(seekToFirstPassed) {
System.out.println("iterator seekToFirst tests passed.");
}
boolean seekToLastPassed = false;
for (iterator.seekToLast(); iterator.isValid(); iterator.prev()) {
iterator.status();
@ -162,18 +162,18 @@ public class RocksDBSample {
assert(iterator.value() != null);
seekToLastPassed = true;
}
if(seekToLastPassed) {
System.out.println("iterator seekToLastPassed tests passed.");
}
iterator.seekToFirst();
iterator.seek(iterator.key());
assert(iterator.key() != null);
assert(iterator.value() != null);
System.out.println("iterator seek test passed.");
iterator.close();
System.out.println("iterator tests passed.");
} catch (RocksDBException e) {

View File

@ -7,70 +7,70 @@ package org.rocksdb;
public class Iterator {
private long nativeHandle_;
public Iterator(long nativeHandle) {
nativeHandle_ = nativeHandle;
}
public boolean isValid() {
assert(isInitialized());
return isValid0(nativeHandle_);
}
public void seekToFirst() {
assert(isInitialized());
seekToFirst0(nativeHandle_);
}
public void seekToLast() {
assert(isInitialized());
seekToLast0(nativeHandle_);
}
public void next() {
assert(isInitialized());
next0(nativeHandle_);
}
public void prev() {
assert(isInitialized());
prev0(nativeHandle_);
}
public byte[] key() {
assert(isInitialized());
return key0(nativeHandle_);
}
public byte[] value() {
assert(isInitialized());
return value0(nativeHandle_);
}
public void seek(byte[] target) {
assert(isInitialized());
seek0(nativeHandle_, target, target.length);
}
public void status(){
assert(isInitialized());
status0(nativeHandle_);
}
public synchronized void close() {
if(nativeHandle_ != 0) {
close0(nativeHandle_);
}
}
@Override protected void finalize() {
close();
}
private boolean isInitialized() {
return (nativeHandle_ != 0);
}
private native boolean isValid0(long handle);
private native void close0(long handle);
private native void seekToFirst0(long handle);
@ -81,4 +81,4 @@ public class Iterator {
private native byte[] value0(long handle);
private native void seek0(long handle, byte[] target, int targetLen);
private native void status0(long handle);
}
}

View File

@ -508,7 +508,7 @@ public class Options {
return maxBackgroundCompactions(nativeHandle_);
}
/**
/**
* Creates statistics object which collects metrics about database operations.
Statistics objects should not be shared between DB instances as
it does not use any locks to prevent concurrent updates.

View File

@ -135,7 +135,7 @@ public class RocksDB {
throws RocksDBException {
remove(nativeHandle_, writeOpt.nativeHandle_, key, key.length);
}
public Iterator iterator() {
return new Iterator(iterator0(nativeHandle_));
}

View File

@ -14,53 +14,71 @@
#include "rocksjni/portal.h"
#include "rocksdb/iterator.h"
/*
* Class: org_rocksdb_Iterator
* Method: isValid0
* Signature: (J)Z
*/
jboolean Java_org_rocksdb_Iterator_isValid0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
return st->Valid();
auto it = rocksdb::IteratorJni::getIterator(handle);
return it->Valid();
}
/*
* Class: org_rocksdb_Iterator
* Method: close0
* Signature: (J)V
*/
void Java_org_rocksdb_Iterator_seekToFirst0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
st->SeekToFirst();
auto it = rocksdb::IteratorJni::getIterator(handle);
it->SeekToFirst();
}
/*
* Class: org_rocksdb_Iterator
* Method: seekToFirst0
* Signature: (J)V
*/
void Java_org_rocksdb_Iterator_seekToLast0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
st->SeekToLast();
auto it = rocksdb::IteratorJni::getIterator(handle);
it->SeekToLast();
}
/*
* Class: org_rocksdb_Iterator
* Method: seekToLast0
* Signature: (J)V
*/
void Java_org_rocksdb_Iterator_next0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
st->Next();
auto it = rocksdb::IteratorJni::getIterator(handle);
it->Next();
}
/*
* Class: org_rocksdb_Iterator
* Method: next0
* Signature: (J)V
*/
void Java_org_rocksdb_Iterator_prev0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
st->Prev();
auto it = rocksdb::IteratorJni::getIterator(handle);
it->Prev();
}
/*
* Class: org_rocksdb_Iterator
* Method: prev0
* Signature: (J)V
*/
jbyteArray Java_org_rocksdb_Iterator_key0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
rocksdb::Slice key_slice = st->key();
auto it = rocksdb::IteratorJni::getIterator(handle);
rocksdb::Slice key_slice = it->key();
jbyteArray jkey = env->NewByteArray(key_slice.size());
env->SetByteArrayRegion(
jkey, 0, key_slice.size(),
@ -68,13 +86,16 @@ jbyteArray Java_org_rocksdb_Iterator_key0(
return jkey;
}
/*
* Class: org_rocksdb_Iterator
* Method: key0
* Signature: (J)[B
*/
jbyteArray Java_org_rocksdb_Iterator_value0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
rocksdb::Slice value_slice = st->value();
auto it = rocksdb::IteratorJni::getIterator(handle);
rocksdb::Slice value_slice = it->value();
jbyteArray jvalue = env->NewByteArray(value_slice.size());
env->SetByteArrayRegion(
jvalue, 0, value_slice.size(),
@ -82,41 +103,50 @@ jbyteArray Java_org_rocksdb_Iterator_value0(
return jvalue;
}
/*
* Class: org_rocksdb_Iterator
* Method: value0
* Signature: (J)[B
*/
void Java_org_rocksdb_Iterator_seek0(
JNIEnv* env, jobject jobj, jlong handle,
jbyteArray jtarget, jint jtarget_len) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
auto it = rocksdb::IteratorJni::getIterator(handle);
jbyte* target = env->GetByteArrayElements(jtarget, 0);
rocksdb::Slice target_slice(
reinterpret_cast<char*>(target), jtarget_len);
st->Seek(target_slice);
it->Seek(target_slice);
env->ReleaseByteArrayElements(jtarget, target, JNI_ABORT);
}
/*
* Class: org_rocksdb_Iterator
* Method: seek0
* Signature: (J[BI)V
*/
void Java_org_rocksdb_Iterator_status0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
rocksdb::Status s = st->status();
auto it = rocksdb::IteratorJni::getIterator(handle);
rocksdb::Status s = it->status();
if (s.ok()) {
return;
}
rocksdb::RocksDBExceptionJni::ThrowNew(env, s);
}
/*
* Class: org_rocksdb_Iterator
* Method: status0
* Signature: (J)V
*/
void Java_org_rocksdb_Iterator_close0(
JNIEnv* env, jobject jobj, jlong handle) {
auto st = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(st != nullptr);
delete st;
auto it = rocksdb::IteratorJni::getIterator(handle);
delete it;
rocksdb::IteratorJni::setHandle(env, jobj, nullptr);
}
}

View File

@ -245,6 +245,14 @@ class IteratorJni {
jobj, getHandleFieldID(env),
reinterpret_cast<jlong>(op));
}
// Cast long to rocksdb::Iterator pointer.
static rocksdb::Iterator* getIterator(jlong handle) {
auto it = reinterpret_cast<rocksdb::Iterator*>(handle);
assert(it != nullptr);
return it;
}
};
} // namespace rocksdb
#endif // JAVA_ROCKSJNI_PORTAL_H_

View File

@ -302,4 +302,4 @@ jlong Java_org_rocksdb_RocksDB_iterator0(
auto db = reinterpret_cast<rocksdb::DB*>(db_handle);
rocksdb::Iterator* iterator = db->NewIterator(rocksdb::ReadOptions());
return reinterpret_cast<jlong>(iterator);
}
}