From 2bb3fcb258072c7fa2ca4d057d8180d5cf11b8cf Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Fri, 27 Feb 2015 12:18:44 +0300 Subject: [PATCH] settings improvements: allow foreach iteration over arrays and maps --- src/dlangui/core/settings.d | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/dlangui/core/settings.d b/src/dlangui/core/settings.d index 69b4d1c4..354089bd 100644 --- a/src/dlangui/core/settings.d +++ b/src/dlangui/core/settings.d @@ -600,6 +600,58 @@ final class Setting { return list; } + /// to iterate using foreach + int opApply(int delegate(ref Setting)dg) { + int result = 0; + if (_type == SettingType.ARRAY) { + for(int i = 0; i < _store.array.list.length; i++) { + result = dg(_store.array.list[i]); + if (result) + break; + } + } else if (_type == SettingType.OBJECT) { + for(int i = 0; i < _store.map.list.length; i++) { + result = dg(_store.map.list[i]); + if (result) + break; + } + } + return result; + } + + /// to iterate over OBJECT using foreach(key, value; map) + int opApply(int delegate(ref string, ref Setting)dg) { + int result = 0; + if (_type == SettingType.OBJECT) { + for(int i = 0; i < _store.map.list.length; i++) { + string key = _store.map.keyByIndex(i); + result = dg(key, _store.map.list[i]); + if (result) + break; + } + } + return result; + } + + /// to iterate using foreach_reverse + int opApplyReverse(int delegate(ref Setting)dg) { + int result = 0; + if (_type == SettingType.ARRAY) { + for(int i = cast(int)_store.array.list.length - 1; i >= 0; i--) { + result = dg(_store.array.list[i]); + if (result) + break; + } + } else if (_type == SettingType.OBJECT) { + for(int i = cast(int)_store.map.list.length - 1; i >= 0; i--) { + result = dg(_store.map.list[i]); + if (result) + break; + } + } + return result; + } + static long parseLong(inout string v, long defValue = 0) { int len = cast(int)v.length; if (len == 0)