v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
string-util.h
Go to the documentation of this file.
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_STRING_UTIL_H_
6#define V8_INSPECTOR_STRING_UTIL_H_
7
8#include <stdint.h>
9
10#include <memory>
11#include <optional>
12
13#include "../../third_party/inspector_protocol/crdtp/protocol_core.h"
16#include "src/base/logging.h"
17#include "src/base/macros.h"
19
20namespace v8_inspector {
21
22namespace protocol {
23
24class Value;
25
27
29 public:
30 static String fromUTF8(const uint8_t* data, size_t length) {
31 return String16::fromUTF8(reinterpret_cast<const char*>(data), length);
32 }
33
34 static String fromUTF16LE(const uint16_t* data, size_t length) {
35 return String16::fromUTF16LE(data, length);
36 }
37
38 static const uint8_t* CharactersLatin1(const String& s) { return nullptr; }
39 static const uint8_t* CharactersUTF8(const String& s) { return nullptr; }
40 static const uint16_t* CharactersUTF16(const String& s) {
41 return s.characters16();
42 }
43 static size_t CharacterCount(const String& s) { return s.length(); }
44};
45
46// A read-only sequence of uninterpreted bytes with reference-counted storage.
48 public:
49 Binary() : bytes_(std::make_shared<std::vector<uint8_t>>()) {}
50
51 const uint8_t* data() const { return bytes_->data(); }
52 size_t size() const { return bytes_->size(); }
53 String toBase64() const;
54 static Binary fromBase64(const String& base64, bool* success);
55 static Binary fromSpan(v8_crdtp::span<uint8_t> span) {
56 return fromSpan(v8::MemorySpan<const uint8_t>(span.begin(), span.size()));
57 }
59 return Binary(
60 std::make_shared<std::vector<uint8_t>>(span.begin(), span.end()));
61 }
62
63 private:
64 std::shared_ptr<std::vector<uint8_t>> bytes_;
65
66 explicit Binary(std::shared_ptr<std::vector<uint8_t>> bytes)
67 : bytes_(bytes) {}
68};
69} // namespace protocol
70
75// TODO(dgozman): rename to toString16.
78V8_EXPORT_PRIVATE String16 toString16(const StringView&);
79V8_EXPORT_PRIVATE StringView toStringView(const String16&);
80template <size_t N>
81StringView toStringView(const char* str[N]) {
82 return StringView(reinterpret_cast<const uint8_t*>(str), N);
83}
84bool stringViewStartsWith(const StringView&, const char*);
85
86// Creates a string buffer instance which owns |str|, a 16 bit string.
87std::unique_ptr<StringBuffer> StringBufferFrom(String16 str);
88
89// Creates a string buffer instance which owns |str|, an 8 bit string.
90// 8 bit strings are used for LATIN1 text (which subsumes 7 bit ASCII, e.g.
91// our generated JSON), as well as for CBOR encoded binary messages.
92std::unique_ptr<StringBuffer> StringBufferFrom(std::vector<uint8_t> str);
93
94String16 stackTraceIdToString(uintptr_t id);
95
96} // namespace v8_inspector
97
98// See third_party/inspector_protocol/crdtp/serializer_traits.h.
99namespace v8_crdtp {
100
101template <>
102struct ProtocolTypeTraits<v8_inspector::String16> {
103 static bool Deserialize(DeserializerState* state,
105 static void Serialize(const v8_inspector::String16& value,
106 std::vector<uint8_t>* bytes);
107};
108
109template <>
110struct ProtocolTypeTraits<v8_inspector::protocol::Binary> {
111 static bool Deserialize(DeserializerState* state,
114 std::vector<uint8_t>* bytes);
115};
116
117} // namespace v8_crdtp
118
119#endif // V8_INSPECTOR_STRING_UTIL_H_
static V8_EXPORT String16 fromUTF8(const char *stringStart, size_t length)
Definition string-16.cc:229
static V8_EXPORT String16 fromUTF16LE(const UChar *stringStart, size_t length)
Definition string-16.cc:233
std::shared_ptr< std::vector< uint8_t > > bytes_
Definition string-util.h:64
static Binary fromSpan(v8_crdtp::span< uint8_t > span)
Definition string-util.h:55
const uint8_t * data() const
Definition string-util.h:51
static Binary fromSpan(v8::MemorySpan< const uint8_t > span)
Definition string-util.h:58
Binary(std::shared_ptr< std::vector< uint8_t > > bytes)
Definition string-util.h:66
static String fromUTF16LE(const uint16_t *data, size_t length)
Definition string-util.h:34
static size_t CharacterCount(const String &s)
Definition string-util.h:43
static const uint16_t * CharactersUTF16(const String &s)
Definition string-util.h:40
static const uint8_t * CharactersLatin1(const String &s)
Definition string-util.h:38
static const uint8_t * CharactersUTF8(const String &s)
Definition string-util.h:39
static String fromUTF8(const uint8_t *data, size_t length)
Definition string-util.h:30
STL namespace.
bool stringViewStartsWith(const StringView &string, const char *prefix)
String16 toProtocolString(v8::Isolate *isolate, v8::Local< v8::String > value)
String16 stackTraceIdToString(uintptr_t id)
StringView toStringView(const String16 &string)
std::unique_ptr< StringBuffer > StringBufferFrom(String16 str)
v8::Local< v8::String > toV8String(v8::Isolate *isolate, const String16 &string)
String16 toProtocolStringWithTypeCheck(v8::Isolate *isolate, v8::Local< v8::Value > value)
String16 toString16(const StringView &string)
v8::Local< v8::String > toV8StringInternalized(v8::Isolate *isolate, const String16 &string)
#define V8_EXPORT_PRIVATE
Definition macros.h:460
static bool Deserialize(DeserializerState *state, v8_inspector::String16 *value)
static void Serialize(const v8_inspector::String16 &value, std::vector< uint8_t > *bytes)
static bool Deserialize(DeserializerState *state, v8_inspector::protocol::Binary *value)
static void Serialize(const v8_inspector::protocol::Binary &value, std::vector< uint8_t > *bytes)
#define V8_EXPORT
Definition v8config.h:800