mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-26 07:22:21 +00:00
37 lines
842 B
TypeScript
37 lines
842 B
TypeScript
|
// Multiple options:
|
||
|
// 1. C-like with no 'length' or 'push'
|
||
|
// 2. Descriptors that can be constructed from lower level arrays
|
||
|
|
||
|
class Array<T> {
|
||
|
|
||
|
readonly capacity: i32;
|
||
|
length: i32;
|
||
|
ptr: usize;
|
||
|
|
||
|
static fromPtr<T>(ptr: usize, capacity: i32): Array<T> {
|
||
|
assert(capacity >= 0);
|
||
|
const arr: Array<T> = new Array(0);
|
||
|
store<i32>(changetype<Array<T>, usize>(arr), capacity);
|
||
|
arr.length = ptr;
|
||
|
arr.ptr = ptr;
|
||
|
return arr;
|
||
|
}
|
||
|
|
||
|
constructor(capacity: i32 = 0) {
|
||
|
assert(capacity >= 0);
|
||
|
this.capacity = this.length = capacity;
|
||
|
if (capacity > 0) {
|
||
|
this.ptr = Heap.allocate(<usize>capacity);
|
||
|
} else {
|
||
|
this.ptr = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
dispose(): void {
|
||
|
store<i64>(changetype<this,usize>(this), 0);
|
||
|
Heap.dispose(this.ptr);
|
||
|
this.ptr = 0;
|
||
|
Heap.dispose(changetype<this,usize>(this));
|
||
|
}
|
||
|
}
|