Beispiel #1
0
bool WindowsFilesystemNode::create(bool isDirectory) {
	bool success;

	if (isDirectory) {
		success = CreateDirectory(toUnicode(_path.c_str()), NULL) != 0;
	} else {
		success = CreateFile(toUnicode(_path.c_str()), GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) != INVALID_HANDLE_VALUE;
	}

	if (success) {
		//this piece is copied from constructor, it checks that file exists and detects whether it's a directory
		DWORD fileAttribs = GetFileAttributes(toUnicode(_path.c_str()));
		if (fileAttribs != INVALID_FILE_ATTRIBUTES) {
			_isDirectory = ((fileAttribs & FILE_ATTRIBUTE_DIRECTORY) != 0);
			_isValid = true;
			// Add a trailing slash, if necessary.
			if (_isDirectory && _path.lastChar() != '\\') {
				_path += '\\';
			}

			if (_isDirectory != isDirectory) warning("failed to create %s: got %s", isDirectory ? "directory" : "file", _isDirectory ? "directory" : "file");
			return _isDirectory == isDirectory;
		}

		warning("WindowsFilesystemNode: Create%s() was a success, but GetFileAttributes() indicates there is no such %s",
			    isDirectory ? "Directory" : "File", isDirectory ? "directory" : "file");
		return false;
	}

	return false;
}
Beispiel #2
0
void QueryResultsNode::doRemove(INodeView *view, const QModelIndex &index, QueryResultValueItem *value)
{
    if (m_container.transaction())
    {
        QueryResultPropertyItem *property = static_cast<QueryResultPropertyItem*>(value->parent());

        if (m_container.removeValue(static_cast<QueryResultRootItem *>(property->parent())->value(), value->value()))
            if (m_container.commit())
            {
                beginRemoveRows(Model::parent(index), index.row(), index.row());
                property->remove(index.row());
                endRemoveRows();
            }
            else
            {
                QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));
                m_container.rollback();
            }
        else
        {
            QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));
            m_container.rollback();
        }
    }
    else
    {
        QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));
        m_container.rollback();
    }
}
void ListEntityDialog::removeEntity(const QModelIndex &index)
{
    if (m_container->transaction())
    {
        if (QMessageBox::question(this,
                              tr("Remove entity"),
                              tr("Do you really want to remove entity \"%1\"?").
                              arg(toUnicode(static_cast<EntitiesTreeItem *>(index.internalPointer())->entity().name())),
                              QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
            if (m_container->removeEntity(static_cast<EntitiesTreeItem *>(index.internalPointer())->entity()))
                if (m_container->commit())
                    m_model.remove(index);
                else
                {
                    m_container->rollback();
                    QMessageBox::critical(this, tr("Error"), toUnicode(m_container->lastError()));
                }
            else
            {
                m_container->rollback();
                QMessageBox::critical(this, tr("Error"), toUnicode(m_container->lastError()));
            }
    }
    else
        QMessageBox::critical(this, tr("Error"), toUnicode(m_container->lastError()));
}
Beispiel #4
0
void QueryResultsNode::performRemove(const BaseTask::Event *e)
{
    typedef const PerformRemoveTask::Event *Event;
    QueryResultPropertyItem::size_type idx;
    Event event = static_cast<Event>(e);
    QueryResultPropertyItem *property;
    QModelIndex modelIdx;

    if (m_container.transaction())
    {
        bool ok = true;

        for (Snapshot::const_iterator i = event->snapshot.begin(), end = event->snapshot.end(); i != end; ++i)
            if ((*i).second == NULL || (*i).second->isRemoved())
            {
                property = static_cast<QueryResultPropertyItem *>((*i).first->parent());

                if (m_container.removeValue(static_cast<QueryResultRootItem *>(property->parent())->value(), (*i).first.as<QueryResultRootPathValueItem>()->value()))
                {
                    idx = property->indexOf((*i).first.data());

                    beginRemoveRows(index(property), idx, idx);
                    property->remove(idx);
                    endRemoveRows();
                }
                else
                {
                    QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));
                    m_container.rollback();
                    ok = false;
                    break;
                }
            }

        if (ok)
            if (!m_container.commit())
            {
                QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));
                m_container.rollback();
            }
    }
    else
        QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));

    for (Snapshot::const_iterator i = event->snapshot.begin(), end = event->snapshot.end(); i != end; ++i)
        if ((*i).second && !(*i).second->isRemoved())
        {
            (*i).first.as<QueryResultValueItem>()->unlock();
            modelIdx = index((*i).first.data());
            emit dataChanged(modelIdx, modelIdx);
        }

    removeAllTaskLinks(event->task);
}
void ListEntityDialog::createEntity()
{
    CreateEntityDialog dialog(m_container, QString(), this);

    if (dialog.exec() == CreateEntityDialog::Accepted)
    {
        if (m_container->transaction())
        {
            Entity entity(m_container->createEntity(dialog.type(), dialog.name(), dialog.title()));

            if (entity.isValid())
                if (entity.type() == Entity::Composite)
                {
                    bool ok = true;

                    for (CreateEntityDialog::size_type i = 0, size = dialog.size(); i < size; ++i)
                        if (!m_container->addProperty(entity, dialog.property(i), dialog.propertyName(i)))
                        {
                            ok = false;
                            QMessageBox::critical(this, tr("Error"), toUnicode(m_container->lastError()));
                            break;
                        }

                    if (ok)
                        if (m_container->commit())
                            m_model.add(entity);
                        else
                        {
                            m_container->rollback();
                            QMessageBox::critical(this, tr("Error"), toUnicode(m_container->lastError()));
                        }
                }
                else
                    if (m_container->commit())
                        m_model.add(entity);
                    else
                    {
                        m_container->rollback();
                        QMessageBox::critical(this, tr("Error"), toUnicode(m_container->lastError()));
                    }
            else
            {
                m_container->rollback();
                QMessageBox::critical(this, tr("Error"), toUnicode(m_container->lastError()));
            }
        }
        else
            QMessageBox::critical(this, tr("Error"), toUnicode(m_container->lastError()));
    }
}
Beispiel #6
0
void BrowserNode::update_stereotype(bool rec) {
  BasicData * data = get_data();
  
  if (data != 0) {
    const char * stereotype = data->get_stereotype();
    
    if (show_stereotypes && stereotype[0]) {
      QString s = toUnicode(stereotype);
      int index = s.find(':');
      
      setText(0,
	      "<<" + ((index == -1) ? s : s.mid(index + 1))
	      + ">> " + name);
    }
    else
      setText(0, (const char *) name);
  }
  
  if (rec) {
    Q3ListViewItem * child;
    
    for (child = firstChild(); child != 0; child = child->nextSibling())
      ((BrowserNode *) child)->update_stereotype(TRUE);
  }
}
QVariant CompositeValuePropertyItem::data(qint32 column, qint32 role) const
{
    if (role == Qt::DisplayRole)
        return toUnicode(m_property.name);
    else
        return QVariant();
}
Beispiel #8
0
void TextCanvas::open() {
    static QSize sz;

    // warning : 'note' is already unicode
    QString s = fromUnicode(text);
    bool created = s.isEmpty();

    MLEDialog::get(s, QCursor::pos(), sz);

    if (s.isEmpty())
        delete_it();
    else {
        text = toUnicode(s);

        if (created) {
            QFontMetrics fm(the_canvas()->get_font(UmlNormalFont));
            QSize sz = fm.size(0, text);

            DiagramCanvas::resize(sz.width(), sz.height());
        }

        // force son reaffichage
        hide();
        show();
    }
    canvas()->update();

    package_modified();
}
Beispiel #9
0
int DeploymentNodeCanvas::min_width() {
  QFontMetrics fm(the_canvas()->get_font(UmlNormalFont));
  
  int wi;
  
  if (horiz)
    wi = fm.width(iname + ":" + browser_node->get_name());
  else {
    wi = fm.width(browser_node->get_name());
    
    int iw = fm.width(iname + ":");
    
    if (iw > wi)
      wi = iw;
  }
  
  const char * st = browser_node->get_data()->get_short_stereotype();
  
  if (st[0]) {
    int stw = fm.width(QString("<<") + toUnicode(st) + ">>");
    
    if (wi < stw)
      wi = stw;
  }
  
  wi += (int) ((DEPLOYMENTNODE_CANVAS_ADDED + 8) * the_canvas()->zoom());
  
  int min_w = (int) (DEPLOYMENTNODE_CANVAS_MIN_SIZE * the_canvas()->zoom());
  
  return (wi < min_w)
    ? min_w
    : wi;
}
Beispiel #10
0
void XmlElement::setText(const string& text) {
    assert(doc != NULL && "Attempt to create text on a root node");
    DOMNode* first = base->getFirstChild();
    bool found = false;
    while(first && !found) {
        if (first->getNodeType() == 3) {
            first->setTextContent(toUnicode(text));
            found = true;
        }
        first = first->getPreviousSibling();
    }
    if (!found) {
        DOMText* textNode = doc->createTextNode(toUnicode(text));
        base->appendChild(textNode);
    }
}
Beispiel #11
0
SubjectCanvas * SubjectCanvas::read(char * & st, UmlCanvas * canvas, char * k)
{
  if (!strcmp(k, "subject_ref"))
    return (SubjectCanvas *) dict_get(read_id(st), "subject", canvas);
  else if (!strcmp(k, "subject")) {
    int id = read_id(st);
    SubjectCanvas * result = new SubjectCanvas(canvas, 0, 0, id);
    
    result->name = toUnicode(read_string(st));
    
    k = read_keyword(st);
    read_color(st, "color", result->itscolor, k);
    
    if (strcmp(k, "xyzwh"))
      wrong_keyword(k, "xyzwh");
    
    read_xyzwh(st, result);
    result->check_size();
    result->width_scale100 = result->width();
    result->height_scale100 = result->height();
    result->set_center100();
    result->show();
    return result;
  }
  else
    return 0;
}
Beispiel #12
0
void CsvIm::loadFile()
{
	QString text = "";
	QByteArray rawText;
	if (loadRawText(filename, rawText))
		text = toUnicode(rawText);
	QStringList lines = text.split("\n", QString::SkipEmptyParts);
	uint i;
	if (hasHeader)
	{
		colIndex = 0;
		parseLine(lines[0], true);
		header += "\n";
		colCount = colIndex;
		i = 1;
		++rowNumber;
	}
	else
		i = 0;
	for (int i2 = i; i2 < lines.size(); ++i2)
	{
		colIndex = 0;
		parseLine(lines[i2], false);
		data += "\n";
		++rowNumber;
		if (colCount < colIndex)
			colCount = colIndex;
	}
}
Beispiel #13
0
WindowsFilesystemNode::WindowsFilesystemNode(const Common::String &p, const bool currentDir) {
	if (currentDir) {
		char path[MAX_PATH];
		GetCurrentDirectory(MAX_PATH, path);
		_path = path;
	} else {
		assert(p.size() > 0);
		_path = p;
	}

	_displayName = lastPathComponent(_path, '\\');

	// Check whether it is a directory, and whether the file actually exists
	DWORD fileAttribs = GetFileAttributes(toUnicode(_path.c_str()));

	if (fileAttribs == INVALID_FILE_ATTRIBUTES) {
		_isDirectory = false;
		_isValid = false;
	} else {
		_isDirectory = ((fileAttribs & FILE_ATTRIBUTE_DIRECTORY) != 0);
		_isValid = true;
		// Add a trailing slash, if necessary.
		if (_isDirectory && _path.lastChar() != '\\') {
			_path += '\\';
		}
	}
	_isPseudoRoot = false;
}
Beispiel #14
0
string ustring::toUTF8()
{
	WCHAR* unicodedata = toUnicode();
	string retval = unicode_to_utf8(unicodedata, m_vData.size()*2);
	Game_SAFE_DELETE_ARRAY(unicodedata);
	return retval;	
}
Beispiel #15
0
void QueryResultsNode::create(const QModelIndex &index, INodeView *view)
{
    if (static_cast<QueryResultItem *>(index.internalPointer())->isProperty())
    {
        QueryResultPropertyItem *item = static_cast<QueryResultPropertyItem *>(index.internalPointer());

        if (m_container.transaction())
        {
            EntityValueReader reader(m_container.entityValues(item->property().entity));
            SelectableValueListDialog dialog(m_container, reader, Application::mainWindow());

            if (dialog.exec() == SelectableValueListDialog::Accepted)
            {
                EntityValue value = dialog.takeValue();

                if (m_container.addValue(static_cast<QueryResultRootItem *>(item->parent())->value(), value))
                    if (m_container.commit())
//                        if (item->property().entity.type() == Database::Path)
//                        {
//                            beginInsertRows(index, item->size(), item->size());
//                            static_cast<QueryResultPathPropertyItem *>(item)->add(m_container.container(), value);
//                            endInsertRows();
//                        }
//                        else
                        {
                            beginInsertRows(index, item->size(), item->size());
                            item->add(value);
                            endInsertRows();
                        }
                    else
                    {
                        QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));
                        m_container.rollback();
                    }
                else
                {
                    QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));
                    m_container.rollback();
                }
            }
            else
                m_container.rollback();
        }
        else
            QMessageBox::critical(Application::mainWindow(), tr("Error"), toUnicode(m_container.lastError()));
    }
}
Beispiel #16
0
void UseCaseData::read(char * & st, char * & k) {
  if (!strcmp(k, "extension_points")) {
    extension_points = toUnicode(read_string(st));
    k = read_keyword(st);
  }
  
  BasicData::read(st, k);	// updates k
}
QVariant QueryConstraintsModel::data(BaseConstraint *item, int column, int role) const
{
    switch (column)
    {
    case 0:
    {
        if (role == Qt::DisplayRole)
            if (item->isGroup())
                switch (static_cast<GroupConstraint *>(item)->type())
                {
                case LiquidDb::GroupConstraint::And:
                    return m_andTypeLabel;

                case LiquidDb::GroupConstraint::Or:
                    return m_orTypeLabel;
                }
            else
                return QString::fromLatin1("%1 %2 \"%3\"").
                       arg(toUnicode(static_cast<ValueConstraint *>(item)->property().name)).
                       arg(toUnicode(Constraint::operatorToString(static_cast<ValueConstraint*>(item)->op()))).
                       arg(toUnicode(static_cast<ValueConstraint *>(item)->value().value().asString()));

        break;
    }

    case 1:
    {
        if (item->isGroup())
            switch (role)
            {
            case Qt::DisplayRole:
                return toUnicode(LiquidDb::GroupConstraint::operatorToString(static_cast<GroupConstraint *>(item)->type()));

            case Qt::TextAlignmentRole:
                return Qt::AlignCenter;
            }

        break;
    }

    default:
        break;
    }

    return QVariant();
}
 String StringUtils::toUnicode(const uint8_t* utf8, int32_t length)
 {
     if (length == 0)
         return L"";
     CharArray unicode(CharArray::newInstance(length));
     int32_t result = toUnicode(utf8, length, unicode);
     return String(unicode.get(), result);
 }
EntityValueDialog::EntityValueDialog(const Interface::Adaptor<IStorage> &storage, const EntityValue &value, const ValueModel::Files &files, QWidget *parent) :
    NestedPlainDialog(parent),
    m_handler(this),
    m_mainWidget(storage, value, files, &m_handler, this)
{
    init(toQRect(storage->editorGeometry(m_mainWidget.entity())));
    setWindowTitle(tr("Editing value of \"%1\"").arg(toUnicode(m_mainWidget.entity().name())));
}
EntityValueDialog::EntityValueDialog(const Interface::Adaptor<IStorage> &storage, const EntityValueReader &reader, QWidget *parent) :
    NestedPlainDialog(parent),
    m_handler(this),
    m_mainWidget(storage, reader, &m_handler, this)
{
    init(toQRect(storage->listGeometry(m_mainWidget.entity())));
    setWindowTitle(tr("Values of \"%1\"").arg(toUnicode(m_mainWidget.entity().name())));
}
static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
                            const embeddedDriverPrivate* p)
{
    const char *cerr = p->mysql ? mysql_error(p->mysql) : 0;
    return QSqlError(QLatin1String("embedded: ") + err,
                     p->tc ? toUnicode(p->tc, cerr) : QString::fromLatin1(cerr),
                     type, mysql_errno(p->mysql));
}
Beispiel #22
0
void InfoCanvas::set(QString s) {
  s = toUnicode(s);

  if (s != note) {
    note = s;
    modified();
  }
}
Beispiel #23
0
ConstraintTable::ConstraintTable(QWidget * parent, ConstraintCanvas * c)
    : Q3Table(c->elements.count(), 4, parent)
{
    setSorting(true);
    setSelectionMode(NoSelection);
    setRowMovingEnabled(FALSE);

    horizontalHeader()->setLabel(0, TR("visible"));
    horizontalHeader()->setLabel(1, " ");
    horizontalHeader()->setLabel(2, TR("element"));
    horizontalHeader()->setLabel(3, TR("constraint"));
    setColumnStretchable(0, FALSE);
    setColumnStretchable(1, FALSE);

    int row;
    bool v = c->indicate_visible;
    Q3ValueList<BrowserNode *> & hv = c->hidden_visible;
    BrowserNodeList & elts = c->elements;
    BrowserNode * bn;
    QString yes = TR("  yes");
    QString empty;

    elts.sort();

    for (bn = elts.first(), row = 0; bn != 0; bn = elts.next(), row += 1) {
        if ((v) ? hv.findIndex(bn) != -1 : hv.findIndex(bn) == -1)
            setText(row, 0, yes);

        setPixmap(row, 1, *(bn->pixmap(0)));

        TableItem * ti;

        ti = new TableItem(this, Q3TableItem::Never, bn->full_name(TRUE));
        ti->setReplaceable(FALSE);
        setItem(row, 2, ti);

        QString s = toUnicode(bn->constraint());
        int n = s.count('\n');

        ti = new TableItem(this, Q3TableItem::Never, s);
        ti->setReplaceable(FALSE);
        setItem(row, 3, ti);

        if (n != 0) {
            // note : adjustRow(row) does nothing
            setRowHeight(row, rowHeight(row) * (n + 1));
        }
    }

    adjustColumn(0);
    adjustColumn(1);
    setColumnStretchable(2, TRUE);
    setColumnStretchable(3, TRUE);

    connect(this, SIGNAL(pressed(int, int, int, const QPoint &)),
            this, SLOT(button_pressed(int, int, int, const QPoint &)));
}
Beispiel #24
0
void ArtifactCanvas::compute_size() {
  used_color = (itscolor == UmlDefaultColor)
    ? the_canvas()->browser_diagram()->get_color(UmlArtifact)
    : itscolor;
  
  const BasicData * data = browser_node->get_data();
  QFontMetrics fm(the_canvas()->get_font(UmlNormalBoldFont));
  int he;
  int wi;
  
  const QPixmap * px = 
    ProfiledStereotypes::diagramPixmap(data->get_stereotype(),
				       the_canvas()->zoom());
  
  if (px != 0) {
    wi = fm.width(browser_node->get_name());
    if (wi < px->width())
      wi = px->width();
    
    he = px->height() + fm.height();
  }
  else {
    // <<artifact>>/stereotype on 2*font_height with the icon on the right
    // the icon height = 2*font_height
    // the icon width = 3*height/4
    // name on font_height+4 points
    const int four = (int) (4 * the_canvas()->zoom());
    int stw = fm.width((data->get_stereotype()[0])
		       ? (QString("<<") + toUnicode(data->get_short_stereotype()) + ">>")
		       : QString("<<artifact>>"))
      + 3*fm.height();
    
    
    he = 3*fm.height() + four;
    wi = fm.width(browser_node->get_name());
    
    if (wi < stw)
      wi = stw;
    
    wi += four*2;
    
    int min_w = (int) (ARTIFACT_CANVAS_MIN_SIZE * the_canvas()->zoom());
    
    if (wi <min_w) 
      wi = min_w;
    
    if (used_color != UmlTransparent) {
      const int shadow = the_canvas()->shadow();
      
      wi += shadow;
      he += shadow;
    }
  }
  
  // force odd width and height for line alignment
  DiagramCanvas::resize(wi | 1, he | 1);
}
Beispiel #25
0
bool FileItem::refresh(const Interface::Adaptor<IStorage> &storage)
{
    if (!m_file.isValid())
    {
        m_file = storage->file()->as<IDirectory>()->entry(value().value().asString());

        if (m_file.isValid())
        {
            m_name = toUnicode(m_file->as<IEntry>()->title());
            m_icon.addFile(toUnicode(m_file->as<IEntry>()->type()->icon()->as<IEntry>()->location()), QSize(16, 16));
            m_toolTip = toUnicode(m_file->as<IEntry>()->type()->name());

            return true;
        }
    }

    return false;
}
Beispiel #26
0
void ComponentDialog::init_uml_tab()
{
    bool visit = !hasOkButton();

    BrowserComponent * bn = (BrowserComponent *) data->get_browser_node();
    VVBox * vbox;
    GridBox * grid = new GridBox(2, this);

    umltab = grid;
    grid->setMargin(5);
    grid->setSpacing(5);

    grid->addWidget(new QLabel(tr("name : "), grid));
    grid->addWidget(edname = new LineEdit(bn->get_name(), grid));
    edname->setReadOnly(visit);

    grid->addWidget(new QLabel(tr("stereotype : "), grid));
    grid->addWidget(edstereotype = new QComboBox(grid));
    edstereotype->setEditable(true);
    edstereotype->addItem(toUnicode(data->get_stereotype()));

    if (! visit) {
        edstereotype->addItems(BrowserComponent::default_stereotypes());
        edstereotype->addItems(ProfiledStereotypes::defaults(UmlComponent));
        edstereotype->setAutoCompletion(completion());
    }

    edstereotype->setCurrentIndex(0);
    QSizePolicy sp = edstereotype->sizePolicy();
    sp.setHorizontalPolicy(QSizePolicy::Expanding);
    edstereotype->setSizePolicy(sp);

    grid->addWidget(vbox = new VVBox(grid));
    vbox->addWidget(new QLabel(tr("description :"), vbox));

    if (! visit)
    {
        SmallPushButton* sButton;
        connect(sButton = new SmallPushButton(tr("Editor"), vbox), SIGNAL(clicked()),
                this, SLOT(edit_description()));
        vbox->addWidget(sButton);
    }

    grid->addWidget(comment = new MultiLineEdit(grid));
    comment->setReadOnly(visit);
    comment->setText(bn->get_comment());
    QFont font = comment->font();

    if (! hasCodec())
        font.setFamily("Courier");

    font.setFixedPitch(TRUE);
    comment->setFont(font);

    addTab(grid, "Uml");
}
Beispiel #27
0
void SubjectCanvas::open() {
  BooL ok;
  QString s = MyInputDialog::getText(TR("Subject dialog"), TR("subject : "),
				     fromUnicode(name), ok);
  
  if (ok) {
    name = toUnicode(s);
    modified();
  }
}
Beispiel #28
0
void KeyValuesTable::remove(const char * key) {
  QString ks = toUnicode(key);
  int index;
  
  for (index = 0; index != numRows(); index += 1) {
    if (text(index, 0) == ks) {
      delete_row(index);
      break;
    }
  }  
}
static QSqlField qToField(MYSQL_FIELD *field, QTextCodec *tc)
{
    QSqlField f(toUnicode(tc, field->name),
                qDecodeMYSQLType(int(field->type), field->flags));
    f.setRequired(IS_NOT_NULL(field->flags));
    f.setLength(field->length);
    f.setPrecision(field->decimals);
    f.setSqlType(field->type);
    f.setAutoValue(field->flags & AUTO_INCREMENT_FLAG);
    return f;
}
Beispiel #30
0
	virtual VoidFunc findSymbol(const char *symbol) {
		#ifndef _WIN32_WCE
		FARPROC func = GetProcAddress((HMODULE)_dlHandle, symbol);
		#else
		FARPROC func = GetProcAddress((HMODULE)_dlHandle, toUnicode(symbol));
		#endif
		if (!func)
			debug("Failed loading symbol '%s' from plugin '%s'", symbol, _filename.c_str());

		return (void (*)())func;
	}