git.delta.rocks / jrsonnet / refs/commits / f319c3545168

difftreelog

perf native implementation of std.splitLimitR (#163)

Tristan Stenner2024-05-17parent: #c5b983e.patch.diff
in: master
* native implementation of std.splitLimitR

* style: fix formatting

---------

5 files changed

modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
178 ("isEmpty", builtin_is_empty::INST),178 ("isEmpty", builtin_is_empty::INST),
179 ("equalsIgnoreCase", builtin_equals_ignore_case::INST),179 ("equalsIgnoreCase", builtin_equals_ignore_case::INST),
180 ("splitLimit", builtin_splitlimit::INST),180 ("splitLimit", builtin_splitlimit::INST),
181 ("splitLimitR", builtin_splitlimitr::INST),
181 ("asciiUpper", builtin_ascii_upper::INST),182 ("asciiUpper", builtin_ascii_upper::INST),
182 ("asciiLower", builtin_ascii_lower::INST),183 ("asciiLower", builtin_ascii_lower::INST),
183 ("findSubstr", builtin_find_substr::INST),184 ("findSubstr", builtin_find_substr::INST),
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
20 stripChars(str, chars)::20 stripChars(str, chars)::
21 std.lstripChars(std.rstripChars(str, chars), chars),21 std.lstripChars(std.rstripChars(str, chars), chars),
2222
23 splitLimitR(str, c, maxsplits)::
24 if maxsplits == -1 then
25 std.splitLimit(str, c, -1)
26 else
27 local revStr(str) = std.join('', std.reverse(std.stringChars(str)));
28 std.map(function(e) revStr(e), std.reverse(std.splitLimit(revStr(str), revStr(c), maxsplits))),
29
30 split(str, c):: std.splitLimit(str, c, -1),23 split(str, c):: std.splitLimit(str, c, -1),
3124
32 mapWithIndex(func, arr)::25 mapWithIndex(func, arr)::
modifiedcrates/jrsonnet-stdlib/src/strings.rsdiffbeforeafterboth
46 }46 }
47}47}
48
49#[builtin]
50pub fn builtin_splitlimitr(str: IStr, c: IStr, maxsplits: Either![usize, M1]) -> ArrValue {
51 use Either2::*;
52 match maxsplits {
53 A(n) =>
54 // rsplitn does not implement DoubleEndedIterator so collect into
55 // a temporary vec
56 {
57 str.rsplitn(n + 1, &c as &str)
58 .map(Val::string)
59 .collect::<Vec<_>>()
60 .into_iter()
61 .rev()
62 .collect()
63 }
64 B(_) => str.split(&c as &str).map(Val::string).collect(),
65 }
66}
4867
49#[builtin]68#[builtin]
50pub fn builtin_ascii_upper(str: IStr) -> String {69pub fn builtin_ascii_upper(str: IStr) -> String {
addedtests/golden/builtin_strings.jsonnetdiffbeforeafterboth

no changes

addedtests/golden/builtin_strings.jsonnet.goldendiffbeforeafterboth

no changes