1 module uim.json.classes.array_; 2 3 import uim.json; 4 /* 5 class DJSNArray : DJSNValue { 6 protected DJSNValue[] _values; 7 8 this() { } 9 this(DJSNArray value) { this.values = value.values; } 10 this(DJSNValue[] values) { this.values = values; } 11 this(DJSNObject[] values) { this.values = values; } 12 this(DJSNArray[] values) { this.values = values; } 13 this(string[] values) { foreach(v; values) _values ~= JSNValue(v); } 14 this(bool[] values) { foreach(v; values) _values ~= JSNValue(v); } 15 this(int[] values) { foreach(v; values) _values ~= JSNValue(v); } 16 this(double[] values) { foreach(v; values) _values ~= JSNValue(v); } 17 18 @property void values(DJSNValue[] newValues) { _values = null; foreach(v; newValues) _values ~= v.dup; } 19 @property void values(DJSNArray[] newValues) { _values = null; foreach(v; newValues) _values ~= v.dup; } 20 @property void values(DJSNObject[] newValues) { _values = null; foreach(v; newValues) _values ~= v.dup; } 21 @property auto values() { return _values; } 22 23 @property override size_t length() { return _values.length; } 24 @property void length(size_t newLength) { 25 if (newLength > length) foreach(i; length..newLength) _values ~= JSNNull; 26 else _values.length = newLength; 27 } 28 @property DJSNArray subArray(size_t start, size_t end) { 29 auto last = end; 30 if (last > length) last = length; 31 return JSNArray(_values[start..last]); 32 } 33 @property DJSNArray reverse() { 34 DJSNValue[] reversedValues; 35 foreach_reverse(v; values) reversedValues ~= v; 36 _values = reversedValues; 37 return this; 38 } 39 40 override DJSNValue opIndex(size_t index) { 41 if (index < _values.length) return _values[index]; 42 return null; 43 } 44 O opOpAssign(string op, this O)(DJSNValue value) if (op == "~") { 45 _values ~= value; 46 return cast(O)this; 47 } 48 O opBinary(string op, this O)(DJSNValue value) if (op == "~") { 49 _values ~= value; 50 return cast(O)this; 51 } 52 unittest { 53 /// test 54 } 55 56 override DJSNValue dup() { return new DJSNArray(_values); } 57 override string toString() { 58 if (_values.length == 0) return "[ ]"; 59 60 import std.string; 61 string[] strings; 62 foreach(value; _values) strings ~= value.toString; 63 return `[ %s ]`.format(strings.join(", ")); 64 } 65 } 66 auto JSNArray() { return new DJSNArray(); } 67 auto JSNArray(DJSNArray value) { return new DJSNArray(value); } 68 //auto JSNArray(T)(T[] values) { return new DJSNArray(values); } 69 //auto JSNArray(string text) { return new DJSNArray(); } 70 */