From 411cdf067b5b82c96fca5880c790931818f0d757 Mon Sep 17 00:00:00 2001 From: Faissal Bensefia Date: Sun, 26 May 2019 03:08:36 +0100 Subject: [PATCH] AK: Implement String::to_int (#99) --- AK/String.cpp | 30 +++++++++++++++++++++++++----- LibGUI/GVariant.h | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/AK/String.cpp b/AK/String.cpp index beacc5b8819..3298e833aa5 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -15,7 +15,7 @@ bool String::operator==(const String& other) const if (length() != other.length()) return false; - + return !memcmp(characters(), other.characters(), length()); } @@ -122,12 +122,32 @@ ByteBuffer String::to_byte_buffer() const return ByteBuffer::copy(reinterpret_cast(characters()), length()); } -// FIXME: Duh. int String::to_int(bool& ok) const { - unsigned value = to_uint(ok); - ASSERT(ok); - return (int)value; + bool negative = false; + int value = 0; + ssize_t i = 0; + + if (is_null()) { + ok = false; + return 0; + } + + if (characters()[0] == '-') { + i++; + negative = true; + } + for (; i < length(); i++) { + if (characters()[i] < '0' || characters()[i] > '9') { + ok = false; + return 0; + } + value = value * 10; + value += characters()[i] - '0'; + } + ok = true; + + return negative ? -value : value; } unsigned String::to_uint(bool& ok) const diff --git a/LibGUI/GVariant.h b/LibGUI/GVariant.h index 5fee08ef9d1..38cdfd713b7 100644 --- a/LibGUI/GVariant.h +++ b/LibGUI/GVariant.h @@ -194,7 +194,7 @@ private: RawPoint as_point; RawSize as_size; RawRect as_rect; - } m_value; + } m_value; Type m_type { Type::Invalid }; };