LSSTApplications  19.0.0-14-gb0260a2+72efe9b372,20.0.0+7927753e06,20.0.0+8829bf0056,20.0.0+995114c5d2,20.0.0+b6f4b2abd1,20.0.0+bddc4f4cbe,20.0.0-1-g253301a+8829bf0056,20.0.0-1-g2b7511a+0d71a2d77f,20.0.0-1-g5b95a8c+7461dd0434,20.0.0-12-g321c96ea+23efe4bbff,20.0.0-16-gfab17e72e+fdf35455f6,20.0.0-2-g0070d88+ba3ffc8f0b,20.0.0-2-g4dae9ad+ee58a624b3,20.0.0-2-g61b8584+5d3db074ba,20.0.0-2-gb780d76+d529cf1a41,20.0.0-2-ged6426c+226a441f5f,20.0.0-2-gf072044+8829bf0056,20.0.0-2-gf1f7952+ee58a624b3,20.0.0-20-geae50cf+e37fec0aee,20.0.0-25-g3dcad98+544a109665,20.0.0-25-g5eafb0f+ee58a624b3,20.0.0-27-g64178ef+f1f297b00a,20.0.0-3-g4cc78c6+e0676b0dc8,20.0.0-3-g8f21e14+4fd2c12c9a,20.0.0-3-gbd60e8c+187b78b4b8,20.0.0-3-gbecbe05+48431fa087,20.0.0-38-ge4adf513+a12e1f8e37,20.0.0-4-g97dc21a+544a109665,20.0.0-4-gb4befbc+087873070b,20.0.0-4-gf910f65+5d3db074ba,20.0.0-5-gdfe0fee+199202a608,20.0.0-5-gfbfe500+d529cf1a41,20.0.0-6-g64f541c+d529cf1a41,20.0.0-6-g9a5b7a1+a1cd37312e,20.0.0-68-ga3f3dda+5fca18c6a4,20.0.0-9-g4aef684+e18322736b,w.2020.45
LSSTDataManagementBasePackage
BaseTable.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 #ifndef AFW_TABLE_BaseTable_h_INCLUDED
3 #define AFW_TABLE_BaseTable_h_INCLUDED
4 #include <memory>
5 
6 #include "lsst/base.h"
7 #include "ndarray/Manager.h"
8 #include "lsst/afw/table/fwd.h"
10 
11 namespace lsst {
12 namespace afw {
13 
14 namespace fits {
15 
16 class Fits;
17 
18 } // namespace fits
19 
20 namespace table {
21 
22 namespace detail {
23 
32 struct RecordData {
33  void * data;
35  ndarray::Manager::Ptr manager;
36 };
37 
38 } // namespace detail
39 
61 class BaseTable : public std::enable_shared_from_this<BaseTable> {
62 public:
64  typedef BaseRecord Record;
65 
68 
71 
74 
76  static int nRecordsPerBlock;
77 
80 
82  void setMetadata(std::shared_ptr<daf::base::PropertyList> const& metadata) { _metadata = metadata; }
83 
87  _metadata.swap(tmp);
88  return tmp;
89  }
90 
101 
109 
128 
135 
137  Schema getSchema() const { return _schema; }
138 
151  void preallocate(std::size_t nRecords);
152 
158  std::size_t getBufferSize() const;
159 
173 
174  // Tables are not assignable to prevent type slicing.
175  BaseTable& operator=(BaseTable const& other) = delete;
177 
178  virtual ~BaseTable();
179 
180 protected:
181 
196  // n.b. this is implemented in BaseRecord.h, as it requires the BaseRecord
197  // definition, and must go in a header.
198  template <typename RecordT, typename ...Args>
200 
201  virtual void handleAliasChange(std::string const& alias) {}
202 
204  virtual std::shared_ptr<BaseTable> _clone() const;
205 
208 
210  explicit BaseTable(Schema const& schema);
211 
213  BaseTable(BaseTable const& other) : _schema(other._schema), _metadata(other._metadata) {
214  if (_metadata) _metadata = std::static_pointer_cast<daf::base::PropertyList>(_metadata->deepCopy());
215  }
216  // Delegate to copy-constructor for backwards compatibility
218 
219 private:
220  friend class BaseRecord;
221  friend class io::FitsWriter;
222  friend class AliasMap;
223 
224  // Obtain raw data pointers and their managing objects for a new record.
225  detail::RecordData _makeNewRecordData();
226 
227  /*
228  * Called by BaseRecord dtor to notify the table when it is about to be destroyed.
229  *
230  * This could allow the table to reclaim that space, but that requires more bookkeeping than
231  * it's presently worth unless this was the most recently allocated record.
232  *
233  * The motivation for attempting to reclaim even some memory is not because we're paranoid
234  * about using every last bit of allocated memory efficiently - it's so we can keep
235  * records contiguous as much as possible to allow ColumnView to be used.
236  */
237  void _destroy(BaseRecord& record);
238 
239  // Return a writer object that knows how to save in FITS format. See also FitsWriter.
240  virtual std::shared_ptr<io::FitsWriter> makeFitsWriter(fits::Fits* fitsfile, int flags) const;
241 
242  // All these are definitely private, not protected - we don't want derived classes mucking with them.
243  Schema _schema; // schema that defines the table's fields
244  ndarray::Manager::Ptr _manager; // current memory block to use for new records
245  std::shared_ptr<daf::base::PropertyList> _metadata; // flexible metadata; may be null
246 };
247 
248 } // namespace table
249 } // namespace afw
250 } // namespace lsst
251 
252 #endif // !AFW_TABLE_BaseTable_h_INCLUDED
schema
table::Schema schema
Definition: Amplifier.cc:115
lsst::afw::table::BaseTable::ColumnView
BaseColumnView ColumnView
The associated ColumnView class.
Definition: BaseTable.h:67
std::string
STL class.
std::shared_ptr
STL class.
lsst::meas::algorithms.psfSelectionFromMatchList.args
list args
Definition: psfSelectionFromMatchList.py:27
lsst::afw::fits::Fits
A simple struct that combines the two arguments that must be passed to most cfitsio routines and cont...
Definition: fits.h:297
lsst::afw::table::detail::RecordData::manager
ndarray::Manager::Ptr manager
Definition: BaseTable.h:35
lsst::afw::table::BaseTable::BaseTable
BaseTable(BaseTable &&other)
Definition: BaseTable.h:217
lsst::afw
Definition: imageAlgorithm.dox:1
fwd.h
lsst::afw::table::BaseTable::_clone
virtual std::shared_ptr< BaseTable > _clone() const
Clone implementation with noncovariant return types.
Definition: BaseTable.cc:141
lsst::afw::table::Schema
Defines the fields and offsets for a table.
Definition: Schema.h:50
lsst::afw::table::BaseColumnView
Column-wise view into a sequence of records that have been allocated contiguously.
Definition: BaseColumnView.h:83
lsst::afw::table::detail::RecordData
Helper struct that contains the information passed from BaseTable to BaseRecord at construction.
Definition: BaseTable.h:32
lsst::afw::table::BaseTable
Base class for all tables.
Definition: BaseTable.h:61
lsst::afw::table::BaseTable::handleAliasChange
virtual void handleAliasChange(std::string const &alias)
Definition: BaseTable.h:201
lsst::afw::table::BaseTable::popMetadata
std::shared_ptr< daf::base::PropertyList > popMetadata()
Return the metadata and set the internal metadata to a null pointer.
Definition: BaseTable.h:85
fits
Fits * fits
Definition: FitsWriter.cc:90
lsst::afw::table::AliasMap
Mapping class that holds aliases for a Schema.
Definition: AliasMap.h:36
lsst::afw::table::BaseTable::makeRecord
std::shared_ptr< BaseRecord > makeRecord()
Default-construct an associated record.
Definition: BaseTable.h:108
base.h
other
ItemVariant const * other
Definition: Schema.cc:56
lsst::afw::table::BaseRecord
Base class for all records.
Definition: BaseRecord.h:31
lsst::afw::table::detail::RecordData::table
std::shared_ptr< BaseTable > table
Definition: BaseTable.h:34
lsst::afw::table::SchemaMapper
A mapping between the keys of two Schemas, used to copy data between them.
Definition: SchemaMapper.h:21
std::enable_shared_from_this
lsst::afw::table::BaseTable::nRecordsPerBlock
static int nRecordsPerBlock
Number of records in each memory block.
Definition: BaseTable.h:76
lsst::afw::table::BaseTable::getSchema
Schema getSchema() const
Return the table's schema.
Definition: BaseTable.h:137
lsst::afw::table::BaseTable::operator=
BaseTable & operator=(BaseTable const &other)=delete
lsst::afw::table::BaseTable::Catalog
CatalogT< Record > Catalog
Template of CatalogT used to hold records of the associated type.
Definition: BaseTable.h:70
lsst::afw::table::BaseTable::setMetadata
void setMetadata(std::shared_ptr< daf::base::PropertyList > const &metadata)
Set the flexible metadata associated with the table. May be null.
Definition: BaseTable.h:82
lsst
A base class for image defects.
Definition: imageAlgorithm.dox:1
lsst::afw::table::BaseTable::Record
BaseRecord Record
The associated record class.
Definition: BaseTable.h:64
lsst::afw::table::io::FitsWriter
Writer object for FITS binary tables.
Definition: FitsWriter.h:25
lsst::afw::table::BaseTable::preallocate
void preallocate(std::size_t nRecords)
Allocate contiguous space for new records in advance.
Definition: BaseTable.cc:111
lsst::afw::table::BaseTable::clone
std::shared_ptr< BaseTable > clone() const
Return a polymorphic deep copy of the table.
Definition: BaseTable.h:100
lsst::afw::table::BaseTable::copyRecord
std::shared_ptr< BaseRecord > copyRecord(BaseRecord const &input)
Deep-copy a record, requiring that it have the same schema as this table.
Definition: BaseTable.cc:125
mapper
SchemaMapper * mapper
Definition: SchemaMapper.cc:78
lsst::afw::table::BaseTable::getMetadata
std::shared_ptr< daf::base::PropertyList > getMetadata() const
Return the flexible metadata associated with the table. May be null.
Definition: BaseTable.h:79
lsst::afw::table::BaseTable::operator=
BaseTable & operator=(BaseTable &&other)=delete
std::size_t
Schema.h
lsst::afw::table::BaseTable::BaseTable
BaseTable(Schema const &schema)
Construct from a schema.
Definition: BaseTable.cc:149
lsst::afw::table::BaseTable::BaseTable
BaseTable(BaseTable const &other)
Copy construct.
Definition: BaseTable.h:213
lsst::afw::table::BaseTable::_makeRecord
virtual std::shared_ptr< BaseRecord > _makeRecord()
Default-construct an associated record (protected implementation).
Definition: BaseTable.cc:145
lsst::afw::table::BaseTable::constructRecord
std::shared_ptr< RecordT > constructRecord(Args &&...args)
Helper function that must be used by all _makeRecord overrides to actually construct records.
Definition: BaseRecord.h:227
lsst::afw::table::BaseTable::make
static std::shared_ptr< BaseTable > make(Schema const &schema)
Construct a new table.
Definition: BaseTable.cc:121
lsst::afw::table::BaseTable::getBufferSize
std::size_t getBufferSize() const
Return the number of additional records space has been already been allocated for.
Definition: BaseTable.cc:113
lsst::afw::table::BaseTable::ConstCatalog
CatalogT< Record const > ConstCatalog
Template of CatalogT used to hold const records of the associated type.
Definition: BaseTable.h:73
lsst::afw::table::CatalogT
A custom container class for records, based on std::vector.
Definition: Catalog.h:97
lsst::afw::table::BaseTable::~BaseTable
virtual ~BaseTable()
Definition: BaseTable.cc:155
lsst::afw::table::detail::RecordData::data
void * data
Definition: BaseTable.h:33