(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

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
truebrain 16 years ago
parent d62a85f2ce
commit 103cd2a5ed

@ -8,6 +8,7 @@ class AyStar extends AILibrary {
function GetVersion() { return 4; } function GetVersion() { return 4; }
function GetDate() { return "2008-06-11"; } function GetDate() { return "2008-06-11"; }
function CreateInstance() { return "AyStar"; } function CreateInstance() { return "AyStar"; }
function GetCategory() { return "Graph"; }
} }
RegisterLibrary(AyStar()); RegisterLibrary(AyStar());

@ -8,6 +8,7 @@ class Rail extends AILibrary {
function GetVersion() { return 1; } function GetVersion() { return 1; }
function GetDate() { return "2008-09-22"; } function GetDate() { return "2008-09-22"; }
function CreateInstance() { return "Rail"; } function CreateInstance() { return "Rail"; }
function GetCategory() { return "Pathfinder"; }
} }
RegisterLibrary(Rail()); RegisterLibrary(Rail());

@ -8,6 +8,7 @@ class Road extends AILibrary {
function GetVersion() { return 3; } function GetVersion() { return 3; }
function GetDate() { return "2008-06-18"; } function GetDate() { return "2008-06-18"; }
function CreateInstance() { return "Road"; } function CreateInstance() { return "Road"; }
function GetCategory() { return "Pathfinder"; }
} }
RegisterLibrary(Road()); RegisterLibrary(Road());

@ -8,6 +8,7 @@ class BinaryHeap extends AILibrary {
function GetVersion() { return 1; } function GetVersion() { return 1; }
function GetDate() { return "2008-06-10"; } function GetDate() { return "2008-06-10"; }
function CreateInstance() { return "BinaryHeap"; } function CreateInstance() { return "BinaryHeap"; }
function GetCategory() { return "Queue"; }
} }
RegisterLibrary(BinaryHeap()); RegisterLibrary(BinaryHeap());

@ -8,6 +8,7 @@ class FibonacciHeap extends AILibrary {
function GetVersion() { return 1; } function GetVersion() { return 1; }
function GetDate() { return "2008-08-22"; } function GetDate() { return "2008-08-22"; }
function CreateInstance() { return "FibonacciHeap"; } function CreateInstance() { return "FibonacciHeap"; }
function GetCategory() { return "Queue"; }
} }
RegisterLibrary(FibonacciHeap()); RegisterLibrary(FibonacciHeap());

@ -8,6 +8,7 @@ class PriorityQueue extends AILibrary {
function GetVersion() { return 2; } function GetVersion() { return 2; }
function GetDate() { return "2008-06-10"; } function GetDate() { return "2008-06-10"; }
function CreateInstance() { return "PriorityQueue"; } function CreateInstance() { return "PriorityQueue"; }
function GetCategory() { return "Queue"; }
} }
RegisterLibrary(PriorityQueue()); RegisterLibrary(PriorityQueue());

@ -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; SQInteger res = 0;
@ -138,6 +138,9 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
info->CheckMethods(&res, "GetVersion"); info->CheckMethods(&res, "GetVersion");
info->CheckMethods(&res, "GetDate"); info->CheckMethods(&res, "GetDate");
info->CheckMethods(&res, "CreateInstance"); info->CheckMethods(&res, "CreateInstance");
if (library) {
info->CheckMethods(&res, "GetCategory");
}
/* Abort if one method was missing */ /* Abort if one method was missing */
if (res != 0) return res; if (res != 0) return res;
@ -155,7 +158,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
sq_getinstanceup(vm, 2, &instance, 0); sq_getinstanceup(vm, 2, &instance, 0);
AIInfo *info = (AIInfo *)instance; AIInfo *info = (AIInfo *)instance;
SQInteger res = AIFileInfo::Constructor(vm, info); SQInteger res = AIFileInfo::Constructor(vm, info, false);
if (res != 0) return res; if (res != 0) return res;
AIConfigItem config; AIConfigItem config;
@ -191,7 +194,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
sq_getinstanceup(vm, 2, &instance, 0); sq_getinstanceup(vm, 2, &instance, 0);
AIInfo *info = (AIInfo *)instance; AIInfo *info = (AIInfo *)instance;
SQInteger res = AIFileInfo::Constructor(vm, info); SQInteger res = AIFileInfo::Constructor(vm, info, false);
if (res != 0) return res; if (res != 0) return res;
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */ /* 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 */ /* Create a new AIFileInfo */
AILibrary *library = new AILibrary(); AILibrary *library = new AILibrary();
SQInteger res = AIFileInfo::Constructor(vm, library); SQInteger res = AIFileInfo::Constructor(vm, library, true);
if (res != 0) return res; if (res != 0) return res;
/* Register the Library to the base system */ /* Register the Library to the base system */
@ -365,6 +368,12 @@ int AIInfo::GetSettingDefaultValue(const char *name)
return 0; 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) /* static */ SQInteger AILibrary::Import(HSQUIRRELVM vm)
{ {
SQConvert::SQAutoFreePointers ptr; SQConvert::SQAutoFreePointers ptr;

@ -101,7 +101,7 @@ public:
/** /**
* Process the creation of a FileInfo object. * Process the creation of a FileInfo object.
*/ */
static SQInteger Constructor(HSQUIRRELVM vm, AIFileInfo *info); static SQInteger Constructor(HSQUIRRELVM vm, AIFileInfo *info, bool library);
private: private:
class Squirrel *engine; class Squirrel *engine;
@ -155,12 +155,22 @@ private:
class AILibrary : public AIFileInfo { class AILibrary : public AIFileInfo {
public: public:
AILibrary() : AIFileInfo(), category(NULL) {};
/** /**
* Create an AI, using this AIInfo as start-template. * Create an AI, using this AIInfo as start-template.
*/ */
static SQInteger Constructor(HSQUIRRELVM vm); static SQInteger Constructor(HSQUIRRELVM vm);
static SQInteger Import(HSQUIRRELVM vm); static SQInteger Import(HSQUIRRELVM vm);
/**
* Get the category this library is in.
*/
const char *GetCategory();
private:
const char *category;
}; };
#endif /* AI_INFO */ #endif /* AI_INFO */

Loading…
Cancel
Save