1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
/*
SPDX-FileCopyrightText: 2007 Vladimir Kuznetsov <ks.vladimir@gmail.com>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "factory.h"
#include "world.h"
#include "solver.h"
#include "collisionsolver.h"
#include "constraintsolver.h"
namespace StepCore {
// XXX: locking
void Factory::registerMetaObject(const MetaObject* metaObject)
{
_metaObjects.insert(metaObject->className(), metaObject);
}
const MetaObject* Factory::metaObject(const QString& name) const
{
return _metaObjects.value(name, NULL);
}
Object* Factory::newObject(const QString& name) const
{
const MetaObject* metaObject = this->metaObject(name);
if(!metaObject) return nullptr;
return metaObject->newObject();
}
Item* Factory::newItem(const QString& name) const
{
const MetaObject* metaObject = this->metaObject(name);
if(!metaObject || !metaObject->inherits<Item>()) return nullptr;
return static_cast<Item*>(metaObject->newObject());
}
Solver* Factory::newSolver(const QString& name) const
{
const MetaObject* metaObject = this->metaObject(name);
if(!metaObject || !metaObject->inherits<Solver>()) return nullptr;
return static_cast<Solver*>(metaObject->newObject());
}
CollisionSolver* Factory::newCollisionSolver(const QString& name) const
{
const MetaObject* metaObject = this->metaObject(name);
if(!metaObject || !metaObject->inherits<CollisionSolver>()) return nullptr;
return static_cast<CollisionSolver*>(metaObject->newObject());
}
ConstraintSolver* Factory::newConstraintSolver(const QString& name) const
{
const MetaObject* metaObject = this->metaObject(name);
if(!metaObject || !metaObject->inherits<ConstraintSolver>()) return nullptr;
return static_cast<ConstraintSolver*>(metaObject->newObject());
}
} // namespace StepCore
|