46#ifndef MUELU_FACTORY_HPP
47#define MUELU_FACTORY_HPP
52#include "Teuchos_ENull.hpp"
53#include "Teuchos_FilteredIterator.hpp"
54#include "Teuchos_ParameterEntry.hpp"
55#include "Teuchos_ParameterList.hpp"
56#include "Teuchos_RCPDecl.hpp"
57#include "Teuchos_RCPNode.hpp"
58#include "Teuchos_StringIndexedOrderedValueObjectContainer.hpp"
59#include "Teuchos_RCP.hpp"
76#ifdef HAVE_MUELU_DEBUG
77 : multipleCallCheck_(FIRSTCALL), lastLevelID_(-1)
89 virtual void SetFactory(
const std::string& varName,
const RCP<const FactoryBase>& factory) {
90 RCP<const FactoryBase> f = factory;
95 const RCP<const FactoryBase>
GetFactory(
const std::string& varName)
const {
98 if (varName ==
"NoFactory")
107 return Teuchos::null;
114 RCP<ParameterList> paramList = rcp(
new ParameterList(list));
123 ParameterList::ConstIterator it = paramList->begin();
124 while (it != paramList->end()) {
125 it = paramList->begin();
127 for (; it != paramList->end(); it++)
128 if (paramList->isType<RCP<const FactoryBase> >(it->first))
129 paramList->remove(it->first);
141 return Teuchos::null;
150 void Input(
Level& level,
const std::string& varName,
const std::string& varParamName)
const {
155 T
Get(
Level& level,
const std::string& varName)
const {
160 T
Get(
Level& level,
const std::string& varName,
const std::string& varParamName)
const {
161 return level.
Get<T>(varName,
GetFactory(varParamName).get());
165 void Set(
Level& level,
const std::string& varName,
const T& data)
const {
166 return level.
Set<T>(varName, data,
this);
185#ifdef HAVE_MUELU_DEBUG
187 enum multipleCallCheckEnum { ENABLED, DISABLED, FIRSTCALL };
192 if (multipleCallCheck_ == FIRSTCALL && lastLevelID_ == -1)
195 multipleCallCheck_ = FIRSTCALL;
208 for (ParameterList::ConstIterator it = paramList.begin(); it != paramList.end(); it++)
209 if (paramList.isType<RCP<const FactoryBase> >(it->first)) {
210 RCP<const Factory> fact = rcp_dynamic_cast<const Factory >(paramList.get<RCP<const FactoryBase> >(it->first));
212 fact->ResetDebugData();
220 mutable multipleCallCheckEnum multipleCallCheck_;
221 static multipleCallCheckEnum multipleCallCheckGlobal_;
222 mutable int lastLevelID_;
235#define MUELU_FACTORY_SHORT
FactoryBase()
Constructor.
static void DisableMultipleCheckGlobally()
void Input(Level &level, const std::string &varName) const
void ResetDebugData() const
void DisableMultipleCallCheck() const
void Input(Level &level, const std::string &varName, const std::string &varParamName) const
static void EnableMultipleCheckGlobally()
static void DisableTimerSync()
T Get(Level &level, const std::string &varName) const
bool IsType(Level &level, const std::string &varName) const
virtual void SetFactory(const std::string &varName, const RCP< const FactoryBase > &factory)
Configuration.
virtual ~Factory()
Destructor.
void Set(Level &level, const std::string &varName, const T &data) const
bool IsAvailable(Level &level, const std::string &varName) const
virtual RCP< const ParameterList > GetValidParameterList() const
Return a const parameter list of valid parameters that setParameterList() will accept.
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Default implementation of FactoryAcceptor::GetFactory().
RCP< ParameterList > RemoveFactoriesFromList(const ParameterList &list) const
void EnableMultipleCallCheck() const
static void EnableTimerSync()
T Get(Level &level, const std::string &varName, const std::string &varParamName) const
Class that holds all level-specific information.
bool IsAvailable(const std::string &ename, const FactoryBase *factory=NoFactory::get()) const
Test whether a need's value has been saved.
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput().
bool IsType(const std::string &ename, const FactoryBase *factory=NoFactory::get())
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access)....
void Set(const std::string &ename, const T &entry, const FactoryBase *factory=NoFactory::get())
static const RCP< const NoFactory > getRCP()
Static Get() functions.
ParameterListAcceptorImpl()
virtual const Teuchos::ParameterList & GetParameterList() const
void SetParameter(const std::string &name, const ParameterEntry &entry)
Set a parameter directly as a ParameterEntry.
Namespace for MueLu classes and methods.