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 */