From efcea3a80da7c4479d5fe168435ecc9fd06bdc72 Mon Sep 17 00:00:00 2001 From: John Turner Date: Sun, 14 Sep 2025 00:16:10 -0400 Subject: Squashed 'subprojects/boost-sqlite/' content from commit 3378e35 git-subtree-dir: subprojects/boost-sqlite git-subtree-split: 3378e353705271e569cf4ba15c467b840a39798c --- include/boost/sqlite/mutex.hpp | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 include/boost/sqlite/mutex.hpp (limited to 'include/boost/sqlite/mutex.hpp') diff --git a/include/boost/sqlite/mutex.hpp b/include/boost/sqlite/mutex.hpp new file mode 100644 index 0000000..63caf0e --- /dev/null +++ b/include/boost/sqlite/mutex.hpp @@ -0,0 +1,55 @@ +// +// Copyright (c) 2022 Klemens Morgenstern (klemens.morgenstern@gmx.net) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_SQLITE_MUTEX_HPP +#define BOOST_SQLITE_MUTEX_HPP + +#include +#include + +BOOST_SQLITE_BEGIN_NAMESPACE +/// A mutex class that maybe a noop depending on the mode sqlite3 was compiled as. +struct mutex +{ + bool try_lock() + { + if (!impl_) + return false; + return sqlite3_mutex_try(impl_.get()) == SQLITE_OK; + } + void lock() { sqlite3_mutex_enter(impl_.get()); } + void unlock() { sqlite3_mutex_leave(impl_.get()); } + + mutex() : impl_(sqlite3_mutex_alloc(SQLITE_MUTEX_FAST)) {} + mutex(mutex && ) = delete; + private: + struct deleter_ {void operator()(sqlite3_mutex *mtx) {sqlite3_mutex_free(mtx);}}; + std::unique_ptr impl_; +}; + +/// A recursive mutex class that maybe a noop depending on the mode sqlite3 was compiled as. +struct recursive_mutex +{ + bool try_lock() + { + if (!impl_) + return false; + return sqlite3_mutex_try(impl_.get()) == SQLITE_OK; + } + void lock() { sqlite3_mutex_enter(impl_.get()); } + void unlock() { sqlite3_mutex_leave(impl_.get()); } + + recursive_mutex() : impl_(sqlite3_mutex_alloc(SQLITE_MUTEX_RECURSIVE)) {} + recursive_mutex(recursive_mutex && ) = delete; + private: + struct deleter_ {void operator()(sqlite3_mutex *mtx) {sqlite3_mutex_free(mtx);}}; + std::unique_ptr impl_; +}; + +BOOST_SQLITE_END_NAMESPACE + +#endif //BOOST_SQLITE_MUTEX_HPP -- cgit v1.2.3