00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_PLUGLDR_H__
00020 #define __CS_PLUGLDR_H__
00021
00022 #include "csutil/csvector.h"
00023 #include "csutil/util.h"
00024
00025 struct iObjectRegistry;
00026
00027 struct csPluginLoadRec
00028 {
00029 char* Tag;
00030 char* ClassID;
00031
00032 csPluginLoadRec (const char* iTag, const char* iClassID)
00033 { Tag = csStrNew (iTag); ClassID = csStrNew (iClassID); }
00034 ~csPluginLoadRec ()
00035 { delete [] ClassID; delete [] Tag; }
00036 };
00037
00038 class csPluginList : public csVector
00039 {
00040 public:
00041 virtual ~csPluginList ()
00042 { DeleteAll (); }
00043 bool Sort (iObjectRegistry* object_reg);
00044 csPluginLoadRec &Get (int idx)
00045 { return *(csPluginLoadRec *)csVector::Get (idx); }
00046 virtual bool FreeItem (csSome Item)
00047 { delete (csPluginLoadRec *)Item; return true; }
00048 private:
00049 bool RecurseSort (iObjectRegistry*, int row, int *order, int *loop,
00050 bool *matrix);
00051 };
00052
00057 class csPluginLoader
00058 {
00059 friend class csPluginList;
00060
00061 private:
00062
00063 iObjectRegistry* object_reg;
00064
00065 csPluginList requested_plugins;
00066
00067 public:
00069 csPluginLoader (iObjectRegistry* object_reg);
00071 virtual ~csPluginLoader ();
00072
00083 void RequestPlugin (const char* pluginName, const char* tagName);
00084
00086 bool LoadPlugins ();
00087 };
00088
00089 #endif // __CS_PLUGLDR_H__
00090