T& Get(const std::string& ename, const FactoryBase* factory = NoFactory::get()) { const FactoryBase* fac = GetFactory(ename, factory); // printf("(l=%d) getting \"%20s\" generated by %10p [actually, generated by %p (%43s)]\n", // levelID_, ename.c_str(), factory, fac, fac->description().c_str()); TEUCHOS_TEST_FOR_EXCEPTION(!IsKey(fac, ename), Exceptions::RuntimeError, "\"" + ename + "\" not found"); if (!IsAvailable(ename, fac)) { TEUCHOS_TEST_FOR_EXCEPTION(NumRequests(fac, ename) < 1 && GetKeepFlag(ename, fac) == 0, Exceptions::RuntimeError, "\"" << ename << "\" has not been requested (counter = " << NumRequests(fac, ename) << ", " "KeepFlag = " << GetKeepFlag(ename, fac) << "). " << std::endl << "Generating factory:" << *fac << " NoFactory = " << NoFactory::get()); fac->CallBuild(*this); Release(*fac); } TEUCHOS_TEST_FOR_EXCEPTION(!IsAvailable(ename, fac), Exceptions::RuntimeError, "MueLu::Level::Get(): factory did not produce expected output. " "\"" << ename << "\" has not been generated by " << *fac); return map_[fac][ename]->template GetData<T>(); }
//! Returns true, if data is requested by reqFactory bool IsRequested(const FactoryBase* reqFactory) const { return (NumRequests(reqFactory) > 0); }