14ConnectorFactory* ConnectorFactory::s_factory = 0;
15std::mutex ConnectorFactory::connector_mutex;
17ConnectorFactory::ConnectorFactory()
19 reg(
"MassFlowController",
20 [](shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
21 {
return new MassFlowController(r0, r1, name); });
22 reg(
"PressureController",
23 [](shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
24 {
return new PressureController(r0, r1, name); });
26 [](shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
27 {
return new Valve(r0, r1, name); });
29 [](shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
30 {
return new Wall(r0, r1, name); });
33ConnectorFactory* ConnectorFactory::factory() {
34 std::unique_lock<std::mutex> lock(connector_mutex);
36 s_factory =
new ConnectorFactory;
42 std::unique_lock<std::mutex> lock(connector_mutex);
49 shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
51 return shared_ptr<ConnectorNode>(
52 ConnectorFactory::factory()->create(model, r0, r1, name));
57 shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
59 auto dev = std::dynamic_pointer_cast<FlowDevice>(
63 "Detected incompatible ConnectorNode type '{}'", model);
70 shared_ptr<ReactorBase> r0, shared_ptr<ReactorBase> r1,
const string& name)
72 auto wall = std::dynamic_pointer_cast<WallBase>(
76 "Detected incompatible ConnectorNode type '{}'", model);
Header file for base class WallBase.
Base class for exceptions thrown by Cantera classes.
void deleteFactory() override
Virtual abstract function that deletes the factory.
void reg(const string &name, function< ConnectorNode *(Args...)> f)
Register a new object construction function.
Some flow devices derived from class FlowDevice.
shared_ptr< FlowDevice > newFlowDevice(const string &model, shared_ptr< ReactorBase > r0, shared_ptr< ReactorBase > r1, const string &name)
Create a FlowDevice object of the specified type.
shared_ptr< WallBase > newWall(const string &model, shared_ptr< ReactorBase > r0, shared_ptr< ReactorBase > r1, const string &name)
Create a WallBase object of the specified type.
shared_ptr< ConnectorNode > newConnectorNode(const string &model, shared_ptr< ReactorBase > r0, shared_ptr< ReactorBase > r1, const string &name)
Create a ConnectorNode object of the specified type.
Namespace for the Cantera kernel.