mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-25 21:41:03 +00:00
export dictionary iterator
This commit is contained in:
parent
5ae0ae885d
commit
60026ba4f2
3 changed files with 109 additions and 2 deletions
|
@ -11,7 +11,6 @@
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION(_Dictionary, Create)
|
DEFINE_ACTION_FUNCTION(_Dictionary, Create)
|
||||||
{
|
{
|
||||||
PARAM_PROLOGUE;
|
|
||||||
ACTION_RETURN_POINTER(new Dictionary);
|
ACTION_RETURN_POINTER(new Dictionary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,3 +80,64 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Dictionary, Remove, DictRemove)
|
||||||
DictRemove(self, key);
|
DictRemove(self, key);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=====================================================================================
|
||||||
|
//
|
||||||
|
// DictionaryIterator exports
|
||||||
|
//
|
||||||
|
//=====================================================================================
|
||||||
|
|
||||||
|
DictionaryIterator::DictionaryIterator(const Dictionary &dict)
|
||||||
|
: Iterator(dict)
|
||||||
|
, Pair(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static DictionaryIterator *DictIteratorCreate(const Dictionary *dict)
|
||||||
|
{
|
||||||
|
return new DictionaryIterator(*dict);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION_NATIVE(_DictionaryIterator, Create, DictIteratorCreate)
|
||||||
|
{
|
||||||
|
PARAM_PROLOGUE;
|
||||||
|
PARAM_POINTER(dict, Dictionary);
|
||||||
|
ACTION_RETURN_POINTER(DictIteratorCreate(dict));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int DictIteratorNext(DictionaryIterator *self)
|
||||||
|
{
|
||||||
|
return self->Iterator.NextPair(self->Pair);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION_NATIVE(_DictionaryIterator, Next, DictIteratorNext)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(DictionaryIterator);
|
||||||
|
ACTION_RETURN_BOOL(DictIteratorNext(self));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DictIteratorKey(const DictionaryIterator *self, FString *result)
|
||||||
|
{
|
||||||
|
*result = self->Pair ? self->Pair->Key : FString {};
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION_NATIVE(_DictionaryIterator, Key, DictIteratorKey)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(DictionaryIterator);
|
||||||
|
FString result;
|
||||||
|
DictIteratorKey(self, &result);
|
||||||
|
ACTION_RETURN_STRING(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DictIteratorValue(const DictionaryIterator *self, FString *result)
|
||||||
|
{
|
||||||
|
*result = self->Pair ? self->Pair->Value : FString {};
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION_NATIVE(_DictionaryIterator, Value, DictIteratorValue)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(DictionaryIterator);
|
||||||
|
FString result;
|
||||||
|
DictIteratorValue(self, &result);
|
||||||
|
ACTION_RETURN_STRING(result);
|
||||||
|
}
|
||||||
|
|
|
@ -4,3 +4,11 @@
|
||||||
#include "zstring.h"
|
#include "zstring.h"
|
||||||
|
|
||||||
using Dictionary = TMap<FString, FString>;
|
using Dictionary = TMap<FString, FString>;
|
||||||
|
|
||||||
|
struct DictionaryIterator
|
||||||
|
{
|
||||||
|
explicit DictionaryIterator(const Dictionary &dict);
|
||||||
|
|
||||||
|
Dictionary::ConstIterator Iterator;
|
||||||
|
Dictionary::ConstPair *Pair;
|
||||||
|
};
|
||||||
|
|
|
@ -1,11 +1,50 @@
|
||||||
struct Dictionary native
|
struct Dictionary native
|
||||||
{
|
{
|
||||||
native static Dictionary Create();
|
native static Dictionary Create();
|
||||||
native static Dictionary FromString(String s);
|
|
||||||
|
|
||||||
native void Insert(String key, String value);
|
native void Insert(String key, String value);
|
||||||
native void Remove(String key);
|
native void Remove(String key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value for the specified key.
|
||||||
|
*/
|
||||||
native String At(String key) const;
|
native String At(String key) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes a dictionary from a string.
|
||||||
|
*
|
||||||
|
* @param s serialized string, must be either empty or returned from ToString().
|
||||||
|
*/
|
||||||
|
native static Dictionary FromString(String s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes a dictionary to a string.
|
||||||
|
*/
|
||||||
native String ToString() const;
|
native String ToString() const;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct DictionaryIterator native
|
||||||
|
{
|
||||||
|
native static DictionaryIterator Create(Dictionary dict);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns false if there are no more entries in the dictionary.
|
||||||
|
* Otherwise, returns true.
|
||||||
|
*
|
||||||
|
* While it returns true, get key and value for the current entry
|
||||||
|
* with Key() and Value() functions.
|
||||||
|
*/
|
||||||
|
native bool Next();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the key for the current dictionary entry.
|
||||||
|
* Do not call this function before calling Next().
|
||||||
|
*/
|
||||||
|
native String Key() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value for the current dictionary entry.
|
||||||
|
* Do not call this function before calling Next().
|
||||||
|
*/
|
||||||
|
native String Value() const;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue