* Implement TJSArrayBuffer

This commit is contained in:
Michaël Van Canneyt 2024-06-26 14:17:44 +02:00
parent 440a635bce
commit 0c745fb257

View File

@ -710,30 +710,55 @@ type
IJSArrayBuffer = interface(IJSObject)
['{A1612EED-4F05-46C0-90BE-ACD511B15E89}']
function Slice : IJSArrayBuffer;
function Slice (aStart : NativeInt): IJSArrayBuffer;
function Slice (aStart,aEndExclusive : NativeInt): IJSArrayBuffer;
function _getByteLength: Nativeint;
function _getDetached: Boolean;
function _getMaxByteLength: Nativeint;
function _getResizable: Boolean;
property byteLength : Nativeint Read _getByteLength;
property maxByteLength : Nativeint Read _getMaxByteLength;
property detached : Boolean Read _getDetached;
property resizable : Boolean Read _getResizable;
end;
{ TJSArrayBuffer }
TJSArrayBuffer = class(TJSObject,IJSArrayBuffer)
Protected
function _getByteLength: Nativeint;
function _getDetached: Boolean;
function _getMaxByteLength: Nativeint;
function _getResizable: Boolean;
public
constructor create (aSize : integer);
class function GlobalMemory : TJSArrayBuffer;
function Slice : IJSArrayBuffer;
function Slice (aStart : NativeInt): IJSArrayBuffer;
function Slice (aStart,aEndExclusive : NativeInt): IJSArrayBuffer;
class function Cast(const Intf: IJSObject): IJSArrayBuffer; overload;
class function JSClassName: UnicodeString; override;
property byteLength : Nativeint Read _getByteLength;
property maxByteLength : Nativeint Read _getMaxByteLength;
property detached : Boolean Read _getDetached;
property resizable : Boolean Read _getResizable;
end;
{ IJSArrayBufferView }
IJSArrayBufferView = interface(IJSObject)
['{A1612EED-4F05-46C0-90BE-ACD511B1598E}']
end;
{ TJSArrayBufferView }
TJSArrayBufferView = class(TJSObject,IJSArrayBufferView)
public
class function Cast(const Intf: IJSObject): IJSArrayBufferView; overload;
end;
{ IJSTypedArray }
IJSTypedArray = interface(IJSObject)
@ -761,6 +786,7 @@ type
public
constructor Create(aBytes : PByte; aLen : NativeUInt);
constructor Create(aBytes : TBytes);
constructor create(aArray : IJSArrayBuffer);
class function Cast(const Intf: IJSObject): IJSTypedArray; overload;
procedure set_(aArray : IJSTypedArray; TargetOffset : Integer);
procedure set_(aArray : IJSTypedArray);
@ -1834,6 +1860,11 @@ begin
JobCreate(True,[Data]);
end;
constructor TJSTypedArray.create(aArray: IJSArrayBuffer);
begin
JobCreate(True,[aArray]);
end;
class function TJSTypedArray.Cast(const Intf: IJSObject): IJSTypedArray;
begin
Result:=TJSTypedArray.Cast(Intf);
@ -1851,9 +1882,60 @@ end;
{ TJSArrayBuffer }
function TJSArrayBuffer._getByteLength: Nativeint;
begin
Result:=ReadJSPropertyInt64('byteLength');
end;
function TJSArrayBuffer._getDetached: Boolean;
begin
Result:=ReadJSPropertyBoolean('detached');
end;
function TJSArrayBuffer._getMaxByteLength: Nativeint;
begin
Result:=ReadJSPropertyInt64('maxByteLength');
end;
function TJSArrayBuffer._getResizable: Boolean;
begin
Result:=ReadJSPropertyBoolean('resizable');
end;
constructor TJSArrayBuffer.create(aSize: integer);
begin
JobCreate(True,[aSize])
end;
class function TJSArrayBuffer.GlobalMemory: TJSArrayBuffer;
begin
Result:=JOBCreateGlobal('InstanceBuffer');
end;
function TJSArrayBuffer.Slice: IJSArrayBuffer;
begin
Result:=InvokeJSObjectResult('slice',[],TJSArrayBuffer) as IJSArrayBuffer;
end;
function TJSArrayBuffer.Slice(aStart: NativeInt): IJSArrayBuffer;
begin
Result:=InvokeJSObjectResult('slice',[aStart],TJSArrayBuffer) as IJSArrayBuffer;
end;
function TJSArrayBuffer.Slice(aStart, aEndExclusive: NativeInt): IJSArrayBuffer;
begin
Result:=InvokeJSObjectResult('slice',[aStart,aEndExclusive],TJSArrayBuffer) as IJSArrayBuffer;
end;
class function TJSArrayBuffer.Cast(const Intf: IJSObject): IJSArrayBuffer;
begin
Result:=TJSArrayBuffer.Cast(Intf);
Result:=TJSArrayBuffer.JOBCast(Intf);
end;
class function TJSArrayBuffer.JSClassName: UnicodeString;
begin
Result:='ArrayBuffer';
end;
{ TJSArrayBufferView }
@ -1863,9 +1945,6 @@ begin
Result:=TJSArrayBufferView.JOBCast(Intf);
end;
{ TJSArray }
function TJSArray._GetElements(Index: NativeInt): TJOB_JSValue;
@ -3983,6 +4062,7 @@ begin
Result:=InvokeJSUnicodeStringResult('toLocaleDateString',[]);
end;
exports JOBCallback;
initialization