// Copyright (C) 1999 Jean-Marc Valin
#include "DLManager.h"
using namespace std;
namespace FD {
map<string,LoadedLibrary* > DLManager::loaded;
map<string, ToolboxData> ToolboxList::loadedToolboxes;
LoadedLibrary *DLManager::getLib(const string &name)
{
cerr << "DLManager::get_lib(" << name << ")\n";
if (loaded.find(name)==loaded.end())
{
loaded[name] = new LoadedLibrary (name);
}
return loaded[name];
}
vector<string> ToolboxList::load(const vector<string> &list, int debug)
{
vector<string> remain(list);
vector<string> errors;
int lastPass;
do {
lastPass = remain.size();
errors.resize(0);
for (int i=0;i<remain.size();i++)
{
if (debug)
cerr << "Loading " << remain[i] << "... ";
DL_HANDLE_TYPE handle = _DL_OPEN(remain[i], debug);
if (handle)
{
if (debug)
cerr << "[OK]" << endl;
loadedToolboxes[remain[i]] = ToolboxData(remain[i], handle);
//FIXME: append toolbox to list.
} else {
if (debug)
cerr << "[Error]" << endl;
errors.push_back(remain[i]);
}
}
remain = errors;
if (debug)
cerr << remain.size() << " errors in pass" << endl;
} while (remain.size() != 0 && remain.size() != lastPass);
return errors;
}
}//namespace FD
syntax highlighted by Code2HTML, v. 0.9.1