LSSTApplications  1.1.2+25,10.0+13,10.0+132,10.0+133,10.0+224,10.0+41,10.0+8,10.0-1-g0f53050+14,10.0-1-g4b7b172+19,10.0-1-g61a5bae+98,10.0-1-g7408a83+3,10.0-1-gc1e0f5a+19,10.0-1-gdb4482e+14,10.0-11-g3947115+2,10.0-12-g8719d8b+2,10.0-15-ga3f480f+1,10.0-2-g4f67435,10.0-2-gcb4bc6c+26,10.0-28-gf7f57a9+1,10.0-3-g1bbe32c+14,10.0-3-g5b46d21,10.0-4-g027f45f+5,10.0-4-g86f66b5+2,10.0-4-gc4fccf3+24,10.0-40-g4349866+2,10.0-5-g766159b,10.0-5-gca2295e+25,10.0-6-g462a451+1
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 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.
Everything is the same.
Definition: Schema.h:67
virtual void _writeRecord(BaseRecord const &record)=0
Write an individual record.
void write(ContainerT const &container)
Write records in a container to disk (or elsewhere).
Definition: Writer.h:38
#define PTR(...)
Definition: base.h:41
Write a container of records to disk (or elsewhere).
Definition: Writer.h:27
#define LSST_EXCEPT(type,...)
Definition: Exception.h:46
Base class for all records.
Definition: BaseRecord.h:27
Include files required for standard LSST Exception handling.
virtual void _finish()
Finish writing a catalog.
Definition: Writer.h:72
Base class for all tables.
Definition: BaseTable.h:44