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
Writer.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 #ifndef AFW_TABLE_IO_Writer_h_INCLUDED
3 #define AFW_TABLE_IO_Writer_h_INCLUDED
4 
5 #include <set>
6 
7 #include "lsst/base.h"
8 #include "lsst/pex/exceptions.h"
10 
11 namespace lsst { namespace afw { namespace table {
12 
13 class BaseRecord;
14 
15 namespace io {
16 
27 class Writer {
28 public:
29 
37  template <typename ContainerT>
38  void write(ContainerT const & container) {
39  std::set<PTR(BaseTable const)> tables;
40  for (typename ContainerT::const_iterator i = container.begin(); i != container.end(); ++i) {
41  if (i->getTable() != container.getTable()) tables.insert(i->getTable());
42  }
43  for (std::set<PTR(BaseTable const)>::iterator j = tables.begin(); j != tables.end(); ++j) {
44  if (
45  (**j).getSchema().compare(container.getTable()->getSchema(), Schema::IDENTICAL)
47  ) {
48  throw LSST_EXCEPT(
49  pex::exceptions::LogicError,
50  "Cannot save Catalog with heterogenous schemas"
51  );
52  }
53  }
54  _writeTable(container.getTable(), container.size());
55  for (typename ContainerT::const_iterator i = container.begin(); i != container.end(); ++i) {
56  _writeRecord(*i);
57  }
58  _finish();
59  }
60 
61  virtual ~Writer() {}
62 
63 protected:
64 
66  virtual void _writeTable(CONST_PTR(BaseTable) const & table, std::size_t nRows) = 0;
67 
69  virtual void _writeRecord(BaseRecord const & record) = 0;
70 
72  virtual void _finish() {}
73 };
74 
75 }}}} // namespace lsst::afw::table::io
76 
77 #endif // !AFW_TABLE_IO_Writer_h_INCLUDED
#define PTR(...)
Definition: base.h:41
void write(ContainerT const &container)
Write records in a container to disk (or elsewhere).
Definition: Writer.h:38
Write a container of records to disk (or elsewhere).
Definition: Writer.h:27
virtual void _writeRecord(BaseRecord const &record)=0
Write an individual record.
Include files required for standard LSST Exception handling.
#define CONST_PTR(...)
Definition: base.h:47
virtual void _writeTable(boost::shared_ptr< BaseTable const > const &table, std::size_t nRows)=0
Write a table and its schema.
#define LSST_EXCEPT(type,...)
Definition: Exception.h:46
Base class for all records.
Definition: BaseRecord.h:27
Base class for all tables.
Definition: BaseTable.h:44
virtual void _finish()
Finish writing a catalog.
Definition: Writer.h:72
afw::table::SourceRecord * record
Everything is the same.
Definition: Schema.h:65