mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-09-05 17:44:55 -06:00
Core: ValueMap improvements (thanks Kohait00)
git-svn-id: svn://ultimatepp.org/upp/trunk@3359 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
fc20c556cd
commit
290137a794
2 changed files with 46 additions and 9 deletions
|
|
@ -320,7 +320,8 @@ Vector<Value>& ValueArray::Clone() {
|
|||
return data->data;
|
||||
}
|
||||
|
||||
ValueArray::ValueArray() {
|
||||
void ValueArray::Init0()
|
||||
{
|
||||
data = &Single<NullData>();
|
||||
data->Retain();
|
||||
}
|
||||
|
|
@ -330,11 +331,6 @@ ValueArray::ValueArray(const ValueArray& v) {
|
|||
data->Retain();
|
||||
}
|
||||
|
||||
ValueArray::ValueArray(const Nuller&) {
|
||||
data = &Single<NullData>();
|
||||
data->Retain();
|
||||
}
|
||||
|
||||
ValueArray::ValueArray(pick_ Vector<Value>& v)
|
||||
{
|
||||
Create() = v;
|
||||
|
|
@ -408,7 +404,7 @@ void ValueArray::Add(const Value& v) {
|
|||
|
||||
void ValueArray::Set(int i, const Value& v) {
|
||||
ASSERT(i >= 0);
|
||||
Clone().DoIndex(i) = v;
|
||||
Clone().At(i) = v;
|
||||
}
|
||||
|
||||
void ValueArray::Remove(int i)
|
||||
|
|
@ -500,6 +496,21 @@ ValueMap::ValueMap(const ValueMap& v)
|
|||
data->Retain();
|
||||
}
|
||||
|
||||
ValueMap::ValueMap(pick_ Index<Value>& k, pick_ Vector<Value>& v)
|
||||
{
|
||||
Data& d = Create();
|
||||
d.key = k;
|
||||
d.value = ValueArray(v);
|
||||
}
|
||||
|
||||
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(_v);
|
||||
}
|
||||
|
||||
ValueMap::operator Value() const {
|
||||
data->Retain();
|
||||
return Value(data);
|
||||
|
|
@ -556,6 +567,21 @@ void ValueMap::Add(const Value& key, const Value& value) {
|
|||
d.value.Add(value);
|
||||
}
|
||||
|
||||
void ValueMap::Set(int i, const Value& v) {
|
||||
Clone().value.Set(i, v);
|
||||
}
|
||||
|
||||
void ValueMap::SetKey(int i, const Value& k) {
|
||||
Clone().key.Set(i, k);
|
||||
}
|
||||
|
||||
void ValueMap::Remove(int i)
|
||||
{
|
||||
Data& d = Clone();
|
||||
d.key.Remove(i);
|
||||
d.value.Remove(i);
|
||||
}
|
||||
|
||||
Value ValueMap::operator[](const Value& key) const
|
||||
{
|
||||
int q = data->key.Find(key);
|
||||
|
|
|
|||
|
|
@ -626,11 +626,12 @@ class ValueArray : AssignValueTypeNo<ValueArray, VALUEARRAY_V, Moveable<ValueArr
|
|||
|
||||
Vector<Value>& Create();
|
||||
Vector<Value>& Clone();
|
||||
void Init0();
|
||||
|
||||
friend Value::Void *ValueArrayDataCreate(Stream& s);
|
||||
|
||||
public:
|
||||
ValueArray();
|
||||
ValueArray() { Init0(); }
|
||||
ValueArray(const ValueArray& v);
|
||||
explicit ValueArray(pick_ Vector<Value>& values);
|
||||
explicit ValueArray(const Vector<Value>& values, int deep);
|
||||
|
|
@ -641,7 +642,7 @@ public:
|
|||
operator Value() const;
|
||||
ValueArray(const Value& src);
|
||||
|
||||
ValueArray(const Nuller&);
|
||||
ValueArray(const Nuller&) { Init0(); }
|
||||
bool IsNull() const { return data->IsNull(); }
|
||||
|
||||
void Clear();
|
||||
|
|
@ -698,6 +699,8 @@ class ValueMap : AssignValueTypeNo<ValueMap, VALUEMAP_V, Moveable<ValueMap> >{
|
|||
public:
|
||||
ValueMap() { Init0(); }
|
||||
ValueMap(const ValueMap& v);
|
||||
ValueMap(pick_ Index<Value>& k, pick_ Vector<Value>& v);
|
||||
ValueMap(const Index<Value>& k, const Vector<Value>& v, int deep);
|
||||
~ValueMap();
|
||||
|
||||
ValueMap& operator=(const ValueMap& v);
|
||||
|
|
@ -709,11 +712,19 @@ public:
|
|||
bool IsNullInstance() const { return data->IsNull(); }
|
||||
|
||||
void Clear();
|
||||
int GetCount() const { return data->value.GetCount(); }
|
||||
bool IsEmpty() const { return data->value.IsEmpty(); }
|
||||
|
||||
void Add(const Value& key, const Value& value);
|
||||
void Add(const String& s, const Value& value) { Add(Value(s), value); }
|
||||
void Add(const char *s, const Value& value) { Add(Value(s), value); }
|
||||
void Add(Id id, const Value& value) { Add(Value(id.ToString()), value); }
|
||||
void Set(int i, const Value& v);
|
||||
void SetKey(int i, const Value& k);
|
||||
void SetKey(int i, const String& s) { SetKey(i, Value(s)); }
|
||||
void SetKey(int i, const char* s) { SetKey(i, Value(s)); }
|
||||
void SetKey(int i, Id id) { SetKey(i, Value(id.ToString())); }
|
||||
void Remove(int i);
|
||||
|
||||
const Index<Value>& GetKeys() const { return data->key; }
|
||||
ValueArray GetValues() const { return data->value; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue