LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Static Public Member Functions | Protected Types | List of all members
lsst::afw::table::io::PersistableFactory Class Referenceabstract

A base class for factory classes used to reconstruct objects from records. More...

#include <Persistable.h>

Inheritance diagram for lsst::afw::table::io::PersistableFactory:
lsst::afw::cameraGeom::Camera::Factory lsst::afw::cameraGeom::Detector::Factory lsst::afw::cameraGeom::DetectorCollection::Factory lsst::afw::cameraGeom::TransformMap::Factory lsst::afw::detection::FootprintFactory lsst::afw::detection::HeavyFootprint< ImagePixelT, MaskPixelT, VariancePixelT >::Factory lsst::afw::image::FilterLabel::Factory lsst::afw::math::AnalyticKernel::Factory lsst::afw::math::DeltaFunctionKernel::Factory lsst::afw::math::FixedKernel::Factory lsst::afw::math::LinearCombinationKernel::Factory lsst::meas::algorithms::CoaddBoundedField::Factory lsst::meas::algorithms::CoaddPsf::Factory lsst::meas::algorithms::KernelPsfFactory< T, K >

Public Member Functions

 PersistableFactory (std::string const &name)
 Constructor for the factory. More...
 
virtual std::shared_ptr< Persistableread (InputArchive const &archive, CatalogVector const &catalogs) const =0
 Construct a new object from the given InputArchive and vector of catalogs. More...
 
virtual ~PersistableFactory () noexcept=default
 
 PersistableFactory (const PersistableFactory &)=delete
 
PersistableFactoryoperator= (const PersistableFactory &)=delete
 
 PersistableFactory (PersistableFactory &&)=delete
 
PersistableFactoryoperator= (PersistableFactory &&)=delete
 

Static Public Member Functions

static PersistableFactory const & lookup (std::string const &name, std::string const &module="")
 Return the factory that has been registered with the given name. More...
 

Protected Types

using InputArchive = io::InputArchive
 
using CatalogVector = io::CatalogVector
 

Detailed Description

A base class for factory classes used to reconstruct objects from records.

Classes that inherit from Persistable should also subclass PersistableFactory, and instantiate exactly one instance of the derived factory with static duration (usually the class and instance are both defined in an anonymous namespace in a source file).

Definition at line 228 of file Persistable.h.

Member Typedef Documentation

◆ CatalogVector

Definition at line 231 of file Persistable.h.

◆ InputArchive

Definition at line 230 of file Persistable.h.

Constructor & Destructor Documentation

◆ PersistableFactory() [1/3]

lsst::afw::table::io::PersistableFactory::PersistableFactory ( std::string const &  name)
explicit

Constructor for the factory.

This should be called only once, and only on an object with static duration, as a pointer to the object will be put in a singleton registry.

The name must be globally unique with respect to all Persistables and be the same as Persistable::getPersistenceName(); the Python module that a Persistable may also declare is not used to resolve names, but rather just to import the module that may install the necessary factory in the registry.

Definition at line 74 of file Persistable.cc.

74 { getRegistry()[name] = this; }
table::Key< std::string > name
Definition: Amplifier.cc:116

◆ ~PersistableFactory()

virtual lsst::afw::table::io::PersistableFactory::~PersistableFactory ( )
virtualdefaultnoexcept

◆ PersistableFactory() [2/3]

lsst::afw::table::io::PersistableFactory::PersistableFactory ( const PersistableFactory )
delete

◆ PersistableFactory() [3/3]

lsst::afw::table::io::PersistableFactory::PersistableFactory ( PersistableFactory &&  )
delete

Member Function Documentation

◆ lookup()

PersistableFactory const & lsst::afw::table::io::PersistableFactory::lookup ( std::string const &  name,
std::string const &  module = "" 
)
static

Return the factory that has been registered with the given name.

If the lookup fails and module is not an empty string, we will attempt to import a Python module with that name (this will only work when the C++ is being called from Python) and try again.

Definition at line 76 of file Persistable.cc.

76  {
77  RegistryMap::const_iterator i = getRegistry().find(name);
78  if (i == getRegistry().end()) {
79  if (!module.empty()) {
80  bool success = base::ModuleImporter::import(module);
81  if (!success) {
82  throw LSST_EXCEPT(
83  pex::exceptions::NotFoundError,
85  "PersistableFactory with name '%s' not found, and import of module "
86  "'%s' failed (possibly because Python calls were not available from C++).") %
87  name % module)
88  .str());
89  }
90  i = getRegistry().find(name);
91  if (i == getRegistry().end()) {
92  throw LSST_EXCEPT(
93  pex::exceptions::LogicError,
95  "PersistableFactory with name '%s' not found even after successful import "
96  "of module '%s'. Please report this as a bug in the persistence "
97  "implementation for this object.") %
98  name % module)
99  .str());
100  }
101  } else {
102  throw LSST_EXCEPT(
103  pex::exceptions::LogicError,
104  (boost::format(
105  "PersistableFactory with name '%s' not found, and no Python module to import "
106  "was provided. Please report this as a bug in the persistence implementation "
107  "for this object.") %
108  name)
109  .str());
110  }
111  }
112  return *i->second;
113 }
int end
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
static bool import(std::string const &name)
Import the given Python module, and return true if successful.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition: history.py:174

◆ operator=() [1/2]

PersistableFactory& lsst::afw::table::io::PersistableFactory::operator= ( const PersistableFactory )
delete

◆ operator=() [2/2]

PersistableFactory& lsst::afw::table::io::PersistableFactory::operator= ( PersistableFactory &&  )
delete

◆ read()

virtual std::shared_ptr<Persistable> lsst::afw::table::io::PersistableFactory::read ( InputArchive const &  archive,
CatalogVector const &  catalogs 
) const
pure virtual

The documentation for this class was generated from the following files: