forked from AssemblyScript/assemblyscript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharraybuffer.ts
More file actions
39 lines (33 loc) · 1.08 KB
/
arraybuffer.ts
File metadata and controls
39 lines (33 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import {
HEADER_SIZE,
MAX_BLENGTH,
allocUnsafe
} from "./internal/arraybuffer";
@sealed
export class ArrayBuffer {
readonly byteLength: i32; // capped to [0, MAX_LENGTH]
constructor(length: i32) {
if (<u32>length > <u32>MAX_BLENGTH) throw new RangeError("Invalid array buffer length");
var buffer = allocUnsafe(length);
set_memory(changetype<usize>(buffer) + HEADER_SIZE, 0, <usize>length);
return buffer;
}
slice(begin: i32 = 0, end: i32 = MAX_BLENGTH): ArrayBuffer {
var len = this.byteLength;
if (begin < 0) begin = max(len + begin, 0);
else begin = min(begin, len);
if (end < 0) end = max(len + end, 0);
else end = min(end, len);
var newLen = max(end - begin, 0);
var buffer = allocUnsafe(newLen);
move_memory(changetype<usize>(buffer) + HEADER_SIZE, changetype<usize>(this) + HEADER_SIZE + begin, newLen);
return buffer;
}
}
export declare interface FastArray<T> {}
export declare interface ArrayBufferView<T> {
readonly buffer: ArrayBuffer;
readonly byteOffset: i32;
readonly byteLength: i32;
readonly length: i32;
}