summaryrefslogtreecommitdiffstats
path: root/vendor/im-rc/src/fakepool.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/im-rc/src/fakepool.rs')
-rw-r--r--vendor/im-rc/src/fakepool.rs208
1 files changed, 208 insertions, 0 deletions
diff --git a/vendor/im-rc/src/fakepool.rs b/vendor/im-rc/src/fakepool.rs
new file mode 100644
index 000000000..5ff36f7e5
--- /dev/null
+++ b/vendor/im-rc/src/fakepool.rs
@@ -0,0 +1,208 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#![allow(dead_code)]
+
+use std::marker::PhantomData;
+use std::ops::Deref;
+use std::rc::Rc as RRc;
+use std::sync::Arc as RArc;
+
+use crate::nodes::chunk::Chunk;
+
+pub(crate) trait PoolDefault: Default {}
+pub(crate) trait PoolClone: Clone {}
+
+impl<A> PoolDefault for Chunk<A> {}
+impl<A> PoolClone for Chunk<A> where A: Clone {}
+
+pub(crate) struct Pool<A>(PhantomData<A>);
+
+impl<A> Pool<A> {
+ pub(crate) fn new(_size: usize) -> Self {
+ Pool(PhantomData)
+ }
+
+ pub(crate) fn get_pool_size(&self) -> usize {
+ 0
+ }
+
+ pub(crate) fn fill(&self) {}
+}
+
+impl<A> Clone for Pool<A> {
+ fn clone(&self) -> Self {
+ Self::new(0)
+ }
+}
+
+// Rc
+
+#[derive(Default)]
+pub(crate) struct Rc<A>(RRc<A>);
+
+impl<A> Rc<A> {
+ #[inline(always)]
+ pub(crate) fn default(_pool: &Pool<A>) -> Self
+ where
+ A: PoolDefault,
+ {
+ Self(Default::default())
+ }
+
+ #[inline(always)]
+ pub(crate) fn new(_pool: &Pool<A>, value: A) -> Self {
+ Rc(RRc::new(value))
+ }
+
+ #[inline(always)]
+ pub(crate) fn clone_from(_pool: &Pool<A>, value: &A) -> Self
+ where
+ A: PoolClone,
+ {
+ Rc(RRc::new(value.clone()))
+ }
+
+ #[inline(always)]
+ pub(crate) fn make_mut<'a>(_pool: &Pool<A>, this: &'a mut Self) -> &'a mut A
+ where
+ A: PoolClone,
+ {
+ RRc::make_mut(&mut this.0)
+ }
+
+ #[inline(always)]
+ pub(crate) fn ptr_eq(left: &Self, right: &Self) -> bool {
+ RRc::ptr_eq(&left.0, &right.0)
+ }
+
+ pub(crate) fn unwrap_or_clone(this: Self) -> A
+ where
+ A: PoolClone,
+ {
+ RRc::try_unwrap(this.0).unwrap_or_else(|r| (*r).clone())
+ }
+}
+
+impl<A> Clone for Rc<A> {
+ #[inline(always)]
+ fn clone(&self) -> Self {
+ Rc(self.0.clone())
+ }
+}
+
+impl<A> Deref for Rc<A> {
+ type Target = A;
+ #[inline(always)]
+ fn deref(&self) -> &Self::Target {
+ self.0.deref()
+ }
+}
+
+impl<A> PartialEq for Rc<A>
+where
+ A: PartialEq,
+{
+ #[inline(always)]
+ fn eq(&self, other: &Self) -> bool {
+ **self == **other
+ }
+}
+
+impl<A> Eq for Rc<A> where A: Eq {}
+
+impl<A> std::fmt::Debug for Rc<A>
+where
+ A: std::fmt::Debug,
+{
+ #[inline(always)]
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
+ self.0.fmt(f)
+ }
+}
+
+// Arc
+
+#[derive(Default)]
+pub(crate) struct Arc<A>(RArc<A>);
+
+impl<A> Arc<A> {
+ #[inline(always)]
+ pub(crate) fn default(_pool: &Pool<A>) -> Self
+ where
+ A: PoolDefault,
+ {
+ Self(Default::default())
+ }
+
+ #[inline(always)]
+ pub(crate) fn new(_pool: &Pool<A>, value: A) -> Self {
+ Self(RArc::new(value))
+ }
+
+ #[inline(always)]
+ pub(crate) fn clone_from(_pool: &Pool<A>, value: &A) -> Self
+ where
+ A: PoolClone,
+ {
+ Self(RArc::new(value.clone()))
+ }
+
+ #[inline(always)]
+ pub(crate) fn make_mut<'a>(_pool: &Pool<A>, this: &'a mut Self) -> &'a mut A
+ where
+ A: PoolClone,
+ {
+ RArc::make_mut(&mut this.0)
+ }
+
+ #[inline(always)]
+ pub(crate) fn ptr_eq(left: &Self, right: &Self) -> bool {
+ RArc::ptr_eq(&left.0, &right.0)
+ }
+
+ pub(crate) fn unwrap_or_clone(this: Self) -> A
+ where
+ A: PoolClone,
+ {
+ RArc::try_unwrap(this.0).unwrap_or_else(|r| (*r).clone())
+ }
+}
+
+impl<A> Clone for Arc<A> {
+ #[inline(always)]
+ fn clone(&self) -> Self {
+ Self(self.0.clone())
+ }
+}
+
+impl<A> Deref for Arc<A> {
+ type Target = A;
+ #[inline(always)]
+ fn deref(&self) -> &Self::Target {
+ self.0.deref()
+ }
+}
+
+impl<A> PartialEq for Arc<A>
+where
+ A: PartialEq,
+{
+ #[inline(always)]
+ fn eq(&self, other: &Self) -> bool {
+ **self == **other
+ }
+}
+
+impl<A> Eq for Arc<A> where A: Eq {}
+
+impl<A> std::fmt::Debug for Arc<A>
+where
+ A: std::fmt::Debug,
+{
+ #[inline(always)]
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
+ self.0.fmt(f)
+ }
+}