diff options
author | risenberg <risenberg@yandex-team.ru> | 2022-02-10 16:49:48 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:49:48 +0300 |
commit | 99ac40630808727955ac0448822228528f1ea92d (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/string_utils | |
parent | ec551e975caf33bd88e2803b55464cad608e2441 (diff) | |
download | ydb-99ac40630808727955ac0448822228528f1ea92d.tar.gz |
Restoring authorship annotation for <risenberg@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/string_utils')
-rw-r--r-- | library/cpp/string_utils/parse_size/parse_size.cpp | 46 | ||||
-rw-r--r-- | library/cpp/string_utils/parse_size/parse_size.h | 16 | ||||
-rw-r--r-- | library/cpp/string_utils/parse_size/parse_size_ut.cpp | 38 |
3 files changed, 50 insertions, 50 deletions
diff --git a/library/cpp/string_utils/parse_size/parse_size.cpp b/library/cpp/string_utils/parse_size/parse_size.cpp index a2ed797b36..39188d560b 100644 --- a/library/cpp/string_utils/parse_size/parse_size.cpp +++ b/library/cpp/string_utils/parse_size/parse_size.cpp @@ -3,36 +3,36 @@ #include <util/generic/yexception.h> #include <util/generic/ylimits.h> #include <util/string/cast.h> -#include <util/stream/output.h> +#include <util/stream/output.h> -namespace { +namespace { enum ESuffixShifts { ESS_KILO_BYTES = 10, ESS_MEGA_BYTES = 20, ESS_GIGA_BYTES = 30, ESS_TERA_BYTES = 40, }; - + bool TryShiftValue(ui64& value, ui64 shift) { if (value > (Max<ui64>() >> shift)) { return false; } - + value <<= shift; return true; - } - + } + ui64 ShiftValue(ui64 value, ui64 shift) { if (!TryShiftValue(value, shift)) { ythrow yexception() << "value overflow '" << value << " << " << shift << "'"; } else { return value; } - } - -} - -namespace NSize { + } + +} + +namespace NSize { ui64 ParseSize(TStringBuf str) { if (! str.size()) ythrow yexception() << "Wrong size " << str; @@ -56,7 +56,7 @@ namespace NSize { default: ythrow yexception() << "Unknown suffix " << str; } - + ui64 value = FromString<ui64>(str.substr(0, str.size() - 1)); if (!TryShiftValue(value, shift)) { @@ -77,19 +77,19 @@ namespace NSize { TSize FromGigaBytes(ui64 value) { return TSize(ShiftValue(value, ESS_GIGA_BYTES)); } - + TSize FromTeraBytes(ui64 value) { return TSize(ShiftValue(value, ESS_TERA_BYTES)); } - -} - + +} + +template <> +NSize::TSize FromStringImpl<NSize::TSize>(const char* data, size_t len) { + return NSize::TSize(NSize::ParseSize(TStringBuf(data, len))); +} + template <> -NSize::TSize FromStringImpl<NSize::TSize>(const char* data, size_t len) { - return NSize::TSize(NSize::ParseSize(TStringBuf(data, len))); -} - -template <> void Out<NSize::TSize>(IOutputStream& os, const NSize::TSize& size) { - os << size.GetValue(); -} + os << size.GetValue(); +} diff --git a/library/cpp/string_utils/parse_size/parse_size.h b/library/cpp/string_utils/parse_size/parse_size.h index 61db957b12..ad235ef02f 100644 --- a/library/cpp/string_utils/parse_size/parse_size.h +++ b/library/cpp/string_utils/parse_size/parse_size.h @@ -2,9 +2,9 @@ #include <util/generic/strbuf.h> -namespace NSize { +namespace NSize { ui64 ParseSize(TStringBuf size); - + // Convenient disk size representation with string parsing and integer comparison class TSize { public: @@ -12,22 +12,22 @@ namespace NSize { : Value(value) { } - + ui64 GetValue() const { return Value; } - + operator ui64() const { return Value; } - + private: ui64 Value; }; - + TSize FromKiloBytes(ui64 value); TSize FromMegaBytes(ui64 value); TSize FromGigaBytes(ui64 value); TSize FromTeraBytes(ui64 value); - -} + +} diff --git a/library/cpp/string_utils/parse_size/parse_size_ut.cpp b/library/cpp/string_utils/parse_size/parse_size_ut.cpp index 7aae60f9d5..8fff4f56b2 100644 --- a/library/cpp/string_utils/parse_size/parse_size_ut.cpp +++ b/library/cpp/string_utils/parse_size/parse_size_ut.cpp @@ -2,8 +2,8 @@ #include <library/cpp/testing/unittest/registar.h> -using namespace NSize; - +using namespace NSize; + class TParseSizeTest: public TTestBase { UNIT_TEST_SUITE(TParseSizeTest); @@ -12,9 +12,9 @@ class TParseSizeTest: public TTestBase { UNIT_TEST(TestMegaBytes); UNIT_TEST(TestGigaBytes); UNIT_TEST(TestTeraBytes); - UNIT_TEST(TestOverflow); - UNIT_TEST(TestStaticCreators); - UNIT_TEST(TestToString); + UNIT_TEST(TestOverflow); + UNIT_TEST(TestStaticCreators); + UNIT_TEST(TestToString); UNIT_TEST_SUITE_END(); @@ -43,21 +43,21 @@ private: UNIT_ASSERT(ParseSize("10t") == 1024ul * 1024ul * 1024ul * 1024ul * 10ul); } - void TestStaticCreators() { - UNIT_ASSERT_EQUAL(FromKiloBytes(10), 1024ul * 10ul); - UNIT_ASSERT_EQUAL(FromMegaBytes(10), 1024ul * 1024ul * 10ul); - UNIT_ASSERT_EQUAL(FromGigaBytes(10), 1024ul * 1024ul * 1024ul * 10ul); - UNIT_ASSERT_EQUAL(FromTeraBytes(10), 1024ul * 1024ul * 1024ul * 1024ul * 10ul); - } - - void TestOverflow() { - UNIT_ASSERT_EXCEPTION(ParseSize("20000000000G"), yexception); - UNIT_ASSERT_EXCEPTION(FromGigaBytes(20000000000ull), yexception); - } - - void TestToString() { + void TestStaticCreators() { + UNIT_ASSERT_EQUAL(FromKiloBytes(10), 1024ul * 10ul); + UNIT_ASSERT_EQUAL(FromMegaBytes(10), 1024ul * 1024ul * 10ul); + UNIT_ASSERT_EQUAL(FromGigaBytes(10), 1024ul * 1024ul * 1024ul * 10ul); + UNIT_ASSERT_EQUAL(FromTeraBytes(10), 1024ul * 1024ul * 1024ul * 1024ul * 10ul); + } + + void TestOverflow() { + UNIT_ASSERT_EXCEPTION(ParseSize("20000000000G"), yexception); + UNIT_ASSERT_EXCEPTION(FromGigaBytes(20000000000ull), yexception); + } + + void TestToString() { UNIT_ASSERT_VALUES_EQUAL(ToString(FromKiloBytes(1)), TString("1024")); - } + } }; UNIT_TEST_SUITE_REGISTRATION(TParseSizeTest); |