mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-05-02 18:32:15 +00:00
Add preliminary support for map keys/values, set values
Makes arrays instead of iterators for now
This commit is contained in:
parent
fe70f1d863
commit
d9fbf8a2dd
11
std/assembly/index.d.ts
vendored
11
std/assembly/index.d.ts
vendored
@ -1293,15 +1293,18 @@ declare class Map<K,V> {
|
|||||||
get(key: K): V;
|
get(key: K): V;
|
||||||
delete(key: K): bool;
|
delete(key: K): bool;
|
||||||
clear(): void;
|
clear(): void;
|
||||||
|
keys(): K[]; // preliminary
|
||||||
|
values(): V[]; // preliminary
|
||||||
toString(): string;
|
toString(): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
declare class Set<T> {
|
declare class Set<K> {
|
||||||
readonly size: i32;
|
readonly size: i32;
|
||||||
has(value: T): bool;
|
has(value: K): bool;
|
||||||
add(value: T): void;
|
add(value: K): void;
|
||||||
delete(value: T): bool;
|
delete(value: K): bool;
|
||||||
clear(): void;
|
clear(): void;
|
||||||
|
values(): K[]; // preliminary
|
||||||
toString(): string;
|
toString(): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,6 +189,34 @@ export class Map<K,V> {
|
|||||||
this.entriesOffset = this.entriesCount;
|
this.entriesOffset = this.entriesCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
keys(): K[] {
|
||||||
|
// FIXME: this is preliminary, needs iterators/closures
|
||||||
|
var start = changetype<usize>(this.entries);
|
||||||
|
var size = this.entriesOffset;
|
||||||
|
var keys = Array.create<K>(size);
|
||||||
|
for (let i = 0; i < size; ++i) {
|
||||||
|
let entry = changetype<MapEntry<K,V>>(start + <usize>i * ENTRY_SIZE<K,V>());
|
||||||
|
if (!(entry.taggedNext & EMPTY)) {
|
||||||
|
keys.push(entry.key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
|
||||||
|
values(): V[] {
|
||||||
|
// FIXME: this is preliminary, needs iterators/closures
|
||||||
|
var start = changetype<usize>(this.entries);
|
||||||
|
var size = this.entriesOffset;
|
||||||
|
var values = Array.create<V>(size);
|
||||||
|
for (let i = 0; i < size; ++i) {
|
||||||
|
let entry = changetype<MapEntry<K,V>>(start + <usize>i * ENTRY_SIZE<K,V>());
|
||||||
|
if (!(entry.taggedNext & EMPTY)) {
|
||||||
|
values.push(entry.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
toString(): string {
|
toString(): string {
|
||||||
return "[object Map]";
|
return "[object Map]";
|
||||||
}
|
}
|
||||||
|
@ -163,6 +163,20 @@ export class Set<K> {
|
|||||||
this.entriesOffset = this.entriesCount;
|
this.entriesOffset = this.entriesCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
values(): K[] {
|
||||||
|
// FIXME: this is preliminary, needs iterators/closures
|
||||||
|
var start = changetype<usize>(this.entries);
|
||||||
|
var size = this.entriesOffset;
|
||||||
|
var values = Array.create<K>(size);
|
||||||
|
for (let i = 0; i < size; ++i) {
|
||||||
|
let entry = changetype<SetEntry<K>>(start + <usize>i * ENTRY_SIZE<K>());
|
||||||
|
if (!(entry.taggedNext & EMPTY)) {
|
||||||
|
values.push(entry.key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
toString(): string {
|
toString(): string {
|
||||||
return "[object Set]";
|
return "[object Set]";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user