From ae5c8a8b359255e4b026543c736d42601ea7a599 Mon Sep 17 00:00:00 2001 From: truebrain Date: Thu, 15 Jan 2009 15:56:10 +0000 Subject: [PATCH] (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 --- bin/ai/library/graph/aystar/library.nut | 1 + bin/ai/library/pathfinder/rail/library.nut | 1 + bin/ai/library/pathfinder/road/library.nut | 1 + bin/ai/library/queue/binary_heap/library.nut | 1 + bin/ai/library/queue/fibonacci_heap/library.nut | 1 + bin/ai/library/queue/priority_queue/library.nut | 1 + src/ai/ai_info.cpp | 17 +++++++++++++---- src/ai/ai_info.hpp | 12 +++++++++++- 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 f1c84748cf..1f563961a7 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 155adaad15..8f0dbad084 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 06c21f1def..727cdb9b0f 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 30489cbc27..b0caf7d09b 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 244228788a..727a2477dc 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 1c17848bf3..22e97e4e9c 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 a9bf22eae3..3f275630fd 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 223fbeaf32..9708eb5453 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 */