new C++ interop
parent
41d89d0415
commit
6c02737492
@ -0,0 +1,22 @@
|
||||
//
|
||||
// Created by Ziyang Hu on 2022/7/3.
|
||||
//
|
||||
|
||||
#ifndef COZOROCKS_OPTS_H
|
||||
#define COZOROCKS_OPTS_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
inline void set_w_opts_sync(WriteOptions& opts, bool val) {
|
||||
opts.sync = val;
|
||||
}
|
||||
|
||||
inline void set_w_opts_disable_wal(WriteOptions& opts, bool val) {
|
||||
opts.disableWAL = val;
|
||||
}
|
||||
|
||||
inline void set_w_opts_no_slowdown(WriteOptions& opts, bool val) {
|
||||
opts.no_slowdown = val;
|
||||
}
|
||||
|
||||
#endif //COZOROCKS_OPTS_H
|
@ -0,0 +1,16 @@
|
||||
//
|
||||
// Created by Ziyang Hu on 2022/7/3.
|
||||
//
|
||||
|
||||
#include "tx.h"
|
||||
#include "cozorocks/src/bridge/mod.rs.h"
|
||||
|
||||
void TxBridge::start() {
|
||||
if (odb != nullptr) {
|
||||
Transaction *txn = odb->BeginTransaction(*w_opts, *o_tx_opts);
|
||||
tx.reset(txn);
|
||||
} else if (tdb != nullptr) {
|
||||
Transaction *txn = tdb->BeginTransaction(*w_opts, *p_tx_opts);
|
||||
tx.reset(txn);
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
use crate::bridge::ffi::*;
|
||||
use cxx::*;
|
||||
use std::ptr::null;
|
||||
|
||||
pub struct TxBuilder {
|
||||
pub(crate) inner: UniquePtr<TxBridge>,
|
||||
}
|
||||
|
||||
impl TxBuilder {
|
||||
#[inline]
|
||||
pub fn start(mut self, with_snapshot: bool) -> Tx {
|
||||
if with_snapshot {
|
||||
self.inner.pin_mut().set_snapshot();
|
||||
}
|
||||
Tx { inner: self.inner }
|
||||
}
|
||||
#[inline]
|
||||
pub fn sync(mut self, val: bool) -> Self {
|
||||
set_w_opts_sync(self.inner.pin_mut().get_w_opts(), val);
|
||||
self
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn no_slowdown(mut self, val: bool) -> Self {
|
||||
set_w_opts_no_slowdown(self.inner.pin_mut().get_w_opts(), val);
|
||||
self
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn disable_wal(mut self, val: bool) -> Self {
|
||||
set_w_opts_disable_wal(self.inner.pin_mut().get_w_opts(), val);
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Tx {
|
||||
pub(crate) inner: UniquePtr<TxBridge>,
|
||||
}
|
||||
|
||||
impl Tx {
|
||||
#[inline]
|
||||
pub fn set_snapshot(&mut self) {
|
||||
self.inner.pin_mut().set_snapshot()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue