diff options
author | ilnurkh <ilnurkh@yandex-team.com> | 2024-12-13 16:35:53 +0300 |
---|---|---|
committer | ilnurkh <ilnurkh@yandex-team.com> | 2024-12-13 19:00:00 +0300 |
commit | d91dac51cf9ec6c397d6d0213f0d9ab7dd29c889 (patch) | |
tree | ebab71eddf75c1bea0b0feaa917d81bfd8a9e9f0 /library/cpp | |
parent | 15c84383e775f60e453e19e7e7038bdf0da1b7ad (diff) | |
download | ydb-d91dac51cf9ec6c397d6d0213f0d9ab7dd29c889.tar.gz |
introduce TCgiParameters::GetLast
commit_hash:db2785d0d17510b53aeaec1e30271e6b08e07db1
Diffstat (limited to 'library/cpp')
-rw-r--r-- | library/cpp/cgiparam/cgiparam.cpp | 10 | ||||
-rw-r--r-- | library/cpp/cgiparam/cgiparam.h | 7 | ||||
-rw-r--r-- | library/cpp/cgiparam/cgiparam_ut.cpp | 2 |
3 files changed, 19 insertions, 0 deletions
diff --git a/library/cpp/cgiparam/cgiparam.cpp b/library/cpp/cgiparam/cgiparam.cpp index 397e23407f..5f3be8705f 100644 --- a/library/cpp/cgiparam/cgiparam.cpp +++ b/library/cpp/cgiparam/cgiparam.cpp @@ -17,6 +17,16 @@ const TString& TCgiParameters::Get(const TStringBuf name, size_t numOfValue) con return end() == it ? Default<TString>() : it->second; } +const TString& TCgiParameters::GetLast(const TStringBuf name) const noexcept { + if (auto it = this->upper_bound(name); it != this->begin()) { + --it; + if (it->first == name) { + return it->second; + } + } + return Default<TString>(); +} + bool TCgiParameters::Erase(const TStringBuf name, size_t pos) { const auto pair = equal_range(name); diff --git a/library/cpp/cgiparam/cgiparam.h b/library/cpp/cgiparam/cgiparam.h index 465940be67..c30a8ac794 100644 --- a/library/cpp/cgiparam/cgiparam.h +++ b/library/cpp/cgiparam/cgiparam.h @@ -78,6 +78,13 @@ public: Y_PURE_FUNCTION const TString& Get(const TStringBuf name, size_t numOfValue = 0) const noexcept Y_LIFETIME_BOUND; + /// Returns the last value by name + /** + * @note The returned value is CGI-unescaped. + */ + Y_PURE_FUNCTION + const TString& GetLast(const TStringBuf name) const noexcept Y_LIFETIME_BOUND; + void InsertEscaped(const TStringBuf name, const TStringBuf value); #if !defined(__GLIBCXX__) diff --git a/library/cpp/cgiparam/cgiparam_ut.cpp b/library/cpp/cgiparam/cgiparam_ut.cpp index de6d23882d..c82f0344d2 100644 --- a/library/cpp/cgiparam/cgiparam_ut.cpp +++ b/library/cpp/cgiparam/cgiparam_ut.cpp @@ -210,8 +210,10 @@ Y_UNIT_TEST_SUITE(TCgiParametersTest) { UNIT_ASSERT_VALUES_EQUAL(c.NumOfValues("b"), 1u); UNIT_ASSERT_VALUES_EQUAL(c.Get("b"), "b1"); + UNIT_ASSERT_VALUES_EQUAL(c.GetLast("b"), "b1"); UNIT_ASSERT_VALUES_EQUAL(c.Get("a", 0), "a1"); UNIT_ASSERT_VALUES_EQUAL(c.Get("a", 1), "a2"); + UNIT_ASSERT_VALUES_EQUAL(c.GetLast("a"), "a2"); UNIT_ASSERT_VALUES_EQUAL(c.Print(), "a=a1&a=a2&b=b1"); } |