@@ -2,7 +2,7 @@ use super::array::Array;
22use super :: defines:: AfError ;
33use super :: error:: HANDLE_ERROR ;
44use super :: seq:: Seq ;
5- use super :: util:: { af_array, af_index_t, dim_t, HasAfEnum } ;
5+ use super :: util:: { af_array, af_index_t, dim_t, HasAfEnum , IndexableType } ;
66
77use libc:: { c_double, c_int, c_uint} ;
88use std:: default:: Default ;
@@ -142,7 +142,10 @@ pub trait Indexable {
142142///
143143/// This is used in functions [index_gen](./fn.index_gen.html) and
144144/// [assign_gen](./fn.assign_gen.html)
145- impl < T : HasAfEnum > Indexable for Array < T > {
145+ impl < T > Indexable for Array < T >
146+ where
147+ T : HasAfEnum + IndexableType ,
148+ {
146149 fn set ( & self , idxr : & mut Indexer , dim : u32 , _is_batch : Option < bool > ) {
147150 unsafe {
148151 let err_val = af_set_array_indexer ( idxr. get ( ) , self . get ( ) , dim as dim_t ) ;
@@ -155,9 +158,10 @@ impl<T: HasAfEnum> Indexable for Array<T> {
155158///
156159/// This is used in functions [index_gen](./fn.index_gen.html) and
157160/// [assign_gen](./fn.assign_gen.html)
158- impl < T : Copy > Indexable for Seq < T >
161+ impl < T > Indexable for Seq < T >
159162where
160163 c_double : From < T > ,
164+ T : Copy + IndexableType ,
161165{
162166 fn set ( & self , idxr : & mut Indexer , dim : u32 , is_batch : Option < bool > ) {
163167 unsafe {
@@ -256,10 +260,11 @@ impl<'object> Drop for Indexer<'object> {
256260/// println!("a(seq(1, 3, 1), span)");
257261/// print(&sub);
258262/// ```
259- pub fn index < IO , T : Copy > ( input : & Array < IO > , seqs : & [ Seq < T > ] ) -> Array < IO >
263+ pub fn index < IO , T > ( input : & Array < IO > , seqs : & [ Seq < T > ] ) -> Array < IO >
260264where
261265 c_double : From < T > ,
262266 IO : HasAfEnum ,
267+ T : Copy + HasAfEnum + IndexableType ,
263268{
264269 let seqs: Vec < SeqInternal > = seqs. iter ( ) . map ( |s| SeqInternal :: from_seq ( s) ) . collect ( ) ;
265270 unsafe {
@@ -462,7 +467,7 @@ where
462467pub fn lookup < T , I > ( input : & Array < T > , indices : & Array < I > , seq_dim : i32 ) -> Array < T >
463468where
464469 T : HasAfEnum ,
465- I : HasAfEnum ,
470+ I : HasAfEnum + IndexableType ,
466471{
467472 unsafe {
468473 let mut temp: af_array = std:: ptr:: null_mut ( ) ;
@@ -504,10 +509,11 @@ where
504509/// // 1.0 1.0 1.0
505510/// // 2.0 2.0 2.0
506511/// ```
507- pub fn assign_seq < T : Copy , I > ( lhs : & mut Array < I > , seqs : & [ Seq < T > ] , rhs : & Array < I > )
512+ pub fn assign_seq < T , I > ( lhs : & mut Array < I > , seqs : & [ Seq < T > ] , rhs : & Array < I > )
508513where
509514 c_double : From < T > ,
510515 I : HasAfEnum ,
516+ T : Copy + IndexableType ,
511517{
512518 let seqs: Vec < SeqInternal > = seqs. iter ( ) . map ( |s| SeqInternal :: from_seq ( s) ) . collect ( ) ;
513519 unsafe {
@@ -632,9 +638,10 @@ struct SeqInternal {
632638}
633639
634640impl SeqInternal {
635- fn from_seq < T : Copy > ( s : & Seq < T > ) -> Self
641+ fn from_seq < T > ( s : & Seq < T > ) -> Self
636642 where
637643 c_double : From < T > ,
644+ T : Copy + IndexableType ,
638645 {
639646 Self {
640647 begin : From :: from ( s. begin ( ) ) ,
0 commit comments