mirror of https://github.com/OpenTTD/OpenTTD
(svn r27104) -Fix [FS#6194]: support 64 bits integere in the ScriptLists as well
parent
9428d6fb34
commit
14f197c6ff
|
@ -21,9 +21,9 @@
|
||||||
*/
|
*/
|
||||||
class ScriptListSorter {
|
class ScriptListSorter {
|
||||||
protected:
|
protected:
|
||||||
ScriptList *list; ///< The list that's being sorted.
|
ScriptList *list; ///< The list that's being sorted.
|
||||||
bool has_no_more_items; ///< Whether we have more items to iterate over.
|
bool has_no_more_items; ///< Whether we have more items to iterate over.
|
||||||
int32 item_next; ///< The next item we will show.
|
int64 item_next; ///< The next item we will show.
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -34,7 +34,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Get the first item of the sorter.
|
* Get the first item of the sorter.
|
||||||
*/
|
*/
|
||||||
virtual int32 Begin() = 0;
|
virtual int64 Begin() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop iterating a sorter.
|
* Stop iterating a sorter.
|
||||||
|
@ -44,7 +44,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Get the next item of the sorter.
|
* Get the next item of the sorter.
|
||||||
*/
|
*/
|
||||||
virtual int32 Next() = 0;
|
virtual int64 Next() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See if the sorter has reached the end.
|
* See if the sorter has reached the end.
|
||||||
|
@ -91,7 +91,7 @@ public:
|
||||||
this->End();
|
this->End();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Begin()
|
int64 Begin()
|
||||||
{
|
{
|
||||||
if (this->list->buckets.empty()) return 0;
|
if (this->list->buckets.empty()) return 0;
|
||||||
this->has_no_more_items = false;
|
this->has_no_more_items = false;
|
||||||
|
@ -101,7 +101,7 @@ public:
|
||||||
this->bucket_list_iter = this->bucket_list->begin();
|
this->bucket_list_iter = this->bucket_list->begin();
|
||||||
this->item_next = *this->bucket_list_iter;
|
this->item_next = *this->bucket_list_iter;
|
||||||
|
|
||||||
int32 item_current = this->item_next;
|
int64 item_current = this->item_next;
|
||||||
FindNext();
|
FindNext();
|
||||||
return item_current;
|
return item_current;
|
||||||
}
|
}
|
||||||
|
@ -136,11 +136,11 @@ public:
|
||||||
this->item_next = *this->bucket_list_iter;
|
this->item_next = *this->bucket_list_iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Next()
|
int64 Next()
|
||||||
{
|
{
|
||||||
if (this->IsEnd()) return 0;
|
if (this->IsEnd()) return 0;
|
||||||
|
|
||||||
int32 item_current = this->item_next;
|
int64 item_current = this->item_next;
|
||||||
FindNext();
|
FindNext();
|
||||||
return item_current;
|
return item_current;
|
||||||
}
|
}
|
||||||
|
@ -180,7 +180,7 @@ public:
|
||||||
this->End();
|
this->End();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Begin()
|
int64 Begin()
|
||||||
{
|
{
|
||||||
if (this->list->buckets.empty()) return 0;
|
if (this->list->buckets.empty()) return 0;
|
||||||
this->has_no_more_items = false;
|
this->has_no_more_items = false;
|
||||||
|
@ -195,7 +195,7 @@ public:
|
||||||
--this->bucket_list_iter;
|
--this->bucket_list_iter;
|
||||||
this->item_next = *this->bucket_list_iter;
|
this->item_next = *this->bucket_list_iter;
|
||||||
|
|
||||||
int32 item_current = this->item_next;
|
int64 item_current = this->item_next;
|
||||||
FindNext();
|
FindNext();
|
||||||
return item_current;
|
return item_current;
|
||||||
}
|
}
|
||||||
|
@ -233,11 +233,11 @@ public:
|
||||||
this->item_next = *this->bucket_list_iter;
|
this->item_next = *this->bucket_list_iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Next()
|
int64 Next()
|
||||||
{
|
{
|
||||||
if (this->IsEnd()) return 0;
|
if (this->IsEnd()) return 0;
|
||||||
|
|
||||||
int32 item_current = this->item_next;
|
int64 item_current = this->item_next;
|
||||||
FindNext();
|
FindNext();
|
||||||
return item_current;
|
return item_current;
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,7 @@ public:
|
||||||
this->End();
|
this->End();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Begin()
|
int64 Begin()
|
||||||
{
|
{
|
||||||
if (this->list->items.empty()) return 0;
|
if (this->list->items.empty()) return 0;
|
||||||
this->has_no_more_items = false;
|
this->has_no_more_items = false;
|
||||||
|
@ -280,7 +280,7 @@ public:
|
||||||
this->item_iter = this->list->items.begin();
|
this->item_iter = this->list->items.begin();
|
||||||
this->item_next = (*this->item_iter).first;
|
this->item_next = (*this->item_iter).first;
|
||||||
|
|
||||||
int32 item_current = this->item_next;
|
int64 item_current = this->item_next;
|
||||||
FindNext();
|
FindNext();
|
||||||
return item_current;
|
return item_current;
|
||||||
}
|
}
|
||||||
|
@ -303,11 +303,11 @@ public:
|
||||||
if (this->item_iter != this->list->items.end()) item_next = (*this->item_iter).first;
|
if (this->item_iter != this->list->items.end()) item_next = (*this->item_iter).first;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Next()
|
int64 Next()
|
||||||
{
|
{
|
||||||
if (this->IsEnd()) return 0;
|
if (this->IsEnd()) return 0;
|
||||||
|
|
||||||
int32 item_current = this->item_next;
|
int64 item_current = this->item_next;
|
||||||
FindNext();
|
FindNext();
|
||||||
return item_current;
|
return item_current;
|
||||||
}
|
}
|
||||||
|
@ -345,7 +345,7 @@ public:
|
||||||
this->End();
|
this->End();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Begin()
|
int64 Begin()
|
||||||
{
|
{
|
||||||
if (this->list->items.empty()) return 0;
|
if (this->list->items.empty()) return 0;
|
||||||
this->has_no_more_items = false;
|
this->has_no_more_items = false;
|
||||||
|
@ -354,7 +354,7 @@ public:
|
||||||
--this->item_iter;
|
--this->item_iter;
|
||||||
this->item_next = (*this->item_iter).first;
|
this->item_next = (*this->item_iter).first;
|
||||||
|
|
||||||
int32 item_current = this->item_next;
|
int64 item_current = this->item_next;
|
||||||
FindNext();
|
FindNext();
|
||||||
return item_current;
|
return item_current;
|
||||||
}
|
}
|
||||||
|
@ -382,11 +382,11 @@ public:
|
||||||
if (this->item_iter != this->list->items.end()) item_next = (*this->item_iter).first;
|
if (this->item_iter != this->list->items.end()) item_next = (*this->item_iter).first;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 Next()
|
int64 Next()
|
||||||
{
|
{
|
||||||
if (this->IsEnd()) return 0;
|
if (this->IsEnd()) return 0;
|
||||||
|
|
||||||
int32 item_current = this->item_next;
|
int64 item_current = this->item_next;
|
||||||
FindNext();
|
FindNext();
|
||||||
return item_current;
|
return item_current;
|
||||||
}
|
}
|
||||||
|
@ -420,7 +420,7 @@ ScriptList::~ScriptList()
|
||||||
delete this->sorter;
|
delete this->sorter;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScriptList::HasItem(int32 item)
|
bool ScriptList::HasItem(int64 item)
|
||||||
{
|
{
|
||||||
return this->items.count(item) == 1;
|
return this->items.count(item) == 1;
|
||||||
}
|
}
|
||||||
|
@ -434,7 +434,7 @@ void ScriptList::Clear()
|
||||||
this->sorter->End();
|
this->sorter->End();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::AddItem(int32 item, int32 value)
|
void ScriptList::AddItem(int64 item, int64 value)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
@ -446,13 +446,13 @@ void ScriptList::AddItem(int32 item, int32 value)
|
||||||
this->SetValue(item, value);
|
this->SetValue(item, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::RemoveItem(int32 item)
|
void ScriptList::RemoveItem(int64 item)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
if (!this->HasItem(item)) return;
|
if (!this->HasItem(item)) return;
|
||||||
|
|
||||||
int32 value = this->GetValue(item);
|
int64 value = this->GetValue(item);
|
||||||
|
|
||||||
this->sorter->Remove(item);
|
this->sorter->Remove(item);
|
||||||
this->buckets[value].erase(item);
|
this->buckets[value].erase(item);
|
||||||
|
@ -460,13 +460,13 @@ void ScriptList::RemoveItem(int32 item)
|
||||||
this->items.erase(item);
|
this->items.erase(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 ScriptList::Begin()
|
int64 ScriptList::Begin()
|
||||||
{
|
{
|
||||||
this->initialized = true;
|
this->initialized = true;
|
||||||
return this->sorter->Begin();
|
return this->sorter->Begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 ScriptList::Next()
|
int64 ScriptList::Next()
|
||||||
{
|
{
|
||||||
if (this->initialized == false) {
|
if (this->initialized == false) {
|
||||||
DEBUG(script, 0, "Next() is invalid as Begin() is never called");
|
DEBUG(script, 0, "Next() is invalid as Begin() is never called");
|
||||||
|
@ -494,20 +494,20 @@ int32 ScriptList::Count()
|
||||||
return (int32)this->items.size();
|
return (int32)this->items.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 ScriptList::GetValue(int32 item)
|
int64 ScriptList::GetValue(int64 item)
|
||||||
{
|
{
|
||||||
if (!this->HasItem(item)) return 0;
|
if (!this->HasItem(item)) return 0;
|
||||||
|
|
||||||
return this->items[item];
|
return this->items[item];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScriptList::SetValue(int32 item, int32 value)
|
bool ScriptList::SetValue(int64 item, int64 value)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
if (!this->HasItem(item)) return false;
|
if (!this->HasItem(item)) return false;
|
||||||
|
|
||||||
int32 value_old = this->GetValue(item);
|
int64 value_old = this->GetValue(item);
|
||||||
if (value_old == value) return true;
|
if (value_old == value) return true;
|
||||||
|
|
||||||
this->sorter->Remove(item);
|
this->sorter->Remove(item);
|
||||||
|
@ -573,7 +573,7 @@ void ScriptList::SwapList(ScriptList *list)
|
||||||
list->sorter->Retarget(list);
|
list->sorter->Retarget(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::RemoveAboveValue(int32 value)
|
void ScriptList::RemoveAboveValue(int64 value)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
@ -583,7 +583,7 @@ void ScriptList::RemoveAboveValue(int32 value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::RemoveBelowValue(int32 value)
|
void ScriptList::RemoveBelowValue(int64 value)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
@ -593,7 +593,7 @@ void ScriptList::RemoveBelowValue(int32 value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::RemoveBetweenValue(int32 start, int32 end)
|
void ScriptList::RemoveBetweenValue(int64 start, int64 end)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
@ -603,7 +603,7 @@ void ScriptList::RemoveBetweenValue(int32 start, int32 end)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::RemoveValue(int32 value)
|
void ScriptList::RemoveValue(int64 value)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
@ -697,7 +697,7 @@ void ScriptList::RemoveList(ScriptList *list)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::KeepAboveValue(int32 value)
|
void ScriptList::KeepAboveValue(int64 value)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
@ -707,7 +707,7 @@ void ScriptList::KeepAboveValue(int32 value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::KeepBelowValue(int32 value)
|
void ScriptList::KeepBelowValue(int64 value)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
@ -717,7 +717,7 @@ void ScriptList::KeepBelowValue(int32 value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::KeepBetweenValue(int32 start, int32 end)
|
void ScriptList::KeepBetweenValue(int64 start, int64 end)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
@ -727,7 +727,7 @@ void ScriptList::KeepBetweenValue(int32 start, int32 end)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptList::KeepValue(int32 value)
|
void ScriptList::KeepValue(int64 value)
|
||||||
{
|
{
|
||||||
this->modifications++;
|
this->modifications++;
|
||||||
|
|
||||||
|
|
|
@ -44,9 +44,9 @@ private:
|
||||||
int modifications; ///< Number of modification that has been done. To prevent changing data while valuating.
|
int modifications; ///< Number of modification that has been done. To prevent changing data while valuating.
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef std::set<int32> ScriptItemList; ///< The list of items inside the bucket
|
typedef std::set<int64> ScriptItemList; ///< The list of items inside the bucket
|
||||||
typedef std::map<int32, ScriptItemList> ScriptListBucket; ///< The bucket list per value
|
typedef std::map<int64, ScriptItemList> ScriptListBucket; ///< The bucket list per value
|
||||||
typedef std::map<int32, int32> ScriptListMap; ///< List per item
|
typedef std::map<int64, int64> ScriptListMap; ///< List per item
|
||||||
|
|
||||||
ScriptListMap items; ///< The items in the list
|
ScriptListMap items; ///< The items in the list
|
||||||
ScriptListBucket buckets; ///< The items in the list, sorted by value
|
ScriptListBucket buckets; ///< The items in the list, sorted by value
|
||||||
|
@ -60,16 +60,16 @@ public:
|
||||||
* @param item the item to add. Should be unique, otherwise it is ignored.
|
* @param item the item to add. Should be unique, otherwise it is ignored.
|
||||||
* @param value the value to assign.
|
* @param value the value to assign.
|
||||||
*/
|
*/
|
||||||
void AddItem(int32 item, int32 value);
|
void AddItem(int64 item, int64 value);
|
||||||
#else
|
#else
|
||||||
void AddItem(int32 item, int32 value = 0);
|
void AddItem(int64 item, int64 value = 0);
|
||||||
#endif /* DOXYGEN_API */
|
#endif /* DOXYGEN_API */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a single item from the list.
|
* Remove a single item from the list.
|
||||||
* @param item the item to remove. If not existing, it is ignored.
|
* @param item the item to remove. If not existing, it is ignored.
|
||||||
*/
|
*/
|
||||||
void RemoveItem(int32 item);
|
void RemoveItem(int64 item);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear the list, making Count() returning 0 and IsEmpty() returning true.
|
* Clear the list, making Count() returning 0 and IsEmpty() returning true.
|
||||||
|
@ -81,21 +81,21 @@ public:
|
||||||
* @param item the item to check for.
|
* @param item the item to check for.
|
||||||
* @return true if the item is in the list.
|
* @return true if the item is in the list.
|
||||||
*/
|
*/
|
||||||
bool HasItem(int32 item);
|
bool HasItem(int64 item);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Go to the beginning of the list and return the item. To get the value use list.GetValue(list.Begin()).
|
* Go to the beginning of the list and return the item. To get the value use list.GetValue(list.Begin()).
|
||||||
* @return the first item.
|
* @return the first item.
|
||||||
* @note returns 0 if beyond end-of-list. Use IsEnd() to check for end-of-list.
|
* @note returns 0 if beyond end-of-list. Use IsEnd() to check for end-of-list.
|
||||||
*/
|
*/
|
||||||
int32 Begin();
|
int64 Begin();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Go to the next item in the list and return the item. To get the value use list.GetValue(list.Next()).
|
* Go to the next item in the list and return the item. To get the value use list.GetValue(list.Next()).
|
||||||
* @return the next item.
|
* @return the next item.
|
||||||
* @note returns 0 if beyond end-of-list. Use IsEnd() to check for end-of-list.
|
* @note returns 0 if beyond end-of-list. Use IsEnd() to check for end-of-list.
|
||||||
*/
|
*/
|
||||||
int32 Next();
|
int64 Next();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a list is empty.
|
* Check if a list is empty.
|
||||||
|
@ -121,7 +121,7 @@ public:
|
||||||
* @param item the item to get the value from
|
* @param item the item to get the value from
|
||||||
* @return the value that belongs to this item.
|
* @return the value that belongs to this item.
|
||||||
*/
|
*/
|
||||||
int32 GetValue(int32 item);
|
int64 GetValue(int64 item);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a value of an item directly.
|
* Set a value of an item directly.
|
||||||
|
@ -131,7 +131,7 @@ public:
|
||||||
* @note Changing values of items while looping through a list might cause
|
* @note Changing values of items while looping through a list might cause
|
||||||
* entries to be skipped. Be very careful with such operations.
|
* entries to be skipped. Be very careful with such operations.
|
||||||
*/
|
*/
|
||||||
bool SetValue(int32 item, int32 value);
|
bool SetValue(int64 item, int64 value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort this list by the given sorter and direction.
|
* Sort this list by the given sorter and direction.
|
||||||
|
@ -162,26 +162,26 @@ public:
|
||||||
* Removes all items with a higher value than 'value'.
|
* Removes all items with a higher value than 'value'.
|
||||||
* @param value the value above which all items are removed.
|
* @param value the value above which all items are removed.
|
||||||
*/
|
*/
|
||||||
void RemoveAboveValue(int32 value);
|
void RemoveAboveValue(int64 value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all items with a lower value than 'value'.
|
* Removes all items with a lower value than 'value'.
|
||||||
* @param value the value below which all items are removed.
|
* @param value the value below which all items are removed.
|
||||||
*/
|
*/
|
||||||
void RemoveBelowValue(int32 value);
|
void RemoveBelowValue(int64 value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all items with a value above start and below end.
|
* Removes all items with a value above start and below end.
|
||||||
* @param start the lower bound of the to be removed values (exclusive).
|
* @param start the lower bound of the to be removed values (exclusive).
|
||||||
* @param end the upper bound of the to be removed values (exclusive).
|
* @param end the upper bound of the to be removed values (exclusive).
|
||||||
*/
|
*/
|
||||||
void RemoveBetweenValue(int32 start, int32 end);
|
void RemoveBetweenValue(int64 start, int64 end);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove all items with this value.
|
* Remove all items with this value.
|
||||||
* @param value the value to remove.
|
* @param value the value to remove.
|
||||||
*/
|
*/
|
||||||
void RemoveValue(int32 value);
|
void RemoveValue(int64 value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the first count items.
|
* Remove the first count items.
|
||||||
|
@ -206,26 +206,26 @@ public:
|
||||||
* Keep all items with a higher value than 'value'.
|
* Keep all items with a higher value than 'value'.
|
||||||
* @param value the value above which all items are kept.
|
* @param value the value above which all items are kept.
|
||||||
*/
|
*/
|
||||||
void KeepAboveValue(int32 value);
|
void KeepAboveValue(int64 value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keep all items with a lower value than 'value'.
|
* Keep all items with a lower value than 'value'.
|
||||||
* @param value the value below which all items are kept.
|
* @param value the value below which all items are kept.
|
||||||
*/
|
*/
|
||||||
void KeepBelowValue(int32 value);
|
void KeepBelowValue(int64 value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keep all items with a value above start and below end.
|
* Keep all items with a value above start and below end.
|
||||||
* @param start the lower bound of the to be kept values (exclusive).
|
* @param start the lower bound of the to be kept values (exclusive).
|
||||||
* @param end the upper bound of the to be kept values (exclusive).
|
* @param end the upper bound of the to be kept values (exclusive).
|
||||||
*/
|
*/
|
||||||
void KeepBetweenValue(int32 start, int32 end);
|
void KeepBetweenValue(int64 start, int64 end);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keep all items with this value.
|
* Keep all items with this value.
|
||||||
* @param value the value to keep.
|
* @param value the value to keep.
|
||||||
*/
|
*/
|
||||||
void KeepValue(int32 value);
|
void KeepValue(int64 value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keep the first count items, i.e. remove everything except the first count items.
|
* Keep the first count items, i.e. remove everything except the first count items.
|
||||||
|
|
Loading…
Reference in New Issue