summaryrefslogtreecommitdiff
path: root/src/ai/api/ai_list.hpp
diff options
context:
space:
mode:
authortruebrain <truebrain@openttd.org>2011-11-29 23:07:38 +0000
committertruebrain <truebrain@openttd.org>2011-11-29 23:07:38 +0000
commitafdb67a3534f85b4efbd3327ece8137211042d7b (patch)
treeb62375a3846c2089e1c6904331e8f5a3d44851ba /src/ai/api/ai_list.hpp
parent5f6dc2466318b1275e8b654a260a6c565a0ecc5c (diff)
downloadopenttd-afdb67a3534f85b4efbd3327ece8137211042d7b.tar.xz
(svn r23354) -Codechange: move all src/ai/api/ai_*.[hc]pp files to src/script/api/script_* (Rubidium)
Diffstat (limited to 'src/ai/api/ai_list.hpp')
-rw-r--r--src/ai/api/ai_list.hpp283
1 files changed, 0 insertions, 283 deletions
diff --git a/src/ai/api/ai_list.hpp b/src/ai/api/ai_list.hpp
deleted file mode 100644
index 9087f26c5..000000000
--- a/src/ai/api/ai_list.hpp
+++ /dev/null
@@ -1,283 +0,0 @@
-/* $Id$ */
-
-/*
- * This file is part of OpenTTD.
- * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
- * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/** @file ai_list.hpp A list which can keep item/value pairs, which you can walk. */
-/** @defgroup AIList Classes that create a list of items. */
-
-#ifndef AI_LIST_HPP
-#define AI_LIST_HPP
-
-#include "ai_object.hpp"
-#include <map>
-#include <set>
-
-class AIListSorter;
-
-/**
- * Class that creates a list which can keep item/value pairs, which you can walk.
- */
-class AIList : public AIObject {
-public:
- /** Type of sorter */
- enum SorterType {
- SORT_BY_VALUE, ///< Sort the list based on the value of the item.
- SORT_BY_ITEM, ///< Sort the list based on the item itself.
- };
-
- /** Sort ascending */
- static const bool SORT_ASCENDING = true;
- /** Sort descnding */
- static const bool SORT_DESCENDING = false;
-
-private:
- AIListSorter *sorter; ///< Sorting algorithm
- SorterType sorter_type; ///< Sorting type
- bool sort_ascending; ///< Whether to sort ascending or descending
- bool initialized; ///< Whether an iteration has been started
- int modifications; ///< Number of modification that has been done. To prevent changing data while valuating.
-
-public:
- typedef std::set<int32> AIItemList; ///< The list of items inside the bucket
- typedef std::map<int32, AIItemList> AIListBucket; ///< The bucket list per value
- typedef std::map<int32, int32> AIListMap; ///< List per item
-
- AIListMap items; ///< The items in the list
- AIListBucket buckets; ///< The items in the list, sorted by value
-
- AIList();
- ~AIList();
-
- /**
- * Add a single item to the list.
- * @param item the item to add. Should be unique, otherwise it is ignored.
- * @param value the value to assign.
- * @note the value is set to 0 by default.
- */
- void AddItem(int32 item, int32 value = 0);
-
- /**
- * Remove a single item from the list.
- * @param item the item to remove. If not existing, it is ignored.
- */
- void RemoveItem(int32 item);
-
- /**
- * Clear the list, making Count() returning 0 and IsEmpty() returning true.
- */
- void Clear();
-
- /**
- * Check if an item is in the list.
- * @param item the item to check for.
- * @return true if the item is in the list.
- */
- bool HasItem(int32 item);
-
- /**
- * Go to the beginning of the list.
- * @return the item value of the first item.
- * @note returns 0 if beyond end-of-list. Use IsEnd() to check for end-of-list.
- */
- int32 Begin();
-
- /**
- * Go to the next item in the list.
- * @return the item value of the next item.
- * @note returns 0 if beyond end-of-list. Use IsEnd() to check for end-of-list.
- */
- int32 Next();
-
- /**
- * Check if a list is empty.
- * @return true if the list is empty.
- */
- bool IsEmpty();
-
- /**
- * Check if there is a element left. In other words, if this is false,
- * the last call to Begin() or Next() returned a valid item.
- * @return true if the current item is beyond end-of-list.
- */
- bool IsEnd();
-
- /**
- * Returns the amount of items in the list.
- * @return amount of items in the list.
- */
- int32 Count();
-
- /**
- * Get the value that belongs to this item.
- * @param item the item to get the value from
- * @return the value that belongs to this item.
- */
- int32 GetValue(int32 item);
-
- /**
- * Set a value of an item directly.
- * @param item the item to set the value for.
- * @param value the value to give to the item
- * @return true if we could set the item to value, false otherwise.
- * @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);
-
- /**
- * Sort this list by the given sorter and direction.
- * @param sorter the type of sorter to use
- * @param ascending if true, lowest value is on top, else at bottom.
- * @note the current item stays at the same place.
- * @see SORT_ASCENDING SORT_DESCENDING
- */
- void Sort(SorterType sorter, bool ascending);
-
- /**
- * Add one list to another one.
- * @param list The list that will be added to the caller.
- * @post The list to be added ('list') stays unmodified.
- * @note All added items keep their value as it was in 'list'.
- * @note If the item already exists inside the caller, the value of the
- * list that is added is set on the item.
- */
- void AddList(AIList *list);
-
- /**
- * Removes all items with a higher value than 'value'.
- * @param value the value above which all items are removed.
- */
- void RemoveAboveValue(int32 value);
-
- /**
- * Removes all items with a lower value than 'value'.
- * @param value the value below which all items are removed.
- */
- void RemoveBelowValue(int32 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 valuens (exclusive).
- */
- void RemoveBetweenValue(int32 start, int32 end);
-
- /**
- * Remove all items with this value.
- * @param value the value to remove.
- */
- void RemoveValue(int32 value);
-
- /**
- * Remove the first count items.
- * @param count the amount of items to remove.
- */
- void RemoveTop(int32 count);
-
- /**
- * Remove the last count items.
- * @param count the amount of items to remove.
- */
- void RemoveBottom(int32 count);
-
- /**
- * Remove everything that is in the given list from this list (same item index that is).
- * @param list the list of items to remove.
- * @pre list != NULL
- */
- void RemoveList(AIList *list);
-
- /**
- * Keep all items with a higher value than 'value'.
- * @param value the value above which all items are kept.
- */
- void KeepAboveValue(int32 value);
-
- /**
- * Keep all items with a lower value than 'value'.
- * @param value the value below which all items are kept.
- */
- void KeepBelowValue(int32 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);
-
- /**
- * Keep all items with this value.
- * @param value the value to keep.
- */
- void KeepValue(int32 value);
-
- /**
- * Keep the first count items, i.e. remove everything except the first count items.
- * @param count the amount of items to keep.
- */
- void KeepTop(int32 count);
-
- /**
- * Keep the last count items, i.e. remove everything except the last count items.
- * @param count the amount of items to keep.
- */
- void KeepBottom(int32 count);
-
- /**
- * Keeps everything that is in the given list from this list (same item index that is).
- * @param list the list of items to keep.
- * @pre list != NULL
- */
- void KeepList(AIList *list);
-
-#ifndef DOXYGEN_AI_DOCS
- /**
- * Used for 'foreach()' and [] get from Squirrel.
- */
- SQInteger _get(HSQUIRRELVM vm);
-
- /**
- * Used for [] set from Squirrel.
- */
- SQInteger _set(HSQUIRRELVM vm);
-
- /**
- * Used for 'foreach()' from Squirrel.
- */
- SQInteger _nexti(HSQUIRRELVM vm);
-
- /**
- * The Valuate() wrapper from Squirrel.
- */
- SQInteger Valuate(HSQUIRRELVM vm);
-#else
- /**
- * Give all items a value defined by the valuator you give.
- * @param valuator_function The function which will be doing the valuation.
- * @param params The params to give to the valuators (minus the first param,
- * which is always the index-value we are valuating).
- * @note You may not add, remove or change (setting the value of) items while
- * valuating. You may also not (re)sort while valuating.
- * @note You can write your own valuators and use them. Just remember that
- * the first parameter should be the index-value, and it should return
- * an integer.
- * @note Example:
- * list.Valuate(AIBridge.GetPrice, 5);
- * list.Valuate(AIBridge.GetMaxLength);
- * function MyVal(bridge_id, myparam)
- * {
- * return myparam * bridge_id; // This is silly
- * }
- * list.Valuate(MyVal, 12);
- */
- void Valuate(void *valuator_function, int params, ...);
-#endif /* DOXYGEN_AI_DOCS */
-};
-
-#endif /* AI_LIST_HPP */