LSSTApplications  8.0.0.0+107,8.0.0.1+13,9.1+18,9.2,master-g084aeec0a4,master-g0aced2eed8+6,master-g15627eb03c,master-g28afc54ef9,master-g3391ba5ea0,master-g3d0fb8ae5f,master-g4432ae2e89+36,master-g5c3c32f3ec+17,master-g60f1e072bb+1,master-g6a3ac32d1b,master-g76a88a4307+1,master-g7bce1f4e06+57,master-g8ff4092549+31,master-g98e65bf68e,master-ga6b77976b1+53,master-gae20e2b580+3,master-gb584cd3397+53,master-gc5448b162b+1,master-gc54cf9771d,master-gc69578ece6+1,master-gcbf758c456+22,master-gcec1da163f+63,master-gcf15f11bcc,master-gd167108223,master-gf44c96c709
LSSTDataManagementBasePackage
Public Member Functions | Protected Member Functions | List of all members
lsst::afw::table::io::Reader Class Referenceabstract

A base class for code that reads table/record data from another source. More...

#include <Reader.h>

Inheritance diagram for lsst::afw::table::io::Reader:
lsst::afw::table::io::FitsReader

Public Member Functions

template<typename ContainerT >
ContainerT read ()
 Load an on-disk table into a container. More...
 
virtual ~Reader ()
 

Protected Member Functions

virtual boost::shared_ptr
< BaseTable
_readTable ()=0
 Create a new table of the appropriate type. More...
 
virtual boost::shared_ptr
< BaseRecord
_readRecord (boost::shared_ptr< BaseTable > const &table)=0
 Read an individual record, creating it with the given table. More...
 

Detailed Description

A base class for code that reads table/record data from another source.

An instance of Reader is associated with a particular file or other data source, and can be invoked simply by calling read() with no arguments and a template parameter that corresponds to the specialized container into which records will be loaded.

Reader provides driver code that should work for most input operations and record containers, and delegates the real work to its protected member functions. Reader does not specify how it will be constructed.

Definition at line 24 of file Reader.h.

Constructor & Destructor Documentation

virtual lsst::afw::table::io::Reader::~Reader ( )
inlinevirtual

Definition at line 66 of file Reader.h.

66 {}

Member Function Documentation

virtual boost::shared_ptr< BaseRecord > lsst::afw::table::io::Reader::_readRecord ( boost::shared_ptr< BaseTable > const &  table)
protectedpure virtual

Read an individual record, creating it with the given table.

The result may be an instance of a subclass of BaseRecord. The table will have just been loaded with _readSchema; these are separated in order to allow subclasses to delegate to base class implementations more effectively.

Implemented in lsst::afw::table::io::FitsReader.

virtual boost::shared_ptr< BaseTable > lsst::afw::table::io::Reader::_readTable ( )
protectedpure virtual

Create a new table of the appropriate type.

The result may be an instance of a subclass of BaseTable.

Implemented in lsst::afw::table::io::FitsReader.

template<typename ContainerT >
ContainerT lsst::afw::table::io::Reader::read ( )
inline

Load an on-disk table into a container.

The container must be a specialized table container (like CatalogT):

  • It must be constructable from a single table shared_ptr argument.
  • It must have an insert member function that takes an position iterator and a record shared_ptr.

Definition at line 36 of file Reader.h.

36  {
37 #if 1
38  // Work around a clang++ version 3.0 (tags/Apple/clang-211.12) bug with shared_ptr reference counts
39  PTR(typename ContainerT::Table) table;
40  {
41  PTR(BaseTable) tmpTable = _readTable();
42  table = boost::dynamic_pointer_cast<typename ContainerT::Table>(tmpTable);
43  }
44 #else
45  PTR(typename ContainerT::Table) table
46  = boost::dynamic_pointer_cast<typename ContainerT::Table>(_readTable());
47 #endif
48  if (!table) {
49  throw LSST_EXCEPT(
50  lsst::pex::exceptions::RuntimeError,
51  "Container's table type is not compatible with on-disk table type."
52  );
53  }
54  ContainerT container(table);
55  PTR(BaseRecord) record = _readRecord(table);
56  while (record) {
57  container.insert(
58  container.end(),
59  boost::static_pointer_cast<typename ContainerT::Record>(record)
60  );
61  record = _readRecord(table);
62  }
63  return container;
64  }
#define PTR(...)
Definition: base.h:41
virtual boost::shared_ptr< BaseRecord > _readRecord(boost::shared_ptr< BaseTable > const &table)=0
Read an individual record, creating it with the given table.
#define LSST_EXCEPT(type,...)
Definition: Exception.h:46
virtual boost::shared_ptr< BaseTable > _readTable()=0
Create a new table of the appropriate type.
afw::table::SourceRecord * record

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