mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-06-03 06:12:43 -06:00
Core: ValueArray, ValueMap Pick
git-svn-id: svn://ultimatepp.org/upp/trunk@7302 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
8c1ff0cef8
commit
8812eccc79
4 changed files with 124 additions and 9 deletions
|
|
@ -275,6 +275,14 @@ Value ValueArray::GetAndClear(int i)
|
|||
return v;
|
||||
}
|
||||
|
||||
Vector<Value> ValueArray::Pick()
|
||||
{
|
||||
Vector<Value>& x = Clone();
|
||||
Vector<Value> r = pick(x);
|
||||
x.Clear();
|
||||
return r;
|
||||
}
|
||||
|
||||
template<>
|
||||
String AsString(const ValueArray& v) {
|
||||
return sAsString(v.Get());
|
||||
|
|
@ -431,12 +439,33 @@ ValueMap::ValueMap(Index<Value> rval_ k, Vector<Value> rval_ v)
|
|||
d.value = ValueArray(pick(v));
|
||||
}
|
||||
|
||||
ValueMap::ValueMap(VectorMap<Value, Value> rval_ m)
|
||||
{
|
||||
Data& d = Create();
|
||||
d.key = m.PickKeys();
|
||||
d.value = ValueArray(m.PickValues());
|
||||
}
|
||||
|
||||
ValueMap::ValueMap(const Index<Value>& k, const Vector<Value>& v, int deep)
|
||||
{
|
||||
Data& d = Create();
|
||||
d.key <<= k;
|
||||
Vector<Value> _v(v, 0);
|
||||
d.value = ValueArray(pick(_v));
|
||||
d.value = ValueArray(v, 0);
|
||||
}
|
||||
|
||||
ValueMap::ValueMap(const VectorMap<Value, Value>& m, int deep)
|
||||
{
|
||||
Data& d = Create();
|
||||
d.key = clone(m.GetKeys());
|
||||
d.value = ValueArray(m.GetValues(), 0);
|
||||
}
|
||||
|
||||
VectorMap<Value, Value> ValueMap::Pick()
|
||||
{
|
||||
Data& d = Clone();
|
||||
VectorMap<Value, Value> m(d.key.PickKeys(), d.value.Pick());
|
||||
d.key.Clear();
|
||||
return m;
|
||||
}
|
||||
|
||||
ValueMap::operator Value() const {
|
||||
|
|
|
|||
|
|
@ -221,6 +221,7 @@ public:
|
|||
~ValueArray();
|
||||
|
||||
ValueArray& operator=(const ValueArray& v);
|
||||
ValueArray& operator=(Vector<Value> rval_ values) { *this = ValueArray(values); return *this; }
|
||||
|
||||
operator Value() const;
|
||||
ValueArray(const Value& src);
|
||||
|
|
@ -242,6 +243,7 @@ public:
|
|||
const Value& Get(int i) const;
|
||||
Value GetAndClear(int i);
|
||||
const Vector<Value>& Get() const { return data->data; }
|
||||
Vector<Value> Pick();
|
||||
|
||||
void Remove(int i, int count = 1);
|
||||
void Insert(int i, const ValueArray& va);
|
||||
|
|
@ -300,10 +302,13 @@ public:
|
|||
ValueMap() { Init0(); }
|
||||
ValueMap(const ValueMap& v);
|
||||
ValueMap(Index<Value> rval_ k, Vector<Value> rval_ v);
|
||||
ValueMap(VectorMap<Value, Value> rval_ m);
|
||||
ValueMap(const Index<Value>& k, const Vector<Value>& v, int deep);
|
||||
ValueMap(const VectorMap<Value, Value>& m, int deep);
|
||||
~ValueMap();
|
||||
|
||||
ValueMap& operator=(const ValueMap& v);
|
||||
ValueMap& operator=(VectorMap<Value, Value> rval_ m) { *this = ValueMap(m); return *this; }
|
||||
|
||||
operator Value() const;
|
||||
ValueMap(const Value& src);
|
||||
|
|
@ -355,6 +360,8 @@ public:
|
|||
ValueArray GetValues() const { return data->value; }
|
||||
|
||||
operator ValueArray() const { return GetValues(); }
|
||||
|
||||
VectorMap<Value, Value> Pick();
|
||||
|
||||
const Value& operator[](const Value& key) const;
|
||||
const Value& operator[](const String& key) const { return operator[](Value(key)); }
|
||||
|
|
|
|||
|
|
@ -38,9 +38,9 @@ alueArray][@(0.0.255) `&]_[*@3 v])&]
|
|||
[s2;%% Copy constructor.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:ValueArray`:`:ValueArray`(pick`_ Vector`<Value`>`&`): [@(0.0.255) explicit]_[* Value
|
||||
Array]([@(0.128.128) pick`_]_[_^Vector^ Vector]<[_^Value^ Value]>`&_[*@3 values])&]
|
||||
[s2;%% Creates ValueArray by [%-*@3 values].&]
|
||||
[s5;:ValueArray`:`:ValueArray`(Vector`<Value`>rval`_`): [@(0.0.255) explicit]_[* ValueArr
|
||||
ay]([_^Vector^ Vector]<[_^Value^ Value]>_[@(0.0.255) rval`_]_[*@3 values])&]
|
||||
[s2;%% Creates ValueArray by picking [%-*@3 values] `- source is destroyed.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:ValueArray`:`:ValueArray`(const Vector`<Value`>`&`,int`): [@(0.0.255) explicit]_[* V
|
||||
|
|
@ -60,6 +60,11 @@ version).&]
|
|||
[s2;%% Assignment operator.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:ValueArray`:`:operator`=`(Vector`<Value`>rval`_`): [_^ValueArray^ ValueArray][@(0.0.255) `&
|
||||
]_[* operator`=]([_^Vector^ Vector]<[_^Value^ Value]>_[@(0.0.255) rval`_]_[*@3 values])&]
|
||||
[s2;%% Pick assignment `- source is destroyed.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:ValueArray`:`:operator Value`(`)const: [* operator_Value]()_[@(0.0.255) const]&]
|
||||
[s2;%% Returns ValueArray as Value.&]
|
||||
[s3; &]
|
||||
|
|
@ -138,6 +143,10 @@ required.&]
|
|||
[s2;%% Returns constant reference to (internal) Vector<Value>.&]
|
||||
[s3; &]
|
||||
[s4; &]
|
||||
[s5;:ValueArray`:`:Pick`(`): [_^Vector^ Vector]<[_^Value^ Value]>_[* Pick]()&]
|
||||
[s2;%% Picks the content, ValueArray is cleared.&]
|
||||
[s3; &]
|
||||
[s4; &]
|
||||
[s5;:ValueArray`:`:Remove`(int`,int`): [@(0.0.255) void]_[* Remove]([@(0.0.255) int]_[*@3 i],
|
||||
[@(0.0.255) int]_[*@3 count]_`=_[@3 1])&]
|
||||
[s2;%% Removes [%-*@3 count] elements at [%-*@3 i].&]
|
||||
|
|
@ -193,4 +202,19 @@ t]&]
|
|||
[s2;%% (In)Equality comparison. Two ValueArrays are equal if they
|
||||
have the same number of elements and all elements at the same
|
||||
position are equal.&]
|
||||
[s0;%% ]]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:ValueArray`:`:Compare`(const ValueArray`&`)const: [@(0.0.255) int]_[* Compare]([@(0.0.255) c
|
||||
onst]_[_^ValueArray^ ValueArray][@(0.0.255) `&]_[*@3 b])_[@(0.0.255) const]&]
|
||||
[s5;:ValueArray`:`:operator`<`=`(const ValueArray`&`)const: [@(0.0.255) bool]_[* operator
|
||||
<`=]([@(0.0.255) const]_[_^ValueArray^ ValueArray][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) cons
|
||||
t]&]
|
||||
[s5;:ValueArray`:`:operator`>`=`(const ValueArray`&`)const: [@(0.0.255) bool]_[* operator
|
||||
>`=]([@(0.0.255) const]_[_^ValueArray^ ValueArray][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) cons
|
||||
t]&]
|
||||
[s5;:ValueArray`:`:operator`<`(const ValueArray`&`)const: [@(0.0.255) bool]_[* operator<](
|
||||
[@(0.0.255) const]_[_^ValueArray^ ValueArray][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&]
|
||||
[s5;:ValueArray`:`:operator`>`(const ValueArray`&`)const: [@(0.0.255) bool]_[* operator>](
|
||||
[@(0.0.255) const]_[_^ValueArray^ ValueArray][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&]
|
||||
[s2;%% Compares two ValueArrays using lexicographical comparison.&]
|
||||
[s3;%% ]]
|
||||
|
|
@ -46,13 +46,19 @@ p][@(0.0.255) `&]_[*@3 v])&]
|
|||
[s2; Copy constructor.&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:ValueMap`(pick`_ Index`<Value`>`&`,pick`_ Vector`<Value`>`&`):%- [* Va
|
||||
lueMap]([@(0.128.128) pick`_]_[_^Index^ Index]<[_^Value^ Value]>`&_[*@3 k],
|
||||
[@(0.128.128) pick`_]_[_^Vector^ Vector]<[_^Value^ Value]>`&_[*@3 v])&]
|
||||
[s5;:ValueMap`:`:ValueMap`(Index`<Value`>rval`_`,Vector`<Value`>rval`_`):%- [* ValueMap
|
||||
]([_^Index^ Index]<[_^Value^ Value]>_[@(0.0.255) rval`_]_[*@3 k], [_^Vector^ Vector]<[_^Value^ V
|
||||
alue]>_[@(0.0.255) rval`_]_[*@3 v])&]
|
||||
[s2; Creates ValueMap by picking Index a Vector of Values (efficient
|
||||
but sources are destroyed).&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:ValueMap`(VectorMap`<Value`,Value`>rval`_`):%- [* ValueMap]([_^VectorMap^ V
|
||||
ectorMap]<[_^Value^ Value], [_^Value^ Value]>_[@(0.0.255) rval`_]_[*@3 m])&]
|
||||
[s2; Creates ValueMap by picking VectorMap (efficient but source
|
||||
is destroyed).&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:ValueMap`(const Index`<Value`>`&`,const Vector`<Value`>`&`,int`):%- [* V
|
||||
alueMap]([@(0.0.255) const]_[_^Index^ Index]<[_^Value^ Value]>`&_[*@3 k],
|
||||
[@(0.0.255) const]_[_^Vector^ Vector]<[_^Value^ Value]>`&_[*@3 v], [@(0.0.255) int]_[*@3 deep
|
||||
|
|
@ -60,6 +66,12 @@ alueMap]([@(0.0.255) const]_[_^Index^ Index]<[_^Value^ Value]>`&_[*@3 k],
|
|||
[s2; Creates ValueMap by deep copying Index a Vector of Values.&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:ValueMap`(const VectorMap`<Value`,Value`>`&`,int`):%- [* ValueMap]([@(0.0.255) c
|
||||
onst]_[_^VectorMap^ VectorMap]<[_^Value^ Value], [_^Value^ Value]>`&_[*@3 m],
|
||||
[@(0.0.255) int]_[*@3 deep])&]
|
||||
[s2; Creates ValueMap by deep copying VectorMap.&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:`~ValueMap`(`):%- [@(0.0.255) `~][* ValueMap]()&]
|
||||
[s2; Destructor.&]
|
||||
[s3;%- &]
|
||||
|
|
@ -69,6 +81,12 @@ alueMap]([@(0.0.255) const]_[_^Index^ Index]<[_^Value^ Value]>`&_[*@3 k],
|
|||
[s2; Assignment.&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:operator`=`(VectorMap`<Value`,Value`>rval`_`):%- [_^ValueMap^ ValueMap
|
||||
][@(0.0.255) `&]_[* operator`=]([_^VectorMap^ VectorMap]<[_^Value^ Value],
|
||||
[_^Value^ Value]>_[@(0.0.255) rval`_]_[*@3 m])&]
|
||||
[s2; Pick assignment `- efficient, destroying the source.&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:operator Value`(`)const:%- [* operator_Value]()_[@(0.0.255) const]&]
|
||||
[s2; Conversion to Value.&]
|
||||
[s3;%- &]
|
||||
|
|
@ -129,6 +147,24 @@ multiple same keys. Note: multiple overloads are required to make
|
|||
Id and SqlId work with ValueMap.&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:operator`(`)`(const Value`&`,const Value`&`):%- [_^ValueMap^ ValueMap][@(0.0.255) `&
|
||||
]_[* operator()]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 key],
|
||||
[@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 value])&]
|
||||
[s5;:ValueMap`:`:operator`(`)`(const String`&`,const Value`&`):%- [_^ValueMap^ ValueMap
|
||||
][@(0.0.255) `&]_[* operator()]([@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 key
|
||||
], [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 value])&]
|
||||
[s5;:ValueMap`:`:operator`(`)`(const char`*`,const Value`&`):%- [_^ValueMap^ ValueMap][@(0.0.255) `&
|
||||
]_[* operator()]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 key], [@(0.0.255) const]_[_^Value^ V
|
||||
alue][@(0.0.255) `&]_[*@3 value])&]
|
||||
[s5;:ValueMap`:`:operator`(`)`(int`,const Value`&`):%- [_^ValueMap^ ValueMap][@(0.0.255) `&
|
||||
]_[* operator()]([@(0.0.255) int]_[*@3 key], [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&
|
||||
]_[*@3 value])&]
|
||||
[s5;:ValueMap`:`:operator`(`)`(Id`,const Value`&`):%- [_^ValueMap^ ValueMap][@(0.0.255) `&
|
||||
]_[* operator()]([_^Id^ Id]_[*@3 key], [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v
|
||||
alue])&]
|
||||
[s2;%- [%% Same as Add(][*@3 key], [*@3 value]).&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:Set`(const Value`&`,const Value`&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) c
|
||||
onst]_[_^Value^ Value][@(0.0.255) `&]_[*@3 key], [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&
|
||||
]_[*@3 value])&]
|
||||
|
|
@ -199,6 +235,11 @@ nst]&]
|
|||
[s2; Same as GetValues.&]
|
||||
[s3;%- &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:Pick`(`):%- [_^VectorMap^ VectorMap]<[_^Value^ Value],
|
||||
[_^Value^ Value]>_[* Pick]()&]
|
||||
[s2; Picks the content `- fast, ValueMap is cleared.&]
|
||||
[s3;%- &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:operator`[`]`(const Value`&`)const:%- [@(0.0.255) const]_[_^Value^ Value
|
||||
][@(0.0.255) `&]_[* operator`[`]]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 key
|
||||
])_[@(0.0.255) const]&]
|
||||
|
|
@ -261,4 +302,18 @@ same key`-value pairs [*/ in the same order].&]
|
|||
]([@(0.0.255) const]_[_^ValueMap^ ValueMap][@(0.0.255) `&]_[*@3 v])_[@(0.0.255) const]&]
|
||||
[s2; Same as !operator`=`=(v).&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:ValueMap`:`:Compare`(const ValueMap`&`)const:%- [@(0.0.255) int]_[* Compare]([@(0.0.255) c
|
||||
onst]_[_^ValueMap^ ValueMap][@(0.0.255) `&]_[*@3 b])_[@(0.0.255) const]&]
|
||||
[s5;:ValueMap`:`:operator`<`=`(const ValueMap`&`)const:%- [@(0.0.255) bool]_[* operator<`=
|
||||
]([@(0.0.255) const]_[_^ValueMap^ ValueMap][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&]
|
||||
[s5;:ValueMap`:`:operator`>`=`(const ValueMap`&`)const:%- [@(0.0.255) bool]_[* operator>`=
|
||||
]([@(0.0.255) const]_[_^ValueMap^ ValueMap][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&]
|
||||
[s5;:ValueMap`:`:operator`<`(const ValueMap`&`)const:%- [@(0.0.255) bool]_[* operator<]([@(0.0.255) c
|
||||
onst]_[_^ValueMap^ ValueMap][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&]
|
||||
[s5;:ValueMap`:`:operator`>`(const ValueMap`&`)const:%- [@(0.0.255) bool]_[* operator>]([@(0.0.255) c
|
||||
onst]_[_^ValueMap^ ValueMap][@(0.0.255) `&]_[*@3 x])_[@(0.0.255) const]&]
|
||||
[s2; Compares two ValueMaps. Performs ordered (as ValueMap has order
|
||||
of key`-value pairs) comparison of key`-value pairs.&]
|
||||
[s3; &]
|
||||
[s0; ]]
|
||||
Loading…
Add table
Add a link
Reference in a new issue