mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-06-24 06:00:05 +01:00
(svn r27258) -Fix [FS#6287]: ScriptList::RemoveList failed to remove a list from itself.
This commit is contained in:
parent
2ea4466230
commit
eb25d9e275
@ -556,6 +556,8 @@ void ScriptList::Sort(SorterType sorter, bool ascending)
|
|||||||
|
|
||||||
void ScriptList::AddList(ScriptList *list)
|
void ScriptList::AddList(ScriptList *list)
|
||||||
{
|
{
|
||||||
|
if (list == this) return;
|
||||||
|
|
||||||
ScriptListMap *list_items = &list->items;
|
ScriptListMap *list_items = &list->items;
|
||||||
for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) {
|
for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) {
|
||||||
this->AddItem((*iter).first);
|
this->AddItem((*iter).first);
|
||||||
@ -565,6 +567,8 @@ void ScriptList::AddList(ScriptList *list)
|
|||||||
|
|
||||||
void ScriptList::SwapList(ScriptList *list)
|
void ScriptList::SwapList(ScriptList *list)
|
||||||
{
|
{
|
||||||
|
if (list == this) return;
|
||||||
|
|
||||||
this->items.swap(list->items);
|
this->items.swap(list->items);
|
||||||
this->buckets.swap(list->buckets);
|
this->buckets.swap(list->buckets);
|
||||||
Swap(this->sorter, list->sorter);
|
Swap(this->sorter, list->sorter);
|
||||||
@ -694,11 +698,15 @@ void ScriptList::RemoveList(ScriptList *list)
|
|||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
if (list == this) {
|
||||||
|
Clear();
|
||||||
|
} else {
|
||||||
ScriptListMap *list_items = &list->items;
|
ScriptListMap *list_items = &list->items;
|
||||||
for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) {
|
for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) {
|
||||||
this->RemoveItem((*iter).first);
|
this->RemoveItem((*iter).first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptList::KeepAboveValue(int64 value)
|
void ScriptList::KeepAboveValue(int64 value)
|
||||||
{
|
{
|
||||||
@ -756,14 +764,12 @@ void ScriptList::KeepBottom(int32 count)
|
|||||||
|
|
||||||
void ScriptList::KeepList(ScriptList *list)
|
void ScriptList::KeepList(ScriptList *list)
|
||||||
{
|
{
|
||||||
|
if (list == this) return;
|
||||||
|
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
ScriptList tmp;
|
ScriptList tmp;
|
||||||
for (ScriptListMap::iterator iter = this->items.begin(); iter != this->items.end(); iter++) {
|
tmp.AddList(this);
|
||||||
tmp.AddItem((*iter).first);
|
|
||||||
tmp.SetValue((*iter).first, (*iter).second);
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp.RemoveList(list);
|
tmp.RemoveList(list);
|
||||||
this->RemoveList(&tmp);
|
this->RemoveList(&tmp);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user