@@ -10,22 +10,22 @@ pub use vector_extern::{VectorExtern, VectorExternCopyNonBool};
10
10
11
11
use crate :: boxed_ref:: BoxedRef ;
12
12
use crate :: platform_types:: size_t;
13
- use crate :: traits:: { Boxed , OpenCVIntoExternContainer , OpenCVType , OpenCVTypeExternContainer } ;
13
+ use crate :: traits:: { Boxed , OpenCVFromExtern , OpenCVIntoExternContainer , OpenCVType , OpenCVTypeExternContainer } ;
14
14
use crate :: Result ;
15
15
16
16
mod iter;
17
17
mod vector_extern;
18
18
19
19
/// Wrapper for C++ [std::vector](https://en.cppreference.com/w/cpp/container/vector)
20
- pub struct Vector < T : for < ' o > OpenCVType < ' o > >
20
+ pub struct Vector < T >
21
21
where
22
22
Self : VectorExtern < T > ,
23
23
{
24
24
ptr : * mut c_void ,
25
25
_d : PhantomData < T > ,
26
26
}
27
27
28
- impl < T : for < ' o > OpenCVType < ' o > > Vector < T >
28
+ impl < T > Vector < T >
29
29
where
30
30
Self : VectorExtern < T > ,
31
31
{
45
45
46
46
/// Create a Vector from iterator
47
47
#[ inline]
48
- pub fn from_iter < ' a > ( s : impl IntoIterator < Item = <T as OpenCVType < ' a > >:: Arg > ) -> Self {
48
+ pub fn from_iter < ' a > ( s : impl IntoIterator < Item = <T as OpenCVType < ' a > >:: Arg > ) -> Self
49
+ where
50
+ T : for < ' t > OpenCVType < ' t > ,
51
+ {
49
52
#![ allow( clippy:: should_implement_trait) ]
50
53
let mut out = Self :: new ( ) ;
51
54
out. extend ( s) ;
64
67
#[ inline]
65
68
pub fn from_elem < ' a > ( elem : <T as OpenCVType < ' a > >:: Arg , n : size_t ) -> Self
66
69
where
70
+ T : for < ' t > OpenCVType < ' t > ,
67
71
<T as OpenCVType < ' a > >:: Arg : Clone ,
68
72
{
69
73
let mut out = Self :: with_capacity ( n) ;
@@ -131,20 +135,29 @@ where
131
135
132
136
/// Add new element
133
137
#[ inline]
134
- pub fn push ( & mut self , val : <T as OpenCVType >:: Arg ) {
138
+ pub fn push ( & mut self , val : <T as OpenCVType >:: Arg )
139
+ where
140
+ T : for < ' t > OpenCVType < ' t > ,
141
+ {
135
142
let val = val. opencv_into_extern_container_nofail ( ) ;
136
143
unsafe { self . extern_push ( val. opencv_as_extern ( ) ) }
137
144
}
138
145
139
146
#[ inline]
140
- pub ( crate ) fn push_owned ( & mut self , val : T ) {
147
+ pub ( crate ) fn push_owned ( & mut self , val : T )
148
+ where
149
+ T : OpenCVIntoExternContainer ,
150
+ {
141
151
let val = val. opencv_into_extern_container_nofail ( ) ;
142
152
unsafe { self . extern_push_owned ( val. opencv_as_extern ( ) ) }
143
153
}
144
154
145
155
/// Insert a new element at the specified `index`
146
156
#[ inline]
147
- pub fn insert ( & mut self , index : size_t , val : <T as OpenCVType >:: Arg ) -> Result < ( ) > {
157
+ pub fn insert ( & mut self , index : size_t , val : <T as OpenCVType >:: Arg ) -> Result < ( ) >
158
+ where
159
+ T : for < ' t > OpenCVType < ' t > ,
160
+ {
148
161
vector_index_check ( index, self . len ( ) + 1 ) ?;
149
162
let val = val. opencv_into_extern_container ( ) ?;
150
163
unsafe { self . extern_insert ( index, val. opencv_as_extern ( ) ) }
@@ -153,7 +166,10 @@ where
153
166
154
167
/// Set element at the specified `index`
155
168
#[ inline]
156
- pub fn set ( & mut self , index : size_t , val : <T as OpenCVType >:: Arg ) -> Result < ( ) > {
169
+ pub fn set ( & mut self , index : size_t , val : <T as OpenCVType >:: Arg ) -> Result < ( ) >
170
+ where
171
+ T : for < ' t > OpenCVType < ' t > ,
172
+ {
157
173
vector_index_check ( index, self . len ( ) ) ?;
158
174
let val = val. opencv_into_extern_container ( ) ?;
159
175
unsafe { self . extern_set ( index, val. opencv_as_extern ( ) ) }
@@ -164,14 +180,20 @@ where
164
180
/// # Safety
165
181
/// Caller must ensure that the specified `index` is within the `Vector` bounds
166
182
#[ inline]
167
- pub unsafe fn set_unchecked ( & mut self , index : size_t , val : <T as OpenCVType >:: Arg ) {
183
+ pub unsafe fn set_unchecked ( & mut self , index : size_t , val : <T as OpenCVType >:: Arg )
184
+ where
185
+ T : for < ' t > OpenCVType < ' t > ,
186
+ {
168
187
let val = val. opencv_into_extern_container_nofail ( ) ;
169
188
self . extern_set ( index, val. opencv_as_extern ( ) )
170
189
}
171
190
172
191
/// Get element at the specified `index`
173
192
#[ inline]
174
- pub fn get ( & self , index : size_t ) -> Result < T > {
193
+ pub fn get ( & self , index : size_t ) -> Result < T >
194
+ where
195
+ T : OpenCVFromExtern ,
196
+ {
175
197
vector_index_check ( index, self . len ( ) ) ?;
176
198
Ok ( unsafe { self . get_unchecked ( index) } )
177
199
}
@@ -180,7 +202,10 @@ where
180
202
/// # Safety
181
203
/// Caller must ensure that the specified `index` is within the `Vector` bounds
182
204
#[ inline]
183
- pub unsafe fn get_unchecked ( & self , index : size_t ) -> T {
205
+ pub unsafe fn get_unchecked ( & self , index : size_t ) -> T
206
+ where
207
+ T : OpenCVFromExtern ,
208
+ {
184
209
let val = self . extern_get ( index) ;
185
210
T :: opencv_from_extern ( val)
186
211
}
@@ -232,7 +257,7 @@ pub trait VectorToVec {
232
257
fn to_vec ( & self ) -> Vec < Self :: Element > ;
233
258
}
234
259
235
- impl < T : for < ' o > OpenCVType < ' o > > Default for Vector < T >
260
+ impl < T > Default for Vector < T >
236
261
where
237
262
Self : VectorExtern < T > ,
238
263
{
@@ -242,7 +267,7 @@ where
242
267
}
243
268
}
244
269
245
- impl < T : for < ' o > OpenCVType < ' o > > From < Vector < T > > for Vec < T >
270
+ impl < T > From < Vector < T > > for Vec < T >
246
271
where
247
272
Vector < T > : VectorExtern < T > + VectorToVec < Element = T > ,
248
273
{
@@ -272,7 +297,7 @@ where
272
297
}
273
298
}
274
299
275
- impl < T : for < ' o > OpenCVType < ' o > > AsRef < [ T ] > for Vector < T >
300
+ impl < T > AsRef < [ T ] > for Vector < T >
276
301
where
277
302
Self : VectorExtern < T > + VectorExternCopyNonBool < T > ,
278
303
{
@@ -282,7 +307,7 @@ where
282
307
}
283
308
}
284
309
285
- impl < T : for < ' o > OpenCVType < ' o > > Borrow < [ T ] > for Vector < T >
310
+ impl < T > Borrow < [ T ] > for Vector < T >
286
311
where
287
312
Self : VectorExtern < T > + VectorExternCopyNonBool < T > ,
288
313
{
@@ -292,7 +317,7 @@ where
292
317
}
293
318
}
294
319
295
- impl < T : for < ' o > OpenCVType < ' o > + fmt:: Debug > fmt:: Debug for Vector < T >
320
+ impl < T : OpenCVFromExtern + fmt:: Debug > fmt:: Debug for Vector < T >
296
321
where
297
322
Self : VectorExtern < T > ,
298
323
{
@@ -302,7 +327,7 @@ where
302
327
}
303
328
}
304
329
305
- impl < T : for < ' o > OpenCVType < ' o > > Drop for Vector < T >
330
+ impl < T > Drop for Vector < T >
306
331
where
307
332
Self : VectorExtern < T > ,
308
333
{
@@ -311,9 +336,9 @@ where
311
336
}
312
337
}
313
338
314
- unsafe impl < T : for < ' o > OpenCVType < ' o > + Send > Send for Vector < T > where Self : VectorExtern < T > { }
339
+ unsafe impl < T : Send > Send for Vector < T > where Self : VectorExtern < T > { }
315
340
316
- unsafe impl < T : for < ' o > OpenCVType < ' o > + Sync > Sync for Vector < T > where Self : VectorExtern < T > { }
341
+ unsafe impl < T : Sync > Sync for Vector < T > where Self : VectorExtern < T > { }
317
342
318
343
impl < ' a , T : for < ' o > OpenCVType < ' o > > Extend < <T as OpenCVType < ' a > >:: Arg > for Vector < T >
319
344
where
@@ -329,7 +354,7 @@ where
329
354
}
330
355
}
331
356
332
- impl < T : for < ' o > OpenCVType < ' o > > Boxed for Vector < T >
357
+ impl < T > Boxed for Vector < T >
333
358
where
334
359
Self : VectorExtern < T > ,
335
360
{
@@ -356,8 +381,7 @@ where
356
381
357
382
impl < ' b , T : Boxed > Vector < BoxedRef < ' b , T > >
358
383
where
359
- BoxedRef < ' b , T > : for < ' o > OpenCVType < ' o > ,
360
- Vector < BoxedRef < ' b , T > > : VectorExtern < BoxedRef < ' b , T > > ,
384
+ Self : VectorExtern < BoxedRef < ' b , T > > ,
361
385
Vector < T > : VectorExtern < T > ,
362
386
{
363
387
/// Transmutes a `&Vector<BoxedRef<T>>` into a `&Vector<T>`. This is safe as `BoxedRef` is a transparent wrapper around `T`,
0 commit comments