//------------------------------------------------------------------------------------------------------- // 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 JsrtExternalArrayBuffer : public ExternalArrayBuffer { protected: DEFINE_VTABLE_CTOR(JsrtExternalArrayBuffer, ExternalArrayBuffer); DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JsrtExternalArrayBuffer); JsrtExternalArrayBuffer(byte *buffer, uint32 length, JsFinalizeCallback finalizeCallback, void *callbackState, DynamicType *type); virtual ArrayBufferDetachedStateBase* CreateDetachedState(BYTE* buffer, DECLSPEC_GUARD_OVERFLOW uint32 bufferLength) override; public: static JsrtExternalArrayBuffer* New(byte *buffer, uint32 length, JsFinalizeCallback finalizeCallback, void *callbackState, DynamicType *type); void Finalize(bool isShutdown) override; private: FieldNoBarrier(JsFinalizeCallback) finalizeCallback; Field(void *) callbackState; class JsrtExternalArrayBufferDetachedState : public ExternalArrayBufferDetachedState { FieldNoBarrier(JsFinalizeCallback) finalizeCallback; Field(void *) callbackState; public: JsrtExternalArrayBufferDetachedState(BYTE* buffer, uint32 bufferLength, JsFinalizeCallback finalizeCallback, void *callbackState); virtual void ClearSelfOnly() override; virtual void DiscardState() override; virtual ArrayBuffer* Create(JavascriptLibrary* library) override; }; }; } AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(Js::JsrtExternalArrayBuffer, &Js::RecyclableObject::DumpObjectFunction);