blob: 9b4ad1c6f58a6fc87012474bfaa471241b50046e [file]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#pragma once
namespace Js
{
class JavascriptMap : public DynamicObject
{
public:
typedef JsUtil::KeyValuePair<Field(Var), Field(Var)> MapDataKeyValuePair;
typedef MapOrSetDataNode<MapDataKeyValuePair> MapDataNode;
typedef MapOrSetDataList<MapDataKeyValuePair> MapDataList;
typedef JsUtil::BaseDictionary<Var, MapDataNode*, Recycler, PowerOf2SizePolicy, SameValueZeroComparer> MapDataMap;
private:
Field(MapDataList) list;
Field(MapDataMap*) map;
DEFINE_VTABLE_CTOR_MEMBER_INIT(JavascriptMap, DynamicObject, list);
DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptMap);
public:
JavascriptMap(DynamicType* type);
static JavascriptMap* New(ScriptContext* scriptContext);
static bool Is(Var aValue);
static JavascriptMap* FromVar(Var aValue);
void Clear();
bool Delete(Var key);
bool Get(Var key, Var* value);
bool Has(Var key);
void Set(Var key, Var value);
int Size();
MapDataList::Iterator GetIterator();
virtual BOOL GetDiagTypeString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
class EntryInfo
{
public:
static FunctionInfo NewInstance;
static FunctionInfo Clear;
static FunctionInfo Delete;
static FunctionInfo ForEach;
static FunctionInfo Get;
static FunctionInfo Has;
static FunctionInfo Set;
static FunctionInfo SizeGetter;
static FunctionInfo Entries;
static FunctionInfo Keys;
static FunctionInfo Values;
static FunctionInfo GetterSymbolSpecies;
};
static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryClear(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryDelete(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryForEach(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryGet(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryHas(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntrySet(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntrySizeGetter(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryEntries(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryKeys(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryValues(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryGetterSymbolSpecies(RecyclableObject* function, CallInfo callInfo, ...);
#if ENABLE_TTD
public:
virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override;
virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override;
virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override;
static JavascriptMap* CreateForSnapshotRestore(ScriptContext* ctx);
#endif
};
}