Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Unified Diff: src/inspector/String16.h

Issue 2292573002: [inspector] Initial import of v8_inspector. (Closed)
Patch Set: format the code, disable cpplint Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/inspector/SearchUtil.cpp ('k') | src/inspector/String16.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/String16.h
diff --git a/src/inspector/String16.h b/src/inspector/String16.h
new file mode 100644
index 0000000000000000000000000000000000000000..e342fe83398afb1e6d2d7d3683be6757b5d9e513
--- /dev/null
+++ b/src/inspector/String16.h
@@ -0,0 +1,132 @@
+// Copyright 2016 the V8 project 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 V8_INSPECTOR_STRING16_H_
+#define V8_INSPECTOR_STRING16_H_
+
+#include <stdint.h>
+#include <cctype>
+#include <climits>
+#include <cstring>
+#include <string>
+#include <vector>
+
+namespace v8_inspector {
+
+using UChar = uint16_t;
+
+class String16 {
+ public:
+ static const size_t kNotFound = static_cast<size_t>(-1);
+
+ String16() {}
+ String16(const String16& other) : m_impl(other.m_impl) {}
+ String16(const UChar* characters, size_t size) : m_impl(characters, size) {}
+ String16(const UChar* characters) : m_impl(characters) {}
+ String16(const char* characters)
+ : String16(characters, std::strlen(characters)) {}
+ String16(const char* characters, size_t size) {
+ m_impl.resize(size);
+ for (size_t i = 0; i < size; ++i) m_impl[i] = characters[i];
+ }
+
+ static String16 fromInteger(int);
+ static String16 fromDouble(double);
+ static String16 fromDoublePrecision3(double);
+ static String16 fromDoublePrecision6(double);
+
+ int toInteger(bool* ok = nullptr) const;
+ String16 stripWhiteSpace() const;
+ const UChar* characters16() const { return m_impl.c_str(); }
+ size_t length() const { return m_impl.length(); }
+ bool isEmpty() const { return !m_impl.length(); }
+ UChar operator[](unsigned index) const { return m_impl[index]; }
+ String16 substring(unsigned pos, unsigned len = UINT_MAX) const {
+ return String16(m_impl.substr(pos, len));
+ }
+ size_t find(const String16& str, unsigned start = 0) const {
+ return m_impl.find(str.m_impl, start);
+ }
+ size_t reverseFind(const String16& str, unsigned start = UINT_MAX) const {
+ return m_impl.rfind(str.m_impl, start);
+ }
+ void swap(String16& other) { m_impl.swap(other.m_impl); }
+
+ // Convenience methods.
+ std::string utf8() const;
+ static String16 fromUTF8(const char* stringStart, size_t length);
+
+ const std::basic_string<UChar>& impl() const { return m_impl; }
+ explicit String16(const std::basic_string<UChar>& impl) : m_impl(impl) {}
+
+ std::size_t hash() const {
+ if (!has_hash) {
+ size_t hash = 0;
+ for (size_t i = 0; i < length(); ++i) hash = 31 * hash + m_impl[i];
+ hash_code = hash;
+ has_hash = true;
+ }
+ return hash_code;
+ }
+
+ private:
+ std::basic_string<UChar> m_impl;
+ mutable bool has_hash = false;
+ mutable std::size_t hash_code = 0;
+};
+
+inline bool operator==(const String16& a, const String16& b) {
+ return a.impl() == b.impl();
+}
+inline bool operator<(const String16& a, const String16& b) {
+ return a.impl() < b.impl();
+}
+inline bool operator!=(const String16& a, const String16& b) {
+ return a.impl() != b.impl();
+}
+inline bool operator==(const String16& a, const char* b) {
+ return a.impl() == String16(b).impl();
+}
+inline String16 operator+(const String16& a, const char* b) {
+ return String16(a.impl() + String16(b).impl());
+}
+inline String16 operator+(const char* a, const String16& b) {
+ return String16(String16(a).impl() + b.impl());
+}
+inline String16 operator+(const String16& a, const String16& b) {
+ return String16(a.impl() + b.impl());
+}
+
+class String16Builder {
+ public:
+ String16Builder();
+ void append(const String16&);
+ void append(UChar);
+ void append(char);
+ void append(const UChar*, size_t);
+ void append(const char*, size_t);
+ String16 toString();
+ void reserveCapacity(size_t);
+
+ private:
+ std::vector<UChar> m_buffer;
+};
+
+} // namespace v8_inspector
+
+#if !defined(__APPLE__) || defined(_LIBCPP_VERSION)
+
+namespace std {
+template <>
+struct hash<v8_inspector::String16> {
+ std::size_t operator()(const v8_inspector::String16& string) const {
+ return string.hash();
+ }
+};
+
+} // namespace std
+
+#endif // !defined(__APPLE__) || defined(_LIBCPP_VERSION)
+
+#endif // V8_INSPECTOR_STRING16_H_
« no previous file with comments | « src/inspector/SearchUtil.cpp ('k') | src/inspector/String16.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698