summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortruebrain <truebrain@openttd.org>2009-01-15 15:56:10 +0000
committertruebrain <truebrain@openttd.org>2009-01-15 15:56:10 +0000
commitae5c8a8b359255e4b026543c736d42601ea7a599 (patch)
tree336201bee848644fdb9096a06f1ffec998951171
parente84138af22abc40d3ebd993eba4103ccf3b2997f (diff)
downloadopenttd-ae5c8a8b359255e4b026543c736d42601ea7a599.tar.xz
(svn r15091) -Add [NoAI] [API CHANGE]: introduce GetCategory() as a requirement for every library.nut, to indicate in which category it belongs. Currently the directory indicates the category, but this doesn't allow planned future additions
-rw-r--r--bin/ai/library/graph/aystar/library.nut1
-rw-r--r--bin/ai/library/pathfinder/rail/library.nut1
-rw-r--r--bin/ai/library/pathfinder/road/library.nut1
-rw-r--r--bin/ai/library/queue/binary_heap/library.nut1
-rw-r--r--bin/ai/library/queue/fibonacci_heap/library.nut1
-rw-r--r--bin/ai/library/queue/priority_queue/library.nut1
-rw-r--r--src/ai/ai_info.cpp17
-rw-r--r--src/ai/ai_info.hpp12
8 files changed, 30 insertions, 5 deletions
diff --git a/bin/ai/library/graph/aystar/library.nut b/bin/ai/library/graph/aystar/library.nut
index f1c84748c..1f563961a 100644
--- a/bin/ai/library/graph/aystar/library.nut
+++ b/bin/ai/library/graph/aystar/library.nut
@@ -8,6 +8,7 @@ class AyStar extends AILibrary {
function GetVersion() { return 4; }
function GetDate() { return "2008-06-11"; }
function CreateInstance() { return "AyStar"; }
+ function GetCategory() { return "Graph"; }
}
RegisterLibrary(AyStar());
diff --git a/bin/ai/library/pathfinder/rail/library.nut b/bin/ai/library/pathfinder/rail/library.nut
index 155adaad1..8f0dbad08 100644
--- a/bin/ai/library/pathfinder/rail/library.nut
+++ b/bin/ai/library/pathfinder/rail/library.nut
@@ -8,6 +8,7 @@ class Rail extends AILibrary {
function GetVersion() { return 1; }
function GetDate() { return "2008-09-22"; }
function CreateInstance() { return "Rail"; }
+ function GetCategory() { return "Pathfinder"; }
}
RegisterLibrary(Rail());
diff --git a/bin/ai/library/pathfinder/road/library.nut b/bin/ai/library/pathfinder/road/library.nut
index 06c21f1de..727cdb9b0 100644
--- a/bin/ai/library/pathfinder/road/library.nut
+++ b/bin/ai/library/pathfinder/road/library.nut
@@ -8,6 +8,7 @@ class Road extends AILibrary {
function GetVersion() { return 3; }
function GetDate() { return "2008-06-18"; }
function CreateInstance() { return "Road"; }
+ function GetCategory() { return "Pathfinder"; }
}
RegisterLibrary(Road());
diff --git a/bin/ai/library/queue/binary_heap/library.nut b/bin/ai/library/queue/binary_heap/library.nut
index 30489cbc2..b0caf7d09 100644
--- a/bin/ai/library/queue/binary_heap/library.nut
+++ b/bin/ai/library/queue/binary_heap/library.nut
@@ -8,6 +8,7 @@ class BinaryHeap extends AILibrary {
function GetVersion() { return 1; }
function GetDate() { return "2008-06-10"; }
function CreateInstance() { return "BinaryHeap"; }
+ function GetCategory() { return "Queue"; }
}
RegisterLibrary(BinaryHeap());
diff --git a/bin/ai/library/queue/fibonacci_heap/library.nut b/bin/ai/library/queue/fibonacci_heap/library.nut
index 244228788..727a2477d 100644
--- a/bin/ai/library/queue/fibonacci_heap/library.nut
+++ b/bin/ai/library/queue/fibonacci_heap/library.nut
@@ -8,6 +8,7 @@ class FibonacciHeap extends AILibrary {
function GetVersion() { return 1; }
function GetDate() { return "2008-08-22"; }
function CreateInstance() { return "FibonacciHeap"; }
+ function GetCategory() { return "Queue"; }
}
RegisterLibrary(FibonacciHeap());
diff --git a/bin/ai/library/queue/priority_queue/library.nut b/bin/ai/library/queue/priority_queue/library.nut
index 1c17848bf..22e97e4e9 100644
--- a/bin/ai/library/queue/priority_queue/library.nut
+++ b/bin/ai/library/queue/priority_queue/library.nut
@@ -8,6 +8,7 @@ class PriorityQueue extends AILibrary {
function GetVersion() { return 2; }
function GetDate() { return "2008-06-10"; }
function CreateInstance() { return "PriorityQueue"; }
+ function GetCategory() { return "Queue"; }
}
RegisterLibrary(PriorityQueue());
diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp
index a9bf22eae..3f275630f 100644
--- a/src/ai/ai_info.cpp
+++ b/src/ai/ai_info.cpp
@@ -118,7 +118,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
}
}
-/* static */ SQInteger AIFileInfo::Constructor(HSQUIRRELVM vm, AIFileInfo *info)
+/* static */ SQInteger AIFileInfo::Constructor(HSQUIRRELVM vm, AIFileInfo *info, bool library)
{
SQInteger res = 0;
@@ -138,6 +138,9 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
info->CheckMethods(&res, "GetVersion");
info->CheckMethods(&res, "GetDate");
info->CheckMethods(&res, "CreateInstance");
+ if (library) {
+ info->CheckMethods(&res, "GetCategory");
+ }
/* Abort if one method was missing */
if (res != 0) return res;
@@ -155,7 +158,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
sq_getinstanceup(vm, 2, &instance, 0);
AIInfo *info = (AIInfo *)instance;
- SQInteger res = AIFileInfo::Constructor(vm, info);
+ SQInteger res = AIFileInfo::Constructor(vm, info, false);
if (res != 0) return res;
AIConfigItem config;
@@ -191,7 +194,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
sq_getinstanceup(vm, 2, &instance, 0);
AIInfo *info = (AIInfo *)instance;
- SQInteger res = AIFileInfo::Constructor(vm, info);
+ SQInteger res = AIFileInfo::Constructor(vm, info, false);
if (res != 0) return res;
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
@@ -356,7 +359,7 @@ int AIInfo::GetSettingDefaultValue(const char *name)
/* Create a new AIFileInfo */
AILibrary *library = new AILibrary();
- SQInteger res = AIFileInfo::Constructor(vm, library);
+ SQInteger res = AIFileInfo::Constructor(vm, library, true);
if (res != 0) return res;
/* Register the Library to the base system */
@@ -365,6 +368,12 @@ int AIInfo::GetSettingDefaultValue(const char *name)
return 0;
}
+const char *AILibrary::GetCategory()
+{
+ if (this->category == NULL) this->category = this->engine->CallStringMethodStrdup(*this->SQ_instance, "GetCategory");
+ return this->category;
+}
+
/* static */ SQInteger AILibrary::Import(HSQUIRRELVM vm)
{
SQConvert::SQAutoFreePointers ptr;
diff --git a/src/ai/ai_info.hpp b/src/ai/ai_info.hpp
index 223fbeaf3..9708eb545 100644
--- a/src/ai/ai_info.hpp
+++ b/src/ai/ai_info.hpp
@@ -101,7 +101,7 @@ public:
/**
* Process the creation of a FileInfo object.
*/
- static SQInteger Constructor(HSQUIRRELVM vm, AIFileInfo *info);
+ static SQInteger Constructor(HSQUIRRELVM vm, AIFileInfo *info, bool library);
private:
class Squirrel *engine;
@@ -155,12 +155,22 @@ private:
class AILibrary : public AIFileInfo {
public:
+ AILibrary() : AIFileInfo(), category(NULL) {};
+
/**
* Create an AI, using this AIInfo as start-template.
*/
static SQInteger Constructor(HSQUIRRELVM vm);
static SQInteger Import(HSQUIRRELVM vm);
+
+ /**
+ * Get the category this library is in.
+ */
+ const char *GetCategory();
+
+private:
+ const char *category;
};
#endif /* AI_INFO */