Browse Source

Updated to use Jupiter::ReadableString

release/0.19
JustinAJ 10 years ago
parent
commit
ce126af6cb
  1. 45
      Jupiter/Plugin.cpp
  2. 17
      Jupiter/Plugin.h

45
Jupiter/Plugin.cpp

@ -23,8 +23,9 @@
#include "Functions.h"
#include "ArrayList.h"
#include "CString.h"
#include "String.h"
Jupiter::CStringS pluginDir = DEFAULT_PLUGINS_DIRECTORY;
Jupiter::StringS pluginDir = DEFAULT_PLUGINS_DIRECTORY;
Jupiter::ArrayList<Jupiter::Plugin> _plugins;
Jupiter::ArrayList<Jupiter::Plugin> *Jupiter::plugins = &_plugins;
@ -60,31 +61,25 @@ dlib::~dlib()
}
}
void Jupiter::setPluginDirectory(const char *dir)
void Jupiter::setPluginDirectory(const Jupiter::ReadableString &dir)
{
if (dir == nullptr) pluginDir = DEFAULT_PLUGINS_DIRECTORY;
else
{
pluginDir = dir;
if (pluginDir.size() != 0 && dir[pluginDir.size() - 1] != DIR_CHR) pluginDir += DIR_CHR;
}
if (pluginDir.set(dir) != 0 && pluginDir.get(pluginDir.size() - 1) != DIR_CHR) pluginDir += DIR_CHR;
}
const char *Jupiter::getPluginDirectory()
const Jupiter::ReadableString &Jupiter::getPluginDirectory()
{
return pluginDir.c_str();
return pluginDir;
}
Jupiter::Plugin *Jupiter::loadPlugin(const char *pluginName)
{
#if defined _WIN32
char *fileName = new char[strlen(pluginName) + pluginDir.size() + 5];
sprintf(fileName, "%s%s.dll", pluginDir.c_str(), pluginName);
#define MODULE_FILE_EXTENSION ".dll"
#else // _WIN32
char *fileName = new char[strlen(pluginName) + pluginDirLen + 4];
sprintf(fileName, "%s%s.so", pluginDir.c_str(), pluginName);
#define MODULE_FILE_EXTENSION ".so"
#endif // _WIN32
return Jupiter::loadPluginFile(fileName);
Jupiter::Plugin *Jupiter::loadPlugin(const Jupiter::ReadableString &pluginName)
{
return Jupiter::loadPluginFile(Jupiter::CStringS::Format("%.*s%.*s" MODULE_FILE_EXTENSION, pluginDir.size(), pluginDir.ptr(), pluginName.size(), pluginName.ptr()).c_str());
}
Jupiter::Plugin *Jupiter::loadPluginFile(const char *file)
@ -121,7 +116,7 @@ fail:
return nullptr;
}
bool Jupiter::freePlugin(unsigned int index)
bool Jupiter::freePlugin(size_t index)
{
if (index < _plugins.size())
{
@ -146,30 +141,30 @@ bool Jupiter::freePlugin(unsigned int index)
bool Jupiter::freePlugin(Jupiter::Plugin *plugin)
{
if (plugin == nullptr) return false;
for (int i = _plugins.size() - 1; i >= 0; i--) if (_plugins.get(i) == plugin) return Jupiter::freePlugin(i);
for (size_t i = 0; i != _plugins.size(); i++) if (_plugins.get(i) == plugin) return Jupiter::freePlugin(i);
return false;
}
bool Jupiter::freePlugin(const char *pluginName)
bool Jupiter::freePlugin(const Jupiter::ReadableString &pluginName)
{
if (pluginName == nullptr) return false;
for (int i = _plugins.size() - 1; i >= 0; i--) if (strmatchi(pluginName, _plugins.get(i)->getName())) return Jupiter::freePlugin(i);
for (size_t i = 0; i != _plugins.size(); i++) if (pluginName.matchi(_plugins.get(i)->getName())) return Jupiter::freePlugin(i);
return false;
}
Jupiter::Plugin *Jupiter::getPlugin(unsigned int index)
Jupiter::Plugin *Jupiter::getPlugin(size_t index)
{
if (index < _plugins.size()) return _plugins.get(index);
return nullptr;
}
Jupiter::Plugin *Jupiter::getPlugin(const char *pluginName)
Jupiter::Plugin *Jupiter::getPlugin(const Jupiter::ReadableString &pluginName)
{
Jupiter::Plugin *p;
for (int i = _plugins.size() - 1; i >= 0; i--)
for (size_t i = 0; i != _plugins.size(); i++)
{
p = _plugins.get(i);
if (strmatchi(pluginName, p->getName())) return p;
if (pluginName.matchi(p->getName())) return p;
}
return nullptr;
}

17
Jupiter/Plugin.h

@ -25,7 +25,7 @@
#include "ArrayList.h"
#include "Thinker.h"
#include "CString.h"
#include "String_Type.h"
#include "Rehash.h"
namespace Jupiter
@ -232,18 +232,17 @@ namespace Jupiter
/**
* @brief Sets the directory to look in for plugins.
* Note: This DOES NOT copy the input string.
*
* @param dir Directory to look for plugins in.
*/
JUPITER_API void setPluginDirectory(const char *dir);
JUPITER_API void setPluginDirectory(const Jupiter::ReadableString &dir);
/**
* @brief Returns the current plugin directory.
*
* @return String containing the directory which is prepended to module load attempts.
*/
JUPITER_API const char *getPluginDirectory();
JUPITER_API const Jupiter::ReadableString &getPluginDirectory();
/**
* @brief Loads a module, appending .so or .dll as appropriate for the operating system.
@ -251,7 +250,7 @@ namespace Jupiter
* @param pluginName The name of the plugin to load.
* @return A pointer to the plugin that was loaded on success, nullptr otherwise.
*/
JUPITER_API Jupiter::Plugin *loadPlugin(const char *pluginName);
JUPITER_API Jupiter::Plugin *loadPlugin(const Jupiter::ReadableString &pluginName);
/**
* @brief Loads a module based on a true file name.
@ -267,7 +266,7 @@ namespace Jupiter
* @param index Index of the module.
* @return True if a module was unloaded, false otherwise.
*/
JUPITER_API bool freePlugin(unsigned int index);
JUPITER_API bool freePlugin(size_t index);
/**
* @brief Unloads a module and removes it from the module list, based on its data.
@ -284,7 +283,7 @@ namespace Jupiter
* @param pluginName Name of the module to unload.
* @return True if a module was unloaded, false otherwise.
*/
JUPITER_API bool freePlugin(const char *pluginName);
JUPITER_API bool freePlugin(const Jupiter::ReadableString &pluginName);
/**
* @brief Fetches a plugin from the list and returns it, based on its index.
@ -292,7 +291,7 @@ namespace Jupiter
* @param index Index of the module to return.
* @return A module on success, nullptr otherwise.
*/
JUPITER_API Jupiter::Plugin *getPlugin(unsigned int index);
JUPITER_API Jupiter::Plugin *getPlugin(size_t index);
/**
* @brief Fetches a plugin from the list and returns it, based on its name.
@ -300,7 +299,7 @@ namespace Jupiter
* @param pluginName String containing the name of the plugin.
* @return A module on success, nullptr otherwise.
*/
JUPITER_API Jupiter::Plugin *getPlugin(const char *pluginName);
JUPITER_API Jupiter::Plugin *getPlugin(const Jupiter::ReadableString &pluginName);
}
#endif // _PLUGIN_H_HEADER
Loading…
Cancel
Save