JavascriptWeakSet.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. namespace Js
  7. {
  8. class JavascriptWeakSet : public DynamicObject
  9. {
  10. private:
  11. typedef JsUtil::WeaklyReferencedKeyDictionary<DynamicObject, bool, RecyclerPointerComparer<const DynamicObject*>> KeySet;
  12. KeySet keySet;
  13. DEFINE_VTABLE_CTOR_MEMBER_INIT(JavascriptWeakSet, DynamicObject, keySet);
  14. DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptWeakSet);
  15. public:
  16. JavascriptWeakSet(DynamicType* type);
  17. static bool Is(Var aValue);
  18. static JavascriptWeakSet* FromVar(Var aValue);
  19. void Add(DynamicObject* key);
  20. bool Delete(DynamicObject* key);
  21. bool Has(DynamicObject* key);
  22. virtual BOOL GetDiagTypeString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  23. class EntryInfo
  24. {
  25. public:
  26. static FunctionInfo NewInstance;
  27. static FunctionInfo Add;
  28. static FunctionInfo Delete;
  29. static FunctionInfo Has;
  30. };
  31. static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
  32. static Var EntryAdd(RecyclableObject* function, CallInfo callInfo, ...);
  33. static Var EntryDelete(RecyclableObject* function, CallInfo callInfo, ...);
  34. static Var EntryHas(RecyclableObject* function, CallInfo callInfo, ...);
  35. public:
  36. // For diagnostics and heap enum provide size and allow enumeration of key value pairs
  37. int Size() { keySet.Clean(); return keySet.Count(); }
  38. template <typename Fn>
  39. void Map(Fn fn)
  40. {
  41. return keySet.Map([&](DynamicObject* key, bool, const RecyclerWeakReference<DynamicObject>*)
  42. {
  43. fn(key);
  44. });
  45. }
  46. #if ENABLE_TTD
  47. public:
  48. virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override;
  49. virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override;
  50. virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override;
  51. #endif
  52. };
  53. }