1// Copyright 2021 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 INCLUDE_V8_CONTAINER_H_ 6#define INCLUDE_V8_CONTAINER_H_ 7 8#include <stddef.h> 9#include <stdint.h> 10 11#include "v8-local-handle.h" // NOLINT(build/include_directory) 12#include "v8-object.h" // NOLINT(build/include_directory) 13#include "v8config.h" // NOLINT(build/include_directory) 14 15namespace v8 { 16 17class Context; 18class Isolate; 19 20/** 21 * An instance of the built-in array constructor (ECMA-262, 15.4.2). 22 */ 23class V8_EXPORT Array : public Object { 24 public: 25 uint32_t Length() const; 26 27 /** 28 * Creates a JavaScript array with the given length. If the length 29 * is negative the returned array will have length 0. 30 */ 31 static Local<Array> New(Isolate* isolate, int length = 0); 32 33 /** 34 * Creates a JavaScript array out of a Local<Value> array in C++ 35 * with a known length. 36 */ 37 static Local<Array> New(Isolate* isolate, Local<Value>* elements, 38 size_t length); 39 V8_INLINE static Array* Cast(Value* value) { 40#ifdef V8_ENABLE_CHECKS 41 CheckCast(value); 42#endif 43 return static_cast<Array*>(value); 44 } 45 46 private: 47 Array(); 48 static void CheckCast(Value* obj); 49}; 50 51/** 52 * An instance of the built-in Map constructor (ECMA-262, 6th Edition, 23.1.1). 53 */ 54class V8_EXPORT Map : public Object { 55 public: 56 size_t Size() const; 57 void Clear(); 58 V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context, 59 Local<Value> key); 60 V8_WARN_UNUSED_RESULT MaybeLocal<Map> Set(Local<Context> context, 61 Local<Value> key, 62 Local<Value> value); 63 V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context, 64 Local<Value> key); 65 V8_WARN_UNUSED_RESULT Maybe<bool> Delete(Local<Context> context, 66 Local<Value> key); 67 68 /** 69 * Returns an array of length Size() * 2, where index N is the Nth key and 70 * index N + 1 is the Nth value. 71 */ 72 Local<Array> AsArray() const; 73 74 /** 75 * Creates a new empty Map. 76 */ 77 static Local<Map> New(Isolate* isolate); 78 79 V8_INLINE static Map* Cast(Value* value) { 80#ifdef V8_ENABLE_CHECKS 81 CheckCast(value); 82#endif 83 return static_cast<Map*>(value); 84 } 85 86 private: 87 Map(); 88 static void CheckCast(Value* obj); 89}; 90 91/** 92 * An instance of the built-in Set constructor (ECMA-262, 6th Edition, 23.2.1). 93 */ 94class V8_EXPORT Set : public Object { 95 public: 96 size_t Size() const; 97 void Clear(); 98 V8_WARN_UNUSED_RESULT MaybeLocal<Set> Add(Local<Context> context, 99 Local<Value> key); 100 V8_WARN_UNUSED_RESULT Maybe<bool> Has(Local<Context> context, 101 Local<Value> key); 102 V8_WARN_UNUSED_RESULT Maybe<bool> Delete(Local<Context> context, 103 Local<Value> key); 104 105 /** 106 * Returns an array of the keys in this Set. 107 */ 108 Local<Array> AsArray() const; 109 110 /** 111 * Creates a new empty Set. 112 */ 113 static Local<Set> New(Isolate* isolate); 114 115 V8_INLINE static Set* Cast(Value* value) { 116#ifdef V8_ENABLE_CHECKS 117 CheckCast(value); 118#endif 119 return static_cast<Set*>(value); 120 } 121 122 private: 123 Set(); 124 static void CheckCast(Value* obj); 125}; 126 127} // namespace v8 128 129#endif // INCLUDE_V8_CONTAINER_H_ 130