forked from Rust-related/RustPython
Merge pull request #1876 from youknowone/share-strip
shared string strip implemenetation
This commit is contained in:
@@ -893,36 +893,33 @@ impl PyByteInner {
|
||||
}
|
||||
|
||||
pub fn strip(&self, chars: OptionalOption<PyByteInner>) -> Vec<u8> {
|
||||
let chars = chars.flat_option();
|
||||
let chars = match chars {
|
||||
Some(ref chars) => &chars.elements,
|
||||
None => return self.elements.trim().to_owned(),
|
||||
};
|
||||
self.elements
|
||||
.trim_with(|c| chars.contains(&(c as u8)))
|
||||
.to_owned()
|
||||
.py_strip(
|
||||
chars,
|
||||
|s, chars| s.trim_with(|c| chars.contains(&(c as u8))),
|
||||
|s| s.trim(),
|
||||
)
|
||||
.to_vec()
|
||||
}
|
||||
|
||||
pub fn lstrip(&self, chars: OptionalOption<PyByteInner>) -> Vec<u8> {
|
||||
let chars = chars.flat_option();
|
||||
let chars = match chars {
|
||||
Some(ref chars) => &chars.elements,
|
||||
None => return self.elements.trim_start().to_owned(),
|
||||
};
|
||||
self.elements
|
||||
.trim_start_with(|c| chars.contains(&(c as u8)))
|
||||
.to_owned()
|
||||
.py_strip(
|
||||
chars,
|
||||
|s, chars| s.trim_start_with(|c| chars.contains(&(c as u8))),
|
||||
|s| s.trim_start(),
|
||||
)
|
||||
.to_vec()
|
||||
}
|
||||
|
||||
pub fn rstrip(&self, chars: OptionalOption<PyByteInner>) -> Vec<u8> {
|
||||
let chars = chars.flat_option();
|
||||
let chars = match chars {
|
||||
Some(ref chars) => &chars.elements,
|
||||
None => return self.elements.trim_end().to_owned(),
|
||||
};
|
||||
self.elements
|
||||
.trim_end_with(|c| chars.contains(&(c as u8)))
|
||||
.to_owned()
|
||||
.py_strip(
|
||||
chars,
|
||||
|s, chars| s.trim_end_with(|c| chars.contains(&(c as u8))),
|
||||
|s| s.trim_end(),
|
||||
)
|
||||
.to_vec()
|
||||
}
|
||||
|
||||
pub fn split<F>(
|
||||
|
||||
@@ -27,7 +27,7 @@ use crate::cformat::{
|
||||
CNumberType,
|
||||
};
|
||||
use crate::format::{FormatParseError, FormatPart, FormatPreconversor, FormatSpec, FormatString};
|
||||
use crate::function::{OptionalArg, PyFuncArgs};
|
||||
use crate::function::{OptionalArg, OptionalOption, PyFuncArgs};
|
||||
use crate::pyhash;
|
||||
use crate::pyobject::{
|
||||
Either, IdProtocol, IntoPyObject, ItemProtocol, PyClassImpl, PyContext, PyIterable,
|
||||
@@ -474,36 +474,35 @@ impl PyString {
|
||||
}
|
||||
|
||||
#[pymethod]
|
||||
fn strip(&self, chars: OptionalArg<Option<PyStringRef>>) -> String {
|
||||
let chars = chars.flat_option();
|
||||
let chars = match chars {
|
||||
Some(ref chars) => &chars.value,
|
||||
None => return self.value.trim().to_owned(),
|
||||
};
|
||||
self.value.trim_matches(|c| chars.contains(c)).to_owned()
|
||||
}
|
||||
|
||||
#[pymethod]
|
||||
fn lstrip(&self, chars: OptionalArg<Option<PyStringRef>>) -> String {
|
||||
let chars = chars.flat_option();
|
||||
let chars = match chars {
|
||||
Some(ref chars) => &chars.value,
|
||||
None => return self.value.trim_start().to_owned(),
|
||||
};
|
||||
fn strip(&self, chars: OptionalOption<PyStringRef>) -> String {
|
||||
self.value
|
||||
.trim_start_matches(|c| chars.contains(c))
|
||||
.py_strip(
|
||||
chars,
|
||||
|s, chars| s.trim_matches(|c| chars.contains(c)),
|
||||
|s| s.trim(),
|
||||
)
|
||||
.to_owned()
|
||||
}
|
||||
|
||||
#[pymethod]
|
||||
fn rstrip(&self, chars: OptionalArg<Option<PyStringRef>>) -> String {
|
||||
let chars = chars.flat_option();
|
||||
let chars = match chars {
|
||||
Some(ref chars) => &chars.value,
|
||||
None => return self.value.trim_end().to_owned(),
|
||||
};
|
||||
fn lstrip(&self, chars: OptionalOption<PyStringRef>) -> String {
|
||||
self.value
|
||||
.trim_end_matches(|c| chars.contains(c))
|
||||
.py_strip(
|
||||
chars,
|
||||
|s, chars| s.trim_start_matches(|c| chars.contains(c)),
|
||||
|s| s.trim_start(),
|
||||
)
|
||||
.to_owned()
|
||||
}
|
||||
|
||||
#[pymethod]
|
||||
fn rstrip(&self, chars: OptionalOption<PyStringRef>) -> String {
|
||||
self.value
|
||||
.py_strip(
|
||||
chars,
|
||||
|s, chars| s.trim_end_matches(|c| chars.contains(c)),
|
||||
|s| s.trim_end(),
|
||||
)
|
||||
.to_owned()
|
||||
}
|
||||
|
||||
|
||||
@@ -171,4 +171,22 @@ pub trait PyCommonString<E> {
|
||||
Ok(false)
|
||||
}
|
||||
}
|
||||
|
||||
fn py_strip<'a, S, FC, FD>(
|
||||
&'a self,
|
||||
chars: OptionalOption<S>,
|
||||
func_chars: FC,
|
||||
func_default: FD,
|
||||
) -> &'a Self
|
||||
where
|
||||
S: PyCommonStringWrapper<Self>,
|
||||
FC: Fn(&'a Self, &Self) -> &'a Self,
|
||||
FD: Fn(&'a Self) -> &'a Self,
|
||||
{
|
||||
let chars = chars.flat_option();
|
||||
match chars {
|
||||
Some(chars) => func_chars(self, chars.as_ref()),
|
||||
None => func_default(self),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user