File tree 3 files changed +21
-2
lines changed 3 files changed +21
-2
lines changed Original file line number Diff line number Diff line change @@ -1324,6 +1324,10 @@ impl PyCommonString<u8> for [u8] {
1324
1324
& self [ range]
1325
1325
}
1326
1326
1327
+ fn get_chars < ' a > ( & ' a self , range : std:: ops:: Range < usize > ) -> & ' a Self {
1328
+ & self [ range]
1329
+ }
1330
+
1327
1331
fn is_empty ( & self ) -> bool {
1328
1332
Self :: is_empty ( self )
1329
1333
}
Original file line number Diff line number Diff line change @@ -1745,6 +1745,19 @@ impl PyCommonString<char> for str {
1745
1745
& self [ range]
1746
1746
}
1747
1747
1748
+ fn get_chars < ' a > ( & ' a self , range : std:: ops:: Range < usize > ) -> & ' a Self {
1749
+ let mut chars = self . chars ( ) ;
1750
+ for _ in 0 ..range. start {
1751
+ let _ = chars. next ( ) ;
1752
+ }
1753
+ let start = chars. as_str ( ) ;
1754
+ for _ in range {
1755
+ let _ = chars. next ( ) ;
1756
+ }
1757
+ let end = chars. as_str ( ) ;
1758
+ & start[ ..start. len ( ) - end. len ( ) ]
1759
+ }
1760
+
1748
1761
fn is_empty ( & self ) -> bool {
1749
1762
Self :: is_empty ( self )
1750
1763
}
Original file line number Diff line number Diff line change @@ -118,6 +118,8 @@ pub trait PyCommonString<E> {
118
118
119
119
fn with_capacity ( capacity : usize ) -> Self :: Container ;
120
120
fn get_bytes < ' a > ( & ' a self , range : std:: ops:: Range < usize > ) -> & ' a Self ;
121
+ // FIXME: get_chars is expensive for str
122
+ fn get_chars < ' a > ( & ' a self , range : std:: ops:: Range < usize > ) -> & ' a Self ;
121
123
fn bytes_len ( & self ) -> usize ;
122
124
fn chars_len ( & self ) -> usize ;
123
125
fn is_empty ( & self ) -> bool ;
@@ -216,7 +218,7 @@ pub trait PyCommonString<E> {
216
218
{
217
219
if range. is_normal ( ) {
218
220
let start = range. start ;
219
- if let Some ( index) = find ( self . get_bytes ( range) , & needle) {
221
+ if let Some ( index) = find ( self . get_chars ( range) , & needle) {
220
222
return Some ( start + index) ;
221
223
}
222
224
}
@@ -229,7 +231,7 @@ pub trait PyCommonString<E> {
229
231
F : Fn ( & Self , & Self ) -> usize ,
230
232
{
231
233
if range. is_normal ( ) {
232
- count ( self . get_bytes ( range) , & needle)
234
+ count ( self . get_chars ( range) , & needle)
233
235
} else {
234
236
0
235
237
}
You can’t perform that action at this time.
0 commit comments