@@ -15,6 +15,7 @@ impl SVecf32Owned {
1515 pub fn new ( dims : u32 , indexes : Vec < u32 > , values : Vec < F32 > ) -> Self {
1616 Self :: new_checked ( dims, indexes, values) . unwrap ( )
1717 }
18+
1819 #[ inline( always) ]
1920 pub fn new_checked ( dims : u32 , indexes : Vec < u32 > , values : Vec < F32 > ) -> Option < Self > {
2021 if !( 1 ..=1_048_575 ) . contains ( & dims) {
@@ -39,6 +40,7 @@ impl SVecf32Owned {
3940 }
4041 unsafe { Some ( Self :: new_unchecked ( dims, indexes, values) ) }
4142 }
43+
4244 /// # Safety
4345 ///
4446 /// * `dims` must be in `1..=1_048_575`.
@@ -53,10 +55,12 @@ impl SVecf32Owned {
5355 values,
5456 }
5557 }
58+
5659 #[ inline( always) ]
5760 pub fn indexes ( & self ) -> & [ u32 ] {
5861 & self . indexes
5962 }
63+
6064 #[ inline( always) ]
6165 pub fn values ( & self ) -> & [ F32 ] {
6266 & self . values
@@ -74,6 +78,7 @@ impl VectorOwned for SVecf32Owned {
7478 self . dims
7579 }
7680
81+ #[ inline( always) ]
7782 fn for_borrow ( & self ) -> SVecf32Borrowed < ' _ > {
7883 SVecf32Borrowed {
7984 dims : self . dims ,
@@ -82,6 +87,7 @@ impl VectorOwned for SVecf32Owned {
8287 }
8388 }
8489
90+ #[ inline( always) ]
8591 fn to_vec ( & self ) -> Vec < F32 > {
8692 let mut dense = vec ! [ F32 :: zero( ) ; self . dims as usize ] ;
8793 for ( & index, & value) in self . indexes . iter ( ) . zip ( self . values . iter ( ) ) {
@@ -103,6 +109,7 @@ impl<'a> SVecf32Borrowed<'a> {
103109 pub fn new ( dims : u32 , indexes : & ' a [ u32 ] , values : & ' a [ F32 ] ) -> Self {
104110 Self :: new_checked ( dims, indexes, values) . unwrap ( )
105111 }
112+
106113 #[ inline( always) ]
107114 pub fn new_checked ( dims : u32 , indexes : & ' a [ u32 ] , values : & ' a [ F32 ] ) -> Option < Self > {
108115 if !( 1 ..=1_048_575 ) . contains ( & dims) {
@@ -127,6 +134,7 @@ impl<'a> SVecf32Borrowed<'a> {
127134 }
128135 unsafe { Some ( Self :: new_unchecked ( dims, indexes, values) ) }
129136 }
137+
130138 /// # Safety
131139 ///
132140 /// * `dims` must be in `1..=1_048_575`.
@@ -141,14 +149,21 @@ impl<'a> SVecf32Borrowed<'a> {
141149 values,
142150 }
143151 }
152+
144153 #[ inline( always) ]
145154 pub fn indexes ( & self ) -> & [ u32 ] {
146155 self . indexes
147156 }
157+
148158 #[ inline( always) ]
149159 pub fn values ( & self ) -> & [ F32 ] {
150160 self . values
151161 }
162+
163+ #[ inline( always) ]
164+ pub fn len ( & self ) -> u32 {
165+ self . indexes . len ( ) . try_into ( ) . unwrap ( )
166+ }
152167}
153168
154169impl < ' a > VectorBorrowed for SVecf32Borrowed < ' a > {
@@ -160,6 +175,7 @@ impl<'a> VectorBorrowed for SVecf32Borrowed<'a> {
160175 self . dims
161176 }
162177
178+ #[ inline( always) ]
163179 fn for_own ( & self ) -> SVecf32Owned {
164180 SVecf32Owned {
165181 dims : self . dims ,
@@ -168,19 +184,25 @@ impl<'a> VectorBorrowed for SVecf32Borrowed<'a> {
168184 }
169185 }
170186
187+ #[ inline( always) ]
171188 fn to_vec ( & self ) -> Vec < F32 > {
172189 let mut dense = vec ! [ F32 :: zero( ) ; self . dims as usize ] ;
173190 for ( & index, & value) in self . indexes . iter ( ) . zip ( self . values . iter ( ) ) {
174191 dense[ index as usize ] = value;
175192 }
176193 dense
177194 }
178- }
179195
180- impl < ' a > SVecf32Borrowed < ' a > {
181196 #[ inline( always) ]
182- pub fn len ( & self ) -> u32 {
183- self . indexes . len ( ) . try_into ( ) . unwrap ( )
197+ fn length ( & self ) -> F32 {
198+ length ( * self )
199+ }
200+
201+ #[ inline( always) ]
202+ fn normalize ( & self ) -> SVecf32Owned {
203+ let mut own = self . for_own ( ) ;
204+ l2_normalize ( & mut own) ;
205+ own
184206 }
185207}
186208
0 commit comments