// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_UI_DEVTOOLS_STRING_UTIL_H_ #define COMPONENTS_UI_DEVTOOLS_STRING_UTIL_H_ #include #include "base/json/json_reader.h" #include "base/strings/string_number_conversions.h" namespace ui { namespace devtools { using String = std::string; namespace protocol { class Value; class CustomStringBuilder { String s_; public: CustomStringBuilder() {} CustomStringBuilder(String& s) : s_(s) {} void reserveCapacity(std::size_t size) { s_.reserve(size); } void append(const String& s) { s_ += s; } void append(char c) { s_ += c; } void append(const char* data, unsigned int length) { s_.append(data, length); } String toString() { return s_; } }; using StringBuilder = CustomStringBuilder; class StringUtil { public: static String substring(const String& s, unsigned pos, unsigned len) { return s.substr(pos, len); } static String fromInteger(int number) { return base::IntToString(number); } static String fromDouble(double number) { return base::DoubleToString(number); } static double toDouble(const char* s, size_t len, bool* ok) { double v = 0.0; *ok = base::StringToDouble(std::string(s, len), &v); return *ok ? v : 0.0; } static void builderAppend(StringBuilder& builder, const String& s) { builder.append(s); } static void builderAppend(StringBuilder& builder, char c) { builder.append(c); } static void builderAppend(StringBuilder& builder, const char* s, size_t len) { builder.append(s, len); } static void builderReserve(StringBuilder& builder, unsigned capacity) { builder.reserveCapacity(capacity); } static String builderToString(StringBuilder& builder) { return builder.toString(); } static size_t find(const String& s, const char* needle) { return s.find(needle); } static size_t find(const String& s, const String& needle) { return s.find(needle); } static const size_t kNotFound = static_cast(-1); static std::unique_ptr parseJSON(const String& string); }; } // namespace protocol } // namespace devtools } // namespace ui #endif // COMPONENTS_UI_DEVTOOLS_STRING_UTIL_H_