1// Copyright 2016 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_INSPECTOR_STRINGUTIL_H_
6#define V8_INSPECTOR_STRINGUTIL_H_
7
8#include "src/base/macros.h"
9#include "src/inspector/string-16.h"
10
11#include "include/v8-inspector.h"
12
13namespace v8_inspector {
14
15namespace protocol {
16
17class Value;
18
19using String = v8_inspector::String16;
20using StringBuilder = v8_inspector::String16Builder;
21
22class StringUtil {
23 public:
24  static String substring(const String& s, size_t pos, size_t len) {
25    return s.substring(pos, len);
26  }
27  static String fromInteger(int number) { return String::fromInteger(number); }
28  static String fromInteger(size_t number) {
29    return String::fromInteger(number);
30  }
31  static String fromDouble(double number) { return String::fromDouble(number); }
32  static const size_t kNotFound = String::kNotFound;
33  static void builderReserve(StringBuilder& builder, size_t capacity) {
34    builder.reserveCapacity(capacity);
35  }
36};
37
38std::unique_ptr<protocol::Value> parseJSON(const StringView& json);
39std::unique_ptr<protocol::Value> parseJSON(const String16& json);
40
41}  // namespace protocol
42
43v8::Local<v8::String> toV8String(v8::Isolate*, const String16&);
44v8::Local<v8::String> toV8StringInternalized(v8::Isolate*, const String16&);
45v8::Local<v8::String> toV8StringInternalized(v8::Isolate*, const char*);
46v8::Local<v8::String> toV8String(v8::Isolate*, const StringView&);
47// TODO(dgozman): rename to toString16.
48String16 toProtocolString(v8::Local<v8::String>);
49String16 toProtocolStringWithTypeCheck(v8::Local<v8::Value>);
50String16 toString16(const StringView&);
51StringView toStringView(const String16&);
52bool stringViewStartsWith(const StringView&, const char*);
53
54class StringBufferImpl : public StringBuffer {
55 public:
56  // Destroys string's content.
57  static std::unique_ptr<StringBufferImpl> adopt(String16&);
58  const StringView& string() override { return m_string; }
59
60 private:
61  explicit StringBufferImpl(String16&);
62  String16 m_owner;
63  StringView m_string;
64
65  DISALLOW_COPY_AND_ASSIGN(StringBufferImpl);
66};
67
68}  //  namespace v8_inspector
69
70#endif  // V8_INSPECTOR_STRINGUTIL_H_
71