From ca4d6935c7f97bfb6bf26409c5788429b52ffb9c Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 5 Sep 2014 13:00:16 +0000 Subject: [PATCH] Core: Fixed ValueMap::RemoveKey issue git-svn-id: svn://ultimatepp.org/upp/trunk@7641 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/ValueUtil.cpp | 13 +++++++++---- uppsrc/Core/ValueUtil.h | 1 + uppsrc/Core/src.tpp/Stream$en-us.tpp | 5 ++++- uppsrc/Core/src.tpp/ValueArray$en-us.tpp | 5 +++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/uppsrc/Core/ValueUtil.cpp b/uppsrc/Core/ValueUtil.cpp index 1dee532bf..2b6dfcdb1 100644 --- a/uppsrc/Core/ValueUtil.cpp +++ b/uppsrc/Core/ValueUtil.cpp @@ -251,6 +251,11 @@ void ValueArray::Remove(int i, int count) Clone().Remove(i, count); } +void ValueArray::Remove(const Vector& ii) +{ + Clone().Remove(ii); +} + void ValueArray::Insert(int i, const ValueArray& va) { if(va.data == data) { @@ -571,12 +576,12 @@ int ValueMap::RemoveKey(const Value& key) rk.Add(q); q = d.key.FindNext(q); } - int count = rk.GetCount(); - if(count) { + if(rk.GetCount()) { + Sort(rk); d.key.Remove(rk); - d.value.data->data.Remove(rk); + d.value.Remove(rk); } - return count; + return rk.GetCount(); } void ValueMap::Remove(int i) diff --git a/uppsrc/Core/ValueUtil.h b/uppsrc/Core/ValueUtil.h index 58d21e415..b21fe4293 100644 --- a/uppsrc/Core/ValueUtil.h +++ b/uppsrc/Core/ValueUtil.h @@ -246,6 +246,7 @@ public: Vector Pick(); void Remove(int i, int count = 1); + void Remove(const Vector& ii); void Insert(int i, const ValueArray& va); void Append(const ValueArray& va) { Insert(GetCount(), va); } diff --git a/uppsrc/Core/src.tpp/Stream$en-us.tpp b/uppsrc/Core/src.tpp/Stream$en-us.tpp index fafb43509..b4298e6bf 100644 --- a/uppsrc/Core/src.tpp/Stream$en-us.tpp +++ b/uppsrc/Core/src.tpp/Stream$en-us.tpp @@ -1220,7 +1220,10 @@ mode`_t_[*@3 acm]_`=_[@3 0644])&] and specific POSIX access rights. [%-*@3 mode] can be one of READ, CREATE, APPEND, READWRITE possibly combined (using `'`|`') with flag NOWRITESHARE. This flag uses flock system call to enforce -exclusive write access to the file.&] +exclusive write access to the file. In READ, if file does not +exist, function fails. In CREATE mode, files is always created +empty. In APPEND and READWRITE modes, file is created if it does +not already exist.&] [s7; [%-*C@3 filename]-|The name of the file.&] [s7; [%-*C@3 mode]-|Open mode.&] [s7; [%-*C@3 acm]-|Access rights.&] diff --git a/uppsrc/Core/src.tpp/ValueArray$en-us.tpp b/uppsrc/Core/src.tpp/ValueArray$en-us.tpp index ae05f59a2..54ef5426e 100644 --- a/uppsrc/Core/src.tpp/ValueArray$en-us.tpp +++ b/uppsrc/Core/src.tpp/ValueArray$en-us.tpp @@ -152,6 +152,11 @@ required.&] [s2;%% Removes [%-*@3 count] elements at [%-*@3 i].&] [s3;%% &] [s4; &] +[s5;:ValueArray`:`:Remove`(const Vector``&`): [@(0.0.255) void]_[* Remove]([@(0.0.255) c +onst]_[_^Vector^ Vector]<[@(0.0.255) int]>`&_[*@3 ii])&] +[s2;%% Removes the sorted set of indicies.&] +[s3;%% &] +[s4; &] [s5;:ValueArray`:`:Insert`(int`,const ValueArray`&`): [@(0.0.255) void]_[* Insert]([@(0.0.255) i nt]_[*@3 i], [@(0.0.255) const]_[_^ValueArray^ ValueArray][@(0.0.255) `&]_[*@3 va])&] [s2;%% Inserts another ValueArra [%-*@3 va] at [%-*@3 i].&]