summaryrefslogtreecommitdiffhomepage
path: root/compat/borrowed-ptr.inl
diff options
context:
space:
mode:
Diffstat (limited to 'compat/borrowed-ptr.inl')
-rw-r--r--compat/borrowed-ptr.inl25
1 files changed, 9 insertions, 16 deletions
diff --git a/compat/borrowed-ptr.inl b/compat/borrowed-ptr.inl
index b31326e7..79dd5e51 100644
--- a/compat/borrowed-ptr.inl
+++ b/compat/borrowed-ptr.inl
@@ -9,21 +9,6 @@
namespace floormat {
-template<typename T>
-template<typename... Ts>
-//requires std::is_constructible_v<std::remove_const_t<T>, Ts&&...>
-bptr<T>::bptr(InPlaceInitT, Ts&&... args) noexcept:
- bptr{ new std::remove_const_t<T>{ forward<Ts>(args)... } }
-{}
-
-template<typename T> bptr<T>::bptr() noexcept: bptr{nullptr} {}
-
-template<typename T>
-template<detail_bptr::DerivedFrom<T> Y>
-bptr<T>::bptr(Y* ptr) noexcept:
- blk{ptr ? new detail_bptr::control_block{const_cast<std::remove_const_t<Y>*>(ptr), 1, 1} : nullptr}
-{}
-
template<typename T> bptr<T>::~bptr() noexcept { if (blk) detail_bptr::control_block::decrement(blk); }
template<typename T> bptr<T>::bptr(const bptr<std::remove_const_t<T>>& ptr) noexcept requires std::is_const_v<T>: bptr{ptr, nullptr} {}
@@ -64,7 +49,11 @@ void bptr<T>::reset(Y* ptr) noexcept
{
if (blk)
detail_bptr::control_block::decrement(blk);
- blk = ptr ? new detail_bptr::control_block{const_cast<std::remove_const_t<Y>*>(ptr), 1, 1} : nullptr;
+ blk = ptr ? new detail_bptr::control_block{const_cast<std::remove_const_t<Y>*>(ptr), 1,
+#ifndef FM_NO_WEAK_BPTR
+ 1,
+#endif
+ } : nullptr;
}
template<typename T>
@@ -85,7 +74,9 @@ bptr<T>::bptr(const bptr<Y>& other, std::nullptr_t) noexcept:
{
if (blk)
{
+#ifndef FM_NO_WEAK_BPTR
++blk->_soft_count;
+#endif
++blk->_hard_count;
}
}
@@ -109,7 +100,9 @@ bptr<T>& bptr<T>::_copy_assign(const bptr<Y>& other) noexcept
blk = other.blk;
if (blk)
{
+#ifndef FM_NO_WEAK_BPTR
++blk->_soft_count;
+#endif
++blk->_hard_count;
}
}