15
15
ArrayBase ,
16
16
Dimension ,
17
17
ViewRepr ,
18
+ OwnedRepr ,
19
+ OwnedRcRepr ,
18
20
} ;
19
21
20
22
/// Array representation trait.
@@ -68,15 +70,15 @@ pub unsafe trait DataClone : Data {
68
70
}
69
71
}
70
72
71
- unsafe impl < A > Data for Rc < Vec < A > > {
73
+ unsafe impl < A > Data for OwnedRcRepr < A > {
72
74
type Elem = A ;
73
75
fn _data_slice ( & self ) -> & [ A ] {
74
76
self
75
77
}
76
78
}
77
79
78
80
// NOTE: Copy on write
79
- unsafe impl < A > DataMut for Rc < Vec < A > >
81
+ unsafe impl < A > DataMut for OwnedRcRepr < A >
80
82
where A : Clone
81
83
{
82
84
fn ensure_unique < D > ( self_ : & mut ArrayBase < Self , D > )
@@ -112,23 +114,23 @@ unsafe impl<A> DataMut for Rc<Vec<A>>
112
114
}
113
115
}
114
116
115
- unsafe impl < A > DataClone for Rc < Vec < A > > {
117
+ unsafe impl < A > DataClone for OwnedRcRepr < A > {
116
118
unsafe fn clone_with_ptr ( & self , ptr : * mut Self :: Elem ) -> ( Self , * mut Self :: Elem ) {
117
119
// pointer is preserved
118
120
( self . clone ( ) , ptr)
119
121
}
120
122
}
121
123
122
- unsafe impl < A > Data for Vec < A > {
124
+ unsafe impl < A > Data for OwnedRepr < A > {
123
125
type Elem = A ;
124
126
fn _data_slice ( & self ) -> & [ A ] {
125
127
self
126
128
}
127
129
}
128
130
129
- unsafe impl < A > DataMut for Vec < A > { }
131
+ unsafe impl < A > DataMut for OwnedRepr < A > { }
130
132
131
- unsafe impl < A > DataClone for Vec < A >
133
+ unsafe impl < A > DataClone for OwnedRepr < A >
132
134
where A : Clone
133
135
{
134
136
unsafe fn clone_with_ptr ( & self , ptr : * mut Self :: Elem ) -> ( Self , * mut Self :: Elem ) {
@@ -185,7 +187,7 @@ pub unsafe trait DataOwned : Data {
185
187
#[ doc( hidden) ]
186
188
fn new ( elements : Vec < Self :: Elem > ) -> Self ;
187
189
#[ doc( hidden) ]
188
- fn into_shared ( self ) -> Rc < Vec < Self :: Elem > > ;
190
+ fn into_shared ( self ) -> OwnedRcRepr < Self :: Elem > ;
189
191
}
190
192
191
193
/// Array representation trait.
@@ -195,23 +197,23 @@ pub unsafe trait DataOwned : Data {
195
197
/// ***Internal trait, see `Data`.***
196
198
pub unsafe trait DataShared : Clone + DataClone { }
197
199
198
- unsafe impl < A > DataShared for Rc < Vec < A > > { }
200
+ unsafe impl < A > DataShared for OwnedRcRepr < A > { }
199
201
unsafe impl < ' a , A > DataShared for ViewRepr < & ' a A > { }
200
202
201
- unsafe impl < A > DataOwned for Vec < A > {
203
+ unsafe impl < A > DataOwned for OwnedRepr < A > {
202
204
fn new ( elements : Vec < A > ) -> Self {
203
205
elements
204
206
}
205
- fn into_shared ( self ) -> Rc < Vec < A > > {
207
+ fn into_shared ( self ) -> OwnedRcRepr < A > {
206
208
Rc :: new ( self )
207
209
}
208
210
}
209
211
210
- unsafe impl < A > DataOwned for Rc < Vec < A > > {
212
+ unsafe impl < A > DataOwned for OwnedRcRepr < A > {
211
213
fn new ( elements : Vec < A > ) -> Self {
212
214
Rc :: new ( elements)
213
215
}
214
- fn into_shared ( self ) -> Rc < Vec < A > > {
216
+ fn into_shared ( self ) -> OwnedRcRepr < A > {
215
217
self
216
218
}
217
219
}
0 commit comments