mirror of https://github.com/mgba-emu/mgba.git
Scripting: Add Table iteration
This commit is contained in:
parent
c14fb54a74
commit
ca073379fb
|
@ -650,6 +650,11 @@ bool mScriptTableInsert(struct mScriptValue* table, struct mScriptValue* key, st
|
|||
bool mScriptTableRemove(struct mScriptValue* table, struct mScriptValue* key);
|
||||
struct mScriptValue* mScriptTableLookup(struct mScriptValue* table, struct mScriptValue* key);
|
||||
bool mScriptTableClear(struct mScriptValue* table);
|
||||
bool mScriptTableIteratorStart(struct mScriptValue* table, struct TableIterator*);
|
||||
bool mScriptTableIteratorNext(struct mScriptValue* table, struct TableIterator*);
|
||||
struct mScriptValue* mScriptTableIteratorGetKey(struct mScriptValue* table, struct TableIterator*);
|
||||
struct mScriptValue* mScriptTableIteratorGetValue(struct mScriptValue* table, struct TableIterator*);
|
||||
bool mScriptTableIteratorLookup(struct mScriptValue* table, struct TableIterator*, struct mScriptValue* key);
|
||||
|
||||
void mScriptFrameInit(struct mScriptFrame* frame);
|
||||
void mScriptFrameDeinit(struct mScriptFrame* frame);
|
||||
|
|
|
@ -787,6 +787,61 @@ bool mScriptTableClear(struct mScriptValue* table) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool mScriptTableIteratorStart(struct mScriptValue* table, struct TableIterator* iter) {
|
||||
if (table->type == mSCRIPT_TYPE_MS_WRAPPER) {
|
||||
table = mScriptValueUnwrap(table);
|
||||
}
|
||||
if (table->type != mSCRIPT_TYPE_MS_TABLE) {
|
||||
return false;
|
||||
}
|
||||
struct Table* t = table->value.opaque;
|
||||
return HashTableIteratorStart(t, iter);
|
||||
}
|
||||
|
||||
bool mScriptTableIteratorNext(struct mScriptValue* table, struct TableIterator* iter) {
|
||||
if (table->type == mSCRIPT_TYPE_MS_WRAPPER) {
|
||||
table = mScriptValueUnwrap(table);
|
||||
}
|
||||
if (table->type != mSCRIPT_TYPE_MS_TABLE) {
|
||||
return false;
|
||||
}
|
||||
struct Table* t = table->value.opaque;
|
||||
return HashTableIteratorNext(t, iter);
|
||||
}
|
||||
|
||||
struct mScriptValue* mScriptTableIteratorGetKey(struct mScriptValue* table, struct TableIterator* iter) {
|
||||
if (table->type == mSCRIPT_TYPE_MS_WRAPPER) {
|
||||
table = mScriptValueUnwrap(table);
|
||||
}
|
||||
if (table->type != mSCRIPT_TYPE_MS_TABLE) {
|
||||
return NULL;
|
||||
}
|
||||
struct Table* t = table->value.opaque;
|
||||
return HashTableIteratorGetCustomKey(t, iter);
|
||||
}
|
||||
|
||||
struct mScriptValue* mScriptTableIteratorGetValue(struct mScriptValue* table, struct TableIterator* iter) {
|
||||
if (table->type == mSCRIPT_TYPE_MS_WRAPPER) {
|
||||
table = mScriptValueUnwrap(table);
|
||||
}
|
||||
if (table->type != mSCRIPT_TYPE_MS_TABLE) {
|
||||
return NULL;
|
||||
}
|
||||
struct Table* t = table->value.opaque;
|
||||
return HashTableIteratorGetValue(t, iter);
|
||||
}
|
||||
|
||||
bool mScriptTableIteratorLookup(struct mScriptValue* table, struct TableIterator* iter, struct mScriptValue* key) {
|
||||
if (table->type == mSCRIPT_TYPE_MS_WRAPPER) {
|
||||
table = mScriptValueUnwrap(table);
|
||||
}
|
||||
if (table->type != mSCRIPT_TYPE_MS_TABLE) {
|
||||
return false;
|
||||
}
|
||||
struct Table* t = table->value.opaque;
|
||||
return HashTableIteratorLookupCustom(t, iter, key);
|
||||
}
|
||||
|
||||
void mScriptFrameInit(struct mScriptFrame* frame) {
|
||||
mScriptListInit(&frame->arguments, 4);
|
||||
mScriptListInit(&frame->returnValues, 1);
|
||||
|
|
Loading…
Reference in New Issue