diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2019-07-30 03:50:52 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2019-07-30 03:50:52 +0200 |
| commit | 7573bd9698d7ed6fef01a166e9f188e0ed0eb75f (patch) | |
| tree | 875f2fad88e86f3681a5c3512c3e1a87c77c5930 | |
| parent | c84fd5e06d5bf94114ea25b761cc7061b301c5db (diff) | |
| download | System.c4g-7573bd9698d7ed6fef01a166e9f188e0ed0eb75f.tar.gz System.c4g-7573bd9698d7ed6fef01a166e9f188e0ed0eb75f.zip | |
DTUtility: Add Extend, InitMap and Serialize-implementation for maps
| -rw-r--r-- | DTUtility.c | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/DTUtility.c b/DTUtility.c index 19561ec..7312ee9 100644 --- a/DTUtility.c +++ b/DTUtility.c @@ -19,7 +19,46 @@ global func GetIndexOf2(val, array arr) // Because GetIndexOf doesn't find Forma global func Serialize(value)
{
- if(GetType(value) == C4V_Array)
+ if(GetType(value) == C4V_Map)
+ {
+ var nonIdentifierKeyInits = [];
+ var ret = "{";
+
+ var first = true;
+ for(var k, v in value)
+ {
+ if(GetType(k) == C4V_String)
+ {
+ if(first)
+ {
+ first = false;
+ }
+ else
+ {
+ ret ..= ",";
+ }
+ ret ..= Serialize(k) .. "=" .. Serialize(v);
+ }
+ else
+ {
+ nonIdentifierKeyInits[] = k;
+ nonIdentifierKeyInits[] = v;
+ }
+ }
+
+ ret ..= "}";
+
+ if(GetLength(nonIdentifierKeyInits) > 0)
+ {
+ if(first)
+ {
+ return "InitMap(" .. Serialize(nonIdentifierKeyInits) .. ")";
+ }
+ return "Extend(" .. ret .. ",InitMap(" .. Serialize(nonIdentifierKeyInits) .. "))";
+ }
+ return ret;
+ }
+ else if(GetType(value) == C4V_Array)
{
var first = true;
var ret = "[";
@@ -810,3 +849,22 @@ global func GetPlayerByID(int id) return NO_OWNER;
}
+
+global func Extend(map base, map extension)
+{
+ for(var key, value in extension)
+ {
+ base[key] = value;
+ }
+ return base;
+}
+
+global func InitMap(array init)
+{
+ var ret = {};
+ for(var i = 0; i < GetLength(init); i += 2)
+ {
+ ret[init[i]] = init[i + 1];
+ }
+ return ret;
+}
\ No newline at end of file |
