diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 00000000..78f8453a --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +cozorocks \ No newline at end of file diff --git a/cozorocks/CMakeLists.txt b/cozorocks/CMakeLists.txt index e69de29b..6fabc705 100644 --- a/cozorocks/CMakeLists.txt +++ b/cozorocks/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.22) +project(cozorocks) + +set(CMAKE_CXX_STANDARD 17) + +include_directories("bridge") +include_directories("../deps/include") +include_directories("../target/cxxbridge") + +add_library(cozorocks "bridge/cozorocks.cc" "bridge/cozorocks.h") \ No newline at end of file diff --git a/cozorocks/bridge/cozorocks.cc b/cozorocks/bridge/cozorocks.cc index d4fdbe8e..ac3c2353 100644 --- a/cozorocks/bridge/cozorocks.cc +++ b/cozorocks/bridge/cozorocks.cc @@ -1,11 +1,12 @@ -//// -//// Created by Ziyang Hu on 2022/4/13. -//// // +// Created by Ziyang Hu on 2022/4/13. +// + #include "cozorocks.h" #include "cozorocks/src/lib.rs.h" -void write_status_impl(BridgeStatus &status, StatusCode code, StatusSubCode subcode, StatusSeverity severity, int bridge_code) { +void write_status_impl(BridgeStatus &status, StatusCode code, StatusSubCode subcode, StatusSeverity severity, + int bridge_code) { status.code = code; status.subcode = subcode; status.severity = severity; diff --git a/cozorocks/bridge/cozorocks.h b/cozorocks/bridge/cozorocks.h index 6f540d6b..2d209f5d 100644 --- a/cozorocks/bridge/cozorocks.h +++ b/cozorocks/bridge/cozorocks.h @@ -16,8 +16,8 @@ typedef std::shared_mutex Lock; -typedef std::unique_lock WriteLock; -typedef std::shared_lock ReadLock; +typedef std::unique_lock WriteLock; +typedef std::shared_lock ReadLock; using namespace ROCKSDB_NAMESPACE; @@ -120,15 +120,15 @@ struct OptionsBridge { } }; -inline std::unique_ptr new_read_options() { +inline std::unique_ptr new_read_options() { return std::unique_ptr(new ReadOptionsBridge); } -inline std::unique_ptr new_write_options() { +inline std::unique_ptr new_write_options() { return std::unique_ptr(new WriteOptionsBridge); } -inline std::unique_ptr new_options() { +inline std::unique_ptr new_options() { return std::unique_ptr(new OptionsBridge); } @@ -162,7 +162,7 @@ inline void write_status(Status &&rstatus, BridgeStatus &status) { } struct IteratorBridge { - mutable std::unique_ptr inner; + mutable std::unique_ptr inner; IteratorBridge(Iterator *it) : inner(it) {} @@ -192,11 +192,11 @@ struct IteratorBridge { inner->SeekForPrev(k); } - inline std::unique_ptr key_raw() const { + inline std::unique_ptr key_raw() const { return std::make_unique(inner->key()); } - inline std::unique_ptr value_raw() const { + inline std::unique_ptr value_raw() const { return std::make_unique(inner->value()); } @@ -234,20 +234,20 @@ struct WriteBatchBridge { } }; -inline unique_ptr new_write_batch_raw() { +inline unique_ptr new_write_batch_raw() { return make_unique(); } struct DBBridge { - mutable unique_ptr db; - mutable unordered_map > handles; + mutable unique_ptr db; + mutable unordered_map> handles; mutable Lock handle_lock; DBBridge(DB *db_, - unordered_map > &&handles_) : db(db_), handles(handles_) {} + unordered_map> &&handles_) : db(db_), handles(handles_) {} - inline shared_ptr get_cf_handle_raw(const string &name) const { + inline shared_ptr get_cf_handle_raw(const string &name) const { ReadLock r_lock(handle_lock); try { return handles.at(name); @@ -294,7 +294,7 @@ struct DBBridge { write_status(db->Write(options.inner, &updates.inner), status); } - inline std::unique_ptr get_raw( + inline std::unique_ptr get_raw( const ReadOptionsBridge &options, const ColumnFamilyHandle &cf, rust::Slice key, @@ -311,7 +311,7 @@ struct DBBridge { return pinnable_val; } - inline std::unique_ptr iterator_raw( + inline std::unique_ptr iterator_raw( const ReadOptionsBridge &options, const ColumnFamilyHandle &cf) const { return std::make_unique(db->NewIterator(options.inner, const_cast(&cf))); @@ -321,7 +321,8 @@ struct DBBridge { { ReadLock r_lock(handle_lock); if (handles.find(name) != handles.end()) { - write_status_impl(status, StatusCode::kMaxCode, StatusSubCode::kMaxSubCode, StatusSeverity::kSoftError, 2); + write_status_impl(status, StatusCode::kMaxCode, StatusSubCode::kMaxSubCode, StatusSeverity::kSoftError, + 2); return; } } @@ -345,9 +346,9 @@ struct DBBridge { // When should we call DestroyColumnFamilyHandle? } - inline unique_ptr > get_column_family_names_raw() const { + inline unique_ptr> get_column_family_names_raw() const { ReadLock r_lock(handle_lock); - auto ret = make_unique < vector < string >> (); + auto ret = make_unique>(); for (auto entry: handles) { ret->push_back(entry.first); } @@ -356,7 +357,7 @@ struct DBBridge { }; -inline std::unique_ptr +inline std::unique_ptr open_db_raw(const OptionsBridge &options, const string &path, BridgeStatus &status) { @@ -366,21 +367,21 @@ open_db_raw(const OptionsBridge &options, cf_names.push_back(kDefaultColumnFamilyName); } - std::vector column_families; + std::vector column_families; for (auto el: cf_names) { column_families.push_back(ColumnFamilyDescriptor( el, options.inner)); } - std::vector < ColumnFamilyHandle * > handles; + std::vector handles; DB *db_ptr; Status s = DB::Open(options.inner, path, column_families, &handles, &db_ptr); auto ok = s.ok(); write_status(std::move(s), status); - unordered_map > handle_map; + unordered_map> handle_map; if (ok) { assert(handles.size() == cf_names.size()); for (size_t i = 0; i < handles.size(); ++i) {