8 #include "boost/format.hpp"
31 typedef Map::value_type MapItem;
44 if (
iter->getSchema().compare(
schema, flags) == flags) {
51 if (!
iter->getTable()->getMetadata()) {
53 iter->getTable()->setMetadata(metadata);
54 metadata->set(
"EXTTYPE",
"ARCHIVE_DATA");
55 metadata->set(
"AR_CATN", catArchive,
"# of this catalog relative to the start of this archive");
62 indexRecord->set(indexKeys.id,
id);
63 indexRecord->set(indexKeys.name,
name);
64 indexRecord->set(indexKeys.module,
module);
70 indexRecord->set(indexKeys.nRows, 0);
79 indexRecord->set(indexKeys.catPersistable, catPersistable);
80 indexRecord->set(indexKeys.nRows, catalog.
size());
90 "All catalogs passed to saveCatalog must be created by makeCatalog");
95 auto names =
iter->getTable()->getMetadata()->getArray<
std::string>(
"AR_NAME");
96 if (
std::find(names.begin(), names.end(),
name) == names.end()) {
97 iter->getTable()->getMetadata()->add(
"AR_NAME",
name,
"Class name for objects stored here");
100 iter->getTable()->getMetadata()->add(
"AR_NAME",
name,
"Class name for objects stored here");
102 indexRecord->set(indexKeys.row0,
iter->size());
103 indexRecord->set(indexKeys.catArchive, catArchive);
119 if (permissive && !obj->isPersistable())
return 0;
124 return put(obj.
get(),
self, permissive);
128 return r.first->second;
134 "# of catalogs in this archive, including the index");
138 iter->writeFits(fitsfile);
144 metadata->set(
"EXTTYPE",
"ARCHIVE_INDEX");
145 metadata->set(
"AR_CATN", 0,
"# of this catalog relative to the start of this archive");
173 if (!_impl.unique()) {
177 return _impl->put(obj, _impl, permissive);
181 if (!_impl.unique()) {
185 return _impl->put(
std::move(obj), _impl, permissive);
191 if (n == 0)
return _impl->_index;
192 if (
std::size_t(n) > _impl->_catalogs.size() || n < 0) {
195 (
boost::format(
"Catalog number %d is out of range [0,%d]") % n % _impl->_catalogs.size())
198 return _impl->_catalogs[n - 1];
212 _impl->saveCatalog(catalog, _id, _name, _module, _catPersistable);
219 return _impl->put(obj, _impl, permissive);
225 return _impl->put(
std::move(obj), _impl, permissive);
230 : _id(
id), _catPersistable(0), _name(
name), _module(
module), _impl(impl) {}
table::Key< std::string > name
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
ItemVariant const * other
A simple struct that combines the two arguments that must be passed to most cfitsio routines and cont...
std::shared_ptr< RecordT > addNew()
Create a new record, add it to the end of the catalog, and return a pointer to it.
size_type size() const
Return the number of elements in the catalog.
iterator begin()
Iterator access.
std::shared_ptr< Table > getTable() const
Return the table associated with the catalog.
void writeFits(std::string const &filename, std::string const &mode="w", int flags=0) const
Write a FITS binary table to a regular file.
Defines the fields and offsets for a table.
@ EQUAL_NAMES
Fields have the same names (ordered).
@ EQUAL_KEYS
Keys have the same types offsets, and sizes.
A vector of catalogs used by Persistable.
int put(Persistable const *obj, std::shared_ptr< Impl > const &self, bool permissive)
BaseCatalog makeCatalog(Schema const &schema)
int put(std::shared_ptr< Persistable const > obj, std::shared_ptr< Impl > const &self, bool permissive)
void writeFits(fits::Fits &fitsfile)
void saveEmpty(int id, std::string const &name, std::string const &module)
void saveCatalog(BaseCatalog const &catalog, int id, std::string const &name, std::string const &module, int catPersistable)
std::shared_ptr< BaseRecord > addIndexRecord(int id, std::string const &name, std::string const &module)
An object passed to Persistable::write to allow it to persist itself.
void saveCatalog(BaseCatalog const &catalog)
Save a catalog in the archive.
OutputArchiveHandle(const OutputArchiveHandle &)=delete
void saveEmpty()
Indicate that the object being persisted has no state, and hence will never call makeCatalog() or sav...
BaseCatalog makeCatalog(Schema const &schema)
Return a new, empty catalog with the given schema.
int put(Persistable const *obj, bool permissive=false)
Save an object to the archive and return a unique ID that can be used to retrieve it from an InputArc...
A multi-catalog archive object used to save table::io::Persistable objects.
int put(std::shared_ptr< Persistable const > obj, bool permissive=false)
Save an object to the archive and return a unique ID that can be used to retrieve it from an InputArc...
void writeFits(fits::Fits &fitsfile) const
Write the archive to an already-open FITS object.
BaseCatalog const & getCatalog(int n) const
Return the nth catalog. Catalog 0 is always the index catalog.
OutputArchive & operator=(OutputArchive const &other)
Assign from another OutputArchive. Saved objects are not deep-copied.
BaseCatalog const & getIndexCatalog() const
Return the index catalog that specifies where objects are stored in the data catalogs.
OutputArchive()
Construct an empty OutputArchive containing no objects.
int countCatalogs() const
Return the total number of catalogs, including the index.
A base class for objects that can be persisted via afw::table::io Archive classes.
virtual bool isPersistable() const noexcept
Return true if this particular object can be persisted using afw::table::io.
virtual std::string getPythonModule() const
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
virtual std::string getPersistenceName() const
Return the unique name used to persist this object and look up its factory.
virtual void write(OutputArchiveHandle &handle) const
Write the object to one or more catalogs.
Class for storing ordered metadata with comments.
Reports attempts to exceed implementation-defined length limits for some classes.
Reports errors in the logical structure of the program.
Reports attempts to access elements using an invalid key.
CatalogT< BaseRecord > BaseCatalog
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
A base class for image defects.
Schema for the index catalog that specifies where objects are stored in the data catalogs.
static constexpr int const NO_CATALOGS_SAVED
Special value used for catArchive, catPersistable, and row0 when an object with no state is saved.
static ArchiveIndexSchema const & get()
Return the singleton instance.