# HG changeset patch # User rubidium # Date 2015-01-01 21:08:19 # Node ID 113aef356292692f685da956b6e5a2879eef81de # Parent d1c61adacb78aa2a50eca837caf36ff55aa16671 (svn r27104) -Fix [FS#6194]: support 64 bits integere in the ScriptLists as well diff --git a/src/script/api/script_list.cpp b/src/script/api/script_list.cpp --- a/src/script/api/script_list.cpp +++ b/src/script/api/script_list.cpp @@ -21,9 +21,9 @@ */ class ScriptListSorter { 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. - int32 item_next; ///< The next item we will show. + int64 item_next; ///< The next item we will show. public: /** @@ -34,7 +34,7 @@ public: /** * Get the first item of the sorter. */ - virtual int32 Begin() = 0; + virtual int64 Begin() = 0; /** * Stop iterating a sorter. @@ -44,7 +44,7 @@ public: /** * Get the next item of the sorter. */ - virtual int32 Next() = 0; + virtual int64 Next() = 0; /** * See if the sorter has reached the end. @@ -91,7 +91,7 @@ public: this->End(); } - int32 Begin() + int64 Begin() { if (this->list->buckets.empty()) return 0; this->has_no_more_items = false; @@ -101,7 +101,7 @@ public: this->bucket_list_iter = this->bucket_list->begin(); this->item_next = *this->bucket_list_iter; - int32 item_current = this->item_next; + int64 item_current = this->item_next; FindNext(); return item_current; } @@ -136,11 +136,11 @@ public: this->item_next = *this->bucket_list_iter; } - int32 Next() + int64 Next() { if (this->IsEnd()) return 0; - int32 item_current = this->item_next; + int64 item_current = this->item_next; FindNext(); return item_current; } @@ -180,7 +180,7 @@ public: this->End(); } - int32 Begin() + int64 Begin() { if (this->list->buckets.empty()) return 0; this->has_no_more_items = false; @@ -195,7 +195,7 @@ public: --this->bucket_list_iter; this->item_next = *this->bucket_list_iter; - int32 item_current = this->item_next; + int64 item_current = this->item_next; FindNext(); return item_current; } @@ -233,11 +233,11 @@ public: this->item_next = *this->bucket_list_iter; } - int32 Next() + int64 Next() { if (this->IsEnd()) return 0; - int32 item_current = this->item_next; + int64 item_current = this->item_next; FindNext(); return item_current; } @@ -272,7 +272,7 @@ public: this->End(); } - int32 Begin() + int64 Begin() { if (this->list->items.empty()) return 0; this->has_no_more_items = false; @@ -280,7 +280,7 @@ public: this->item_iter = this->list->items.begin(); this->item_next = (*this->item_iter).first; - int32 item_current = this->item_next; + int64 item_current = this->item_next; FindNext(); return item_current; } @@ -303,11 +303,11 @@ public: if (this->item_iter != this->list->items.end()) item_next = (*this->item_iter).first; } - int32 Next() + int64 Next() { if (this->IsEnd()) return 0; - int32 item_current = this->item_next; + int64 item_current = this->item_next; FindNext(); return item_current; } @@ -345,7 +345,7 @@ public: this->End(); } - int32 Begin() + int64 Begin() { if (this->list->items.empty()) return 0; this->has_no_more_items = false; @@ -354,7 +354,7 @@ public: --this->item_iter; this->item_next = (*this->item_iter).first; - int32 item_current = this->item_next; + int64 item_current = this->item_next; FindNext(); return item_current; } @@ -382,11 +382,11 @@ public: if (this->item_iter != this->list->items.end()) item_next = (*this->item_iter).first; } - int32 Next() + int64 Next() { if (this->IsEnd()) return 0; - int32 item_current = this->item_next; + int64 item_current = this->item_next; FindNext(); return item_current; } @@ -420,7 +420,7 @@ ScriptList::~ScriptList() delete this->sorter; } -bool ScriptList::HasItem(int32 item) +bool ScriptList::HasItem(int64 item) { return this->items.count(item) == 1; } @@ -434,7 +434,7 @@ void ScriptList::Clear() this->sorter->End(); } -void ScriptList::AddItem(int32 item, int32 value) +void ScriptList::AddItem(int64 item, int64 value) { this->modifications++; @@ -446,13 +446,13 @@ void ScriptList::AddItem(int32 item, int this->SetValue(item, value); } -void ScriptList::RemoveItem(int32 item) +void ScriptList::RemoveItem(int64 item) { this->modifications++; if (!this->HasItem(item)) return; - int32 value = this->GetValue(item); + int64 value = this->GetValue(item); this->sorter->Remove(item); this->buckets[value].erase(item); @@ -460,13 +460,13 @@ void ScriptList::RemoveItem(int32 item) this->items.erase(item); } -int32 ScriptList::Begin() +int64 ScriptList::Begin() { this->initialized = true; return this->sorter->Begin(); } -int32 ScriptList::Next() +int64 ScriptList::Next() { if (this->initialized == false) { DEBUG(script, 0, "Next() is invalid as Begin() is never called"); @@ -494,20 +494,20 @@ int32 ScriptList::Count() return (int32)this->items.size(); } -int32 ScriptList::GetValue(int32 item) +int64 ScriptList::GetValue(int64 item) { if (!this->HasItem(item)) return 0; return this->items[item]; } -bool ScriptList::SetValue(int32 item, int32 value) +bool ScriptList::SetValue(int64 item, int64 value) { this->modifications++; if (!this->HasItem(item)) return false; - int32 value_old = this->GetValue(item); + int64 value_old = this->GetValue(item); if (value_old == value) return true; this->sorter->Remove(item); @@ -573,7 +573,7 @@ void ScriptList::SwapList(ScriptList *li list->sorter->Retarget(list); } -void ScriptList::RemoveAboveValue(int32 value) +void ScriptList::RemoveAboveValue(int64 value) { this->modifications++; @@ -583,7 +583,7 @@ void ScriptList::RemoveAboveValue(int32 } } -void ScriptList::RemoveBelowValue(int32 value) +void ScriptList::RemoveBelowValue(int64 value) { this->modifications++; @@ -593,7 +593,7 @@ void ScriptList::RemoveBelowValue(int32 } } -void ScriptList::RemoveBetweenValue(int32 start, int32 end) +void ScriptList::RemoveBetweenValue(int64 start, int64 end) { this->modifications++; @@ -603,7 +603,7 @@ void ScriptList::RemoveBetweenValue(int3 } } -void ScriptList::RemoveValue(int32 value) +void ScriptList::RemoveValue(int64 value) { this->modifications++; @@ -697,7 +697,7 @@ void ScriptList::RemoveList(ScriptList * } } -void ScriptList::KeepAboveValue(int32 value) +void ScriptList::KeepAboveValue(int64 value) { this->modifications++; @@ -707,7 +707,7 @@ void ScriptList::KeepAboveValue(int32 va } } -void ScriptList::KeepBelowValue(int32 value) +void ScriptList::KeepBelowValue(int64 value) { this->modifications++; @@ -717,7 +717,7 @@ void ScriptList::KeepBelowValue(int32 va } } -void ScriptList::KeepBetweenValue(int32 start, int32 end) +void ScriptList::KeepBetweenValue(int64 start, int64 end) { this->modifications++; @@ -727,7 +727,7 @@ void ScriptList::KeepBetweenValue(int32 } } -void ScriptList::KeepValue(int32 value) +void ScriptList::KeepValue(int64 value) { this->modifications++; diff --git a/src/script/api/script_list.hpp b/src/script/api/script_list.hpp --- a/src/script/api/script_list.hpp +++ b/src/script/api/script_list.hpp @@ -44,9 +44,9 @@ private: int modifications; ///< Number of modification that has been done. To prevent changing data while valuating. public: - typedef std::set ScriptItemList; ///< The list of items inside the bucket - typedef std::map ScriptListBucket; ///< The bucket list per value - typedef std::map ScriptListMap; ///< List per item + typedef std::set ScriptItemList; ///< The list of items inside the bucket + typedef std::map ScriptListBucket; ///< The bucket list per value + typedef std::map ScriptListMap; ///< List per item ScriptListMap items; ///< The items in the list 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 value the value to assign. */ - void AddItem(int32 item, int32 value); + void AddItem(int64 item, int64 value); #else - void AddItem(int32 item, int32 value = 0); + void AddItem(int64 item, int64 value = 0); #endif /* DOXYGEN_API */ /** * Remove a single item from the list. * @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. @@ -81,21 +81,21 @@ public: * @param item the item to check for. * @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()). * @return the first item. * @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()). * @return the next item. * @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. @@ -121,7 +121,7 @@ public: * @param item the item to get the value from * @return the value that belongs to this item. */ - int32 GetValue(int32 item); + int64 GetValue(int64 item); /** * Set a value of an item directly. @@ -131,7 +131,7 @@ public: * @note Changing values of items while looping through a list might cause * 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. @@ -162,26 +162,26 @@ public: * Removes all items with a higher value than 'value'. * @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'. * @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. * @param start the lower 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. * @param value the value to remove. */ - void RemoveValue(int32 value); + void RemoveValue(int64 value); /** * Remove the first count items. @@ -206,26 +206,26 @@ public: * Keep all items with a higher value than 'value'. * @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'. * @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. * @param start the lower 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. * @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.