difftreelog
perf native implementation of std.splitLimitR (#163)
in: master
* native implementation of std.splitLimitR * style: fix formatting ---------
5 files changed
crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/lib.rs
+++ b/crates/jrsonnet-stdlib/src/lib.rs
@@ -178,6 +178,7 @@
("isEmpty", builtin_is_empty::INST),
("equalsIgnoreCase", builtin_equals_ignore_case::INST),
("splitLimit", builtin_splitlimit::INST),
+ ("splitLimitR", builtin_splitlimitr::INST),
("asciiUpper", builtin_ascii_upper::INST),
("asciiLower", builtin_ascii_lower::INST),
("findSubstr", builtin_find_substr::INST),
crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/std.jsonnet
+++ b/crates/jrsonnet-stdlib/src/std.jsonnet
@@ -20,13 +20,6 @@
stripChars(str, chars)::
std.lstripChars(std.rstripChars(str, chars), chars),
- splitLimitR(str, c, maxsplits)::
- if maxsplits == -1 then
- std.splitLimit(str, c, -1)
- else
- local revStr(str) = std.join('', std.reverse(std.stringChars(str)));
- std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),
-
split(str, c):: std.splitLimit(str, c, -1),
mapWithIndex(func, arr)::
crates/jrsonnet-stdlib/src/strings.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/strings.rs
+++ b/crates/jrsonnet-stdlib/src/strings.rs
@@ -47,6 +47,25 @@
}
#[builtin]
+pub fn builtin_splitlimitr(str: IStr, c: IStr, maxsplits: Either![usize, M1]) -> ArrValue {
+ use Either2::*;
+ match maxsplits {
+ A(n) =>
+ // rsplitn does not implement DoubleEndedIterator so collect into
+ // a temporary vec
+ {
+ str.rsplitn(n + 1, &c as &str)
+ .map(Val::string)
+ .collect::<Vec<_>>()
+ .into_iter()
+ .rev()
+ .collect()
+ }
+ B(_) => str.split(&c as &str).map(Val::string).collect(),
+ }
+}
+
+#[builtin]
pub fn builtin_ascii_upper(str: IStr) -> String {
str.to_ascii_uppercase()
}
tests/golden/builtin_strings.jsonnetdiffbeforeafterbothno changes
tests/golden/builtin_strings.jsonnet.goldendiffbeforeafterboth--- /dev/null
+++ b/tests/golden/builtin_strings.jsonnet.golden
@@ -0,0 +1,20 @@
+{
+ "split": [
+ "ab",
+ "cd",
+ "ef"
+ ],
+ "splitlimit": [
+ "ab",
+ "cd::ef"
+ ],
+ "splitlimitR": [
+ "ab::cd",
+ "ef"
+ ],
+ "splitlimitRNoLimit": [
+ "ab",
+ "cd",
+ "ef"
+ ]
+}
\ No newline at end of file