src/instance.rs

branch
dev
changeset 75
e9f4550cfa18
parent 59
9226980e45a7
child 88
086a59b3a2b4
equal deleted inserted replaced
74:2c76df38d02b 75:e9f4550cfa18
6 pub enum EitherDecomp<A, B> { 6 pub enum EitherDecomp<A, B> {
7 Owned(A), 7 Owned(A),
8 Borrowed(B), 8 Borrowed(B),
9 } 9 }
10 10
11 /// A very basic implementation of [`Cow`] without a [`Clone`] trait dependency. 11 /// A very basic implementation of [`std::borrow::Cow`] without a [`Clone`] trait dependency.
12 pub type MyCow<'b, X> = EitherDecomp<X, &'b X>; 12 pub type MyCow<'b, X> = EitherDecomp<X, &'b X>;
13 13
14 impl<'b, X> std::ops::Deref for MyCow<'b, X> { 14 impl<'b, X> std::ops::Deref for MyCow<'b, X> {
15 type Target = X; 15 type Target = X;
16 16
87 } 87 }
88 88
89 /// Helper trait for functions to work with either owned values or references to either the 89 /// Helper trait for functions to work with either owned values or references to either the
90 /// “principal type” `X` or types some present a subset of `X`. In the latter sense, this 90 /// “principal type” `X` or types some present a subset of `X`. In the latter sense, this
91 /// generalises [`std::borrow::ToOwned`], [`std::borrow::Borrow`], and [`std::borrow::Cow`]. 91 /// generalises [`std::borrow::ToOwned`], [`std::borrow::Borrow`], and [`std::borrow::Cow`].
92 /// This type also includes iteratation facilities when `X` is a [`Collection`], to avoid
93 /// the possibly costly conversion of such subset types into `X`.
94 pub trait Instance<X : Space, D = <X as Space>::Decomp> : Sized where D : Decomposition<X> { 92 pub trait Instance<X : Space, D = <X as Space>::Decomp> : Sized where D : Decomposition<X> {
95 /// Decomposes self according to `decomposer`. 93 /// Decomposes self according to `decomposer`.
96 fn decompose<'b>(self) -> D::Decomposition<'b> 94 fn decompose<'b>(self) -> D::Decomposition<'b>
97 where Self : 'b, X : 'b; 95 where Self : 'b, X : 'b;
98 96

mercurial