@@ -153,9 +153,10 @@ pub fn derive(input: &Input) -> TokenStream {
153
153
/// Similar to [`
154
154
#[ doc = #slice_name_str]
155
155
/// ::get()`](https://doc.rust-lang.org/std/primitive.slice.html#method.get).
156
- pub fn get<' b: ' a , I >( & ' b self , index: I ) -> Option <I :: RefOutput >
156
+ pub fn get<' b, I >( & ' b self , index: I ) -> Option <I :: RefOutput >
157
157
where
158
- I : :: soa_derive:: SoaIndex <#slice_name<' b>>
158
+ I : :: soa_derive:: SoaIndex <#slice_name<' b>>,
159
+ ' a: ' b
159
160
{
160
161
let slice: #slice_name<' b> = self . reborrow( ) ;
161
162
index. get( slice)
@@ -164,24 +165,33 @@ pub fn derive(input: &Input) -> TokenStream {
164
165
/// Similar to [`
165
166
#[ doc = #slice_name_str]
166
167
/// ::get_unchecked()`](https://doc.rust-lang.org/std/primitive.slice.html#method.get_unchecked).
167
- pub unsafe fn get_unchecked<' b: ' a , I >( & ' b self , index: I ) -> I :: RefOutput
168
+ pub unsafe fn get_unchecked<' b, I >( & ' b self , index: I ) -> I :: RefOutput
168
169
where
169
- I : :: soa_derive:: SoaIndex <#slice_name<' b>>
170
+ I : :: soa_derive:: SoaIndex <#slice_name<' b>>,
171
+ ' a: ' b
170
172
{
171
173
let slice: #slice_name<' b> = self . reborrow( ) ;
172
174
index. get_unchecked( slice)
173
175
}
174
176
175
- pub fn index<' b: ' a, I >( & ' b self , index: I ) -> I :: RefOutput
177
+ /// Similar to [`std::ops::Index` trait](https://doc.rust-lang.org/std/ops/trait.Index.html) on
178
+ #[ doc = #slice_name_str]
179
+ /// .
180
+ /// This is required because we cannot implement that trait.
181
+ pub fn index<' b, I >( & ' b self , index: I ) -> I :: RefOutput
176
182
where
177
- I : :: soa_derive:: SoaIndex <#slice_name<' b>>
183
+ I : :: soa_derive:: SoaIndex <#slice_name<' b>>,
184
+ ' a: ' b
178
185
{
179
186
let slice: #slice_name<' b> = self . reborrow( ) ;
180
187
index. index( slice)
181
188
}
182
189
183
190
/// Reborrows the slices in a more narrower lifetime
184
- pub fn reborrow<' b: ' a>( & ' b self ) -> #slice_name<' b> {
191
+ pub fn reborrow<' b>( & ' b self ) -> #slice_name<' b>
192
+ where
193
+ ' a: ' b
194
+ {
185
195
#slice_name {
186
196
#( #fields_names_1: & self . #fields_names_2, ) *
187
197
}
@@ -396,9 +406,10 @@ pub fn derive_mut(input: &Input) -> TokenStream {
396
406
/// Similar to [`
397
407
#[ doc = #slice_name_str]
398
408
/// ::get()`](https://doc.rust-lang.org/std/primitive.slice.html#method.get).
399
- pub fn get<' b: ' a , I >( & ' b self , index: I ) -> Option <I :: RefOutput >
409
+ pub fn get<' b, I >( & ' b self , index: I ) -> Option <I :: RefOutput >
400
410
where
401
- I : :: soa_derive:: SoaIndex <#slice_name<' b>>
411
+ I : :: soa_derive:: SoaIndex <#slice_name<' b>>,
412
+ ' a: ' b
402
413
{
403
414
let slice: #slice_name<' b> = self . as_slice( ) ;
404
415
index. get( slice)
@@ -407,17 +418,24 @@ pub fn derive_mut(input: &Input) -> TokenStream {
407
418
/// Similar to [`
408
419
#[ doc = #slice_name_str]
409
420
/// ::get_unchecked()`](https://doc.rust-lang.org/std/primitive.slice.html#method.get_unchecked).
410
- pub unsafe fn get_unchecked<' b: ' a , I >( & ' b self , index: I ) -> I :: RefOutput
421
+ pub unsafe fn get_unchecked<' b, I >( & ' b self , index: I ) -> I :: RefOutput
411
422
where
412
- I : :: soa_derive:: SoaIndex <#slice_name<' b>>
423
+ I : :: soa_derive:: SoaIndex <#slice_name<' b>>,
424
+ ' a: ' b
413
425
{
414
426
let slice: #slice_name<' b> = self . as_slice( ) ;
415
427
index. get_unchecked( slice)
416
428
}
417
429
418
- pub fn index<' b: ' a, I >( & ' b self , index: I ) -> I :: RefOutput
430
+
431
+ /// Similar to [`std::ops::Index` trait](https://doc.rust-lang.org/std/ops/trait.Index.html) on
432
+ #[ doc = #slice_name_str]
433
+ /// .
434
+ /// This is required because we cannot implement that trait.
435
+ pub fn index<' b, I >( & ' b self , index: I ) -> I :: RefOutput
419
436
where
420
- I : :: soa_derive:: SoaIndex <#slice_name<' b>>
437
+ I : :: soa_derive:: SoaIndex <#slice_name<' b>>,
438
+ ' a: ' b
421
439
{
422
440
let slice: #slice_name<' b> = self . as_slice( ) ;
423
441
index. index( slice)
@@ -426,44 +444,59 @@ pub fn derive_mut(input: &Input) -> TokenStream {
426
444
/// Similar to [`
427
445
#[ doc = #slice_name_str]
428
446
/// ::get_mut()`](https://doc.rust-lang.org/std/primitive.slice.html#method.get_mut).
429
- pub fn get_mut<' b: ' a , I >( & ' b mut self , index: I ) -> Option <I :: MutOutput >
447
+ pub fn get_mut<' b, I >( & ' b mut self , index: I ) -> Option <I :: MutOutput >
430
448
where
431
- I : :: soa_derive:: SoaMutIndex <#slice_mut_name<' b>>
449
+ I : :: soa_derive:: SoaMutIndex <#slice_mut_name<' b>>,
450
+ ' a: ' b
432
451
{
433
- let slice: #slice_mut_name<' b> = self . reborrow( ) ;
452
+ let slice: #slice_mut_name<' b> = #slice_mut_name {
453
+ #( #fields_names_1: & mut * self . #fields_names_2, ) *
454
+ } ;
434
455
index. get_mut( slice)
435
456
}
436
457
437
458
/// Similar to [`
438
459
#[ doc = #slice_name_str]
439
460
/// ::get_unchecked_mut()`](https://doc.rust-lang.org/std/primitive.slice.html#method.get_unchecked_mut).
440
- pub unsafe fn get_unchecked_mut<' b: ' a , I >( & ' b mut self , index: I ) -> I :: MutOutput
461
+ pub unsafe fn get_unchecked_mut<' b, I >( & ' b mut self , index: I ) -> I :: MutOutput
441
462
where
442
- I : :: soa_derive:: SoaMutIndex <#slice_mut_name<' b>>
463
+ I : :: soa_derive:: SoaMutIndex <#slice_mut_name<' b>>,
464
+ ' a: ' b
443
465
{
444
466
let slice: #slice_mut_name<' b> = self . reborrow( ) ;
445
467
index. get_unchecked_mut( slice)
446
468
}
447
469
448
- pub fn index_mut<' b: ' a, I >( & ' b mut self , index: I ) -> I :: MutOutput
470
+ /// Similar to [`std::ops::IndexMut` trait](https://doc.rust-lang.org/std/ops/trait.IndexMut.html) on
471
+ #[ doc = #slice_name_str]
472
+ /// .
473
+ /// This is required because we cannot implement that trait.
474
+ pub fn index_mut<' b, I >( & ' b mut self , index: I ) -> I :: MutOutput
449
475
where
450
- I : :: soa_derive:: SoaMutIndex <#slice_mut_name<' b>>
476
+ I : :: soa_derive:: SoaMutIndex <#slice_mut_name<' b>>,
477
+ ' a: ' b
451
478
{
452
479
let slice: #slice_mut_name<' b> = self . reborrow( ) ;
453
480
index. index_mut( slice)
454
481
}
455
482
456
483
/// Returns a non-mutable slice from this mutable slice.
457
- pub fn as_slice<' b: ' a>( & ' b self ) -> #slice_name<' b> {
484
+ pub fn as_slice<' b>( & ' b self ) -> #slice_name<' b>
485
+ where
486
+ ' a: ' b
487
+ {
458
488
#slice_name {
459
489
#( #fields_names_1: & self . #fields_names_2, ) *
460
490
}
461
491
}
462
492
463
493
/// Reborrows the slices in a more narrower lifetime
464
- pub fn reborrow<' b: ' a>( & ' b mut self ) -> #slice_mut_name<' b> {
494
+ pub fn reborrow<' b>( & ' b mut self ) -> #slice_mut_name<' b>
495
+ where
496
+ ' a: ' b
497
+ {
465
498
#slice_mut_name {
466
- #( #fields_names_1: & mut self . #fields_names_2, ) *
499
+ #( #fields_names_1: & mut * self . #fields_names_2, ) *
467
500
}
468
501
}
469
502
0 commit comments