cantera/Cantera/src/KineticsFactory.h

91 lines
1.8 KiB
C++

/**
* @file KineticsFactory.h
*/
/*
* $Author$
* $Revision$
* $Date$
*/
// Copyright 2001 California Institute of Technology
#ifndef KINETICS_FACTORY_H
#define KINETICS_FACTORY_H
#include "Kinetics.h"
#include "xml.h"
namespace Cantera {
class UnknownKineticsModel : public CanteraError {
public:
UnknownKineticsModel(string proc, string kineticsModel) :
CanteraError(proc, "Specified Kinetics model "
+ kineticsModel +
" does not match any known type.") {}
virtual ~UnknownKineticsModel() {}
};
/**
* Factory for kinetics managers.
*/
class KineticsFactory {
public:
static KineticsFactory* factory() {
if (!s_factory) s_factory = new KineticsFactory;
return s_factory;
}
virtual ~KineticsFactory() {
delete s_factory;
s_factory = 0;
}
/**
* Create a new kinetics manager.
*/
virtual Kinetics* newKinetics(XML_Node& phase,
vector<ThermoPhase*> th);
virtual Kinetics* newKinetics(string model);
private:
static KineticsFactory* s_factory;
KineticsFactory(){}
};
/**
* Create a new kinetics manager.
*/
inline Kinetics* newKineticsMgr(XML_Node& phase,
vector<ThermoPhase*> th, KineticsFactory* f=0) {
if (f == 0) {
f = KineticsFactory::factory();
}
Kinetics* kin = f->newKinetics(phase, th);
return kin;
}
/**
* Create a new kinetics manager.
*/
inline Kinetics* newKineticsMgr(string model, KineticsFactory* f=0) {
if (f == 0) {
f = KineticsFactory::factory();
}
Kinetics* kin = f->newKinetics(model);
return kin;
}
}
#endif