You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.3 KiB
C++

//
// Created by Ziyang Hu on 2022/4/13.
//
2 years ago
#include "cozorocks.h"
#include "cozorocks/src/bridge.rs.h"
void write_status_impl(BridgeStatus &status, StatusCode code, StatusSubCode subcode, StatusSeverity severity,
int bridge_code) {
status.code = code;
status.subcode = subcode;
status.severity = severity;
status.bridge_code = static_cast<StatusBridgeCode>(bridge_code);
2 years ago
}
BridgeStatus IteratorBridge::status() const {
BridgeStatus s;
2 years ago
write_status(inner->status(), s);
return s;
2 years ago
}
unique_ptr<vector<PinnableSlice>> TransactionBridge::multiget_txn(
const ColumnFamilyHandle &cf,
rust::Slice<const rust::Slice<const uint8_t>> keys,
rust::Slice<BridgeStatus> statuses) const {
auto cpp_keys = vector<Slice>();
cpp_keys.reserve(keys.size());
for (auto key: keys) {
auto cpp_key = convert_slice(key);
cpp_keys.push_back(cpp_key);
}
auto ret = make_unique<vector<PinnableSlice>>(keys.size());
auto cpp_statuses = vector<Status>(keys.size());
inner->MultiGet(*r_ops,
const_cast<ColumnFamilyHandle *>(&cf),
keys.size(),
cpp_keys.data(),
ret->data(),
cpp_statuses.data());
for (size_t i = 0; i < cpp_statuses.size(); ++i) {
write_status(std::move(cpp_statuses[i]), statuses[i]);
}
return ret;
}
unique_ptr<vector<PinnableSlice>> TransactionBridge::multiget_raw(
const ColumnFamilyHandle &cf,
rust::Slice<const rust::Slice<const uint8_t>> keys,
rust::Slice<BridgeStatus> statuses) const {
auto cpp_keys = vector<Slice>();
cpp_keys.reserve(keys.size());
for (auto key: keys) {
auto cpp_key = convert_slice(key);
cpp_keys.push_back(cpp_key);
}
auto ret = make_unique<vector<PinnableSlice>>(keys.size());
auto cpp_statuses = vector<Status>(keys.size());
raw_db->MultiGet(*r_ops,
const_cast<ColumnFamilyHandle *>(&cf),
keys.size(),
cpp_keys.data(),
ret->data(),
cpp_statuses.data());
for (size_t i = 0; i < cpp_statuses.size(); ++i) {
write_status(std::move(cpp_statuses[i]), statuses[i]);
}
return ret;
}