Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /gin /data_object_builder.h
blob: d3792bff85e0215dbd8eb7e5391290479438601b [file] [log] [blame] [edit]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef GIN_DATA_OBJECT_BUILDER_H_
#define GIN_DATA_OBJECT_BUILDER_H_
#include<string_view>
#include<utility>
#include"base/check.h"
#include"base/memory/raw_ptr.h"
#include"gin/converter.h"
#include"gin/gin_export.h"
#include"v8/include/v8-forward.h"
#include"v8/include/v8-object.h"
namespace gin{
// Constructs a JavaScript object with a series of data properties.
// (As with default data properties in JavaScript, these properties are
// configurable, writable and enumerable.)
//
// Values are automatically converted using gin::Converter, though if
// using a type where the conversion may fail, callers must convert ahead of
// time.
//
// This class avoids the pitfall of using v8::Object::Set, which may invoke
// setters on the object prototype.
//
// Expected usage:
// v8::Local<v8::Object> object = gin::DataObjectBuilder(isolate)
// .Set("boolean", true)
// .Set("integer", 42)
// .Build();
//
// Because this builder class contains local handles, callers must ensure it
// does not outlive the scope in which it is created.
class GIN_EXPORTDataObjectBuilder{
public:
explicitDataObjectBuilder(v8::Isolate* isolate);
DataObjectBuilder(constDataObjectBuilder&)=delete;
DataObjectBuilder&operator=(constDataObjectBuilder&)=delete;
~DataObjectBuilder();
template<typename T>
DataObjectBuilder&Set(std::string_view key, T&& value){
DCHECK(!object_.IsEmpty());
v8::Local<v8::String> v8_key=StringToSymbol(isolate_, key);
v8::Local<v8::Value> v8_value=
ConvertToV8(isolate_, std::forward<T>(value));
CHECK(object_->CreateDataProperty(context_, v8_key, v8_value).ToChecked());
return*this;
}
template<typename T>
DataObjectBuilder&Set(uint32_t index, T&& value){
DCHECK(!object_.IsEmpty());
v8::Local<v8::Value> v8_value=
ConvertToV8(isolate_, std::forward<T>(value));
CHECK(object_->CreateDataProperty(context_, index, v8_value).ToChecked());
return*this;
}
v8::Local<v8::Object>Build(){
DCHECK(!object_.IsEmpty());
v8::Local<v8::Object> result= object_;
object_.Clear();
return result;
}
private:
raw_ptr<v8::Isolate> isolate_;
v8::Local<v8::Context> context_;
v8::Local<v8::Object> object_;
};
}// namespace gin
#endif// GIN_DATA_OBJECT_BUILDER_H_

[8]ページ先頭

©2009-2025 Movatter.jp