LSSTApplications  12.1-5-gbdcc3ab+2,15.0+13,15.0+26,15.0-1-g19261fa+17,15.0-1-g60afb23+26,15.0-1-g615e0bb+18,15.0-1-g788a293+26,15.0-1-ga91101e+26,15.0-1-gae1598d+12,15.0-1-gd076f1f+24,15.0-1-gdf18595+5,15.0-1-gf4f1c34+12,15.0-11-g7db6e543+4,15.0-12-g3681e7a+4,15.0-15-gc15de322,15.0-16-g83b84f4,15.0-2-g100d730+19,15.0-2-g1f9c9cf+4,15.0-2-g8aea5f4+1,15.0-2-gf38729e+21,15.0-29-ga12a2b06e,15.0-3-g11fe1a0+14,15.0-3-g707930d+3,15.0-3-g9103c06+12,15.0-3-gd3cbb57+3,15.0-4-g2d82b59,15.0-4-g535e784+10,15.0-4-g92ca6c3+4,15.0-4-gf906033+2,15.0-5-g23e394c+14,15.0-5-g4be42a9,15.0-6-g69628aa,15.0-6-g86e3f3d+1,15.0-6-gfa9b38f+4,15.0-7-g949993c+3,15.0-8-g67a62d3+1,15.0-8-gcf05001+1,15.0-9-g1e7c341+1,w.2018.21
LSSTDataManagementBasePackage
Persistable.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 #ifndef AFW_TABLE_IO_Persistable_h_INCLUDED
3 #define AFW_TABLE_IO_Persistable_h_INCLUDED
4 
5 #include <climits>
6 #include "lsst/base.h"
7 #include "lsst/pex/exceptions.h"
9 
10 namespace lsst {
11 namespace afw {
12 
13 namespace fits {
14 
15 class Fits;
16 class MemFileManager;
17 
18 } // namespace fits
19 
20 namespace table {
21 namespace io {
22 
23 class InputArchive;
24 class OutputArchive;
25 class OutputArchiveHandle;
26 class CatalogVector;
27 
32 
33 
40 
41 
48 #define LSST_ARCHIVE_ASSERT(EXPR) \
49  if (!(EXPR)) \
50  throw LSST_EXCEPT(lsst::afw::table::io::MalformedArchiveError, "Archive assertion failed: " #EXPR)
51 
74 class Persistable {
75 public:
83  void writeFits(std::string const& fileName, std::string const& mode = "w") const;
84 
92  void writeFits(fits::MemFileManager& manager, std::string const& mode = "w") const;
93 
99  void writeFits(fits::Fits& fitsfile) const;
100 
102  virtual bool isPersistable() const { return false; }
103 
104  virtual ~Persistable() = default;
105 
106 protected:
107  // convenient for derived classes not in afw::table::io
109 
115  virtual std::string getPersistenceName() const;
116 
125  virtual std::string getPythonModule() const;
126 
134  virtual void write(OutputArchiveHandle& handle) const;
135 
136  Persistable() = default;
137 
138  Persistable(Persistable const& other) = default;
139  Persistable(Persistable && other) = default;
140 
141  Persistable & operator=(Persistable const& other) = default;
142  Persistable & operator=(Persistable && other) = default;
143 
144 private:
145  friend class io::OutputArchive;
146  friend class io::InputArchive;
147 
148  template <typename T>
149  friend class PersistableFacade;
150 
151  static std::shared_ptr<Persistable> _readFits(std::string const& fileName, int hdu = fits::DEFAULT_HDU);
152 
153  static std::shared_ptr<Persistable> _readFits(fits::MemFileManager& manager, int hdu = fits::DEFAULT_HDU);
154 
155  static std::shared_ptr<Persistable> _readFits(fits::Fits& fitsfile);
156 };
157 
175 template <typename T>
177 public:
184  return std::dynamic_pointer_cast<T>(Persistable::_readFits(fitsfile));
185  }
186 
194  static std::shared_ptr<T> readFits(std::string const& fileName, int hdu = fits::DEFAULT_HDU) {
195  return std::dynamic_pointer_cast<T>(Persistable::_readFits(fileName, hdu));
196  }
197 
206  return std::dynamic_pointer_cast<T>(Persistable::_readFits(manager, hdu));
207  }
208 };
209 
218 protected:
219  typedef io::InputArchive InputArchive; // convenient for derived classes not in afw::table::io
221 
222 public:
234  explicit PersistableFactory(std::string const& name);
235 
237  virtual std::shared_ptr<Persistable> read(InputArchive const& archive,
238  CatalogVector const& catalogs) const = 0;
239 
247  static PersistableFactory const& lookup(std::string const& name, std::string const& module = "");
248 
249  virtual ~PersistableFactory() = default;
250 
251  // No copying
252  PersistableFactory(const PersistableFactory&) = delete;
253  PersistableFactory& operator=(const PersistableFactory&) = delete;
254 
255  // No moving
257  PersistableFactory& operator=(PersistableFactory&&) = delete;
258 };
259 }
260 }
261 }
262 } // namespace lsst::afw::table::io
263 
264 #endif // !AFW_TABLE_IO_Persistable_h_INCLUDED
An object passed to Persistable::write to allow it to persist itself.
A base class for factory classes used to reconstruct objects from records.
Definition: Persistable.h:217
virtual bool isPersistable() const
Return true if this particular object can be persisted using afw::table::io.
Definition: Persistable.h:102
A simple struct that combines the two arguments that must be passed to most cfitsio routines and cont...
Definition: fits.h:298
Fits * fits
Definition: FitsWriter.cc:90
Reports errors in external input/output operations.
Definition: Runtime.h:160
static std::shared_ptr< T > readFits(std::string const &fileName, int hdu=fits::DEFAULT_HDU)
Read an object from a regular FITS file.
Definition: Persistable.h:194
STL class.
A base class for objects that can be persisted via afw::table::io Archive classes.
Definition: Persistable.h:74
A multi-catalog archive object used to save table::io::Persistable objects.
Definition: OutputArchive.h:34
A base class for image defects.
Definition: cameraGeom.dox:3
Lifetime-management for memory that goes into FITS memory files.
Definition: fits.h:120
T dynamic_pointer_cast(T... args)
A vector of catalogs used by Persistable.
Definition: CatalogVector.h:29
Basic LSST definitions.
io::OutputArchiveHandle OutputArchiveHandle
Definition: Persistable.h:108
ItemVariant const * other
Definition: Schema.cc:55
A multi-catalog archive object used to load table::io::Persistable objects.
Definition: InputArchive.h:31
static std::shared_ptr< T > readFits(fits::Fits &fitsfile)
Read an object from an already open FITS object.
Definition: Persistable.h:183
#define LSST_EXCEPTION_TYPE(t, b, c)
Macro used to define new types of exceptions without additional data.
Definition: Exception.h:68
A CRTP facade class for subclasses of Persistable.
Definition: Persistable.h:176
An exception thrown when problems occur during persistence.
Definition: Persistable.h:31
An exception thrown when an InputArchive&#39;s contents do not make sense.
Definition: Persistable.h:39
static std::shared_ptr< T > readFits(fits::MemFileManager &manager, int hdu=fits::DEFAULT_HDU)
Read an object from a FITS file in memory.
Definition: Persistable.h:205
const int DEFAULT_HDU
Specify that the default HDU should be read.
Definition: fitsDefaults.h:18