Changeset - r22094:2a4a4665dd63
[Not reviewed]
master
0 1 0
frosch - 9 years ago 2015-04-27 19:28:22
frosch@openttd.org
(svn r27258) -Fix [FS#6287]: ScriptList::RemoveList failed to remove a list from itself.
1 file changed with 14 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/script/api/script_list.cpp
Show inline comments
 
@@ -556,6 +556,8 @@ void ScriptList::Sort(SorterType sorter,
 

	
 
void ScriptList::AddList(ScriptList *list)
 
{
 
	if (list == this) return;
 

	
 
	ScriptListMap *list_items = &list->items;
 
	for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) {
 
		this->AddItem((*iter).first);
 
@@ -565,6 +567,8 @@ void ScriptList::AddList(ScriptList *lis
 

	
 
void ScriptList::SwapList(ScriptList *list)
 
{
 
	if (list == this) return;
 

	
 
	this->items.swap(list->items);
 
	this->buckets.swap(list->buckets);
 
	Swap(this->sorter, list->sorter);
 
@@ -694,9 +698,13 @@ void ScriptList::RemoveList(ScriptList *
 
{
 
	this->modifications++;
 

	
 
	ScriptListMap *list_items = &list->items;
 
	for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) {
 
		this->RemoveItem((*iter).first);
 
	if (list == this) {
 
		Clear();
 
	} else {
 
		ScriptListMap *list_items = &list->items;
 
		for (ScriptListMap::iterator iter = list_items->begin(); iter != list_items->end(); iter++) {
 
			this->RemoveItem((*iter).first);
 
		}
 
	}
 
}
 

	
 
@@ -756,14 +764,12 @@ void ScriptList::KeepBottom(int32 count)
 

	
 
void ScriptList::KeepList(ScriptList *list)
 
{
 
	if (list == this) return;
 

	
 
	this->modifications++;
 

	
 
	ScriptList tmp;
 
	for (ScriptListMap::iterator iter = this->items.begin(); iter != this->items.end(); iter++) {
 
		tmp.AddItem((*iter).first);
 
		tmp.SetValue((*iter).first, (*iter).second);
 
	}
 

	
 
	tmp.AddList(this);
 
	tmp.RemoveList(list);
 
	this->RemoveList(&tmp);
 
}
0 comments (0 inline, 0 general)