1 #include "boost/preprocessor/seq/for_each.hpp"
2 #include "boost/preprocessor/tuple/to_seq.hpp"
16 bool operator()(SchemaItem<Flag>
const &item)
const {
return item.key ==
target; }
18 explicit MatchKey(Key<Flag>
const &t) :
target(t) {}
24 bool operator()(SchemaItem<Flag>
const &item)
const {
return item.field.getName() ==
target; }
34 IntT r =
std::find_if(_items.begin(), _items.end(), MatchKey(key)) - _items.begin();
37 (boost::format(
"'%s' not found in BitsColumn") % key).str());
46 (boost::format(
"'%s' not found in BitsColumn") %
name).str());
51 BitsColumn::BitsColumn(
int size) : _array(
ndarray::allocate(size)) { _array.deep() =
IntT(0); }
62 ndarray::Manager::Ptr
const &manager_)
75 "Key is not valid (if this is a SourceCatalog, make sure slot aliases have been set up).");
77 return ndarray::external(
reinterpret_cast<T *
>(
reinterpret_cast<char *
>(_impl->buf) + key.
getOffset()),
78 ndarray::makeVector(_impl->recordCount),
79 ndarray::makeVector(
int(_impl->table->getSchema().getRecordSize() /
sizeof(T))),
88 "Key is not valid (if this is a SourceCatalog, make sure slot aliases have been set up).");
90 if (key.isVariableLength()) {
93 return ndarray::external(
94 reinterpret_cast<T *
>(
reinterpret_cast<char *
>(_impl->buf) + key.getOffset()),
95 ndarray::makeVector(_impl->recordCount, key.getSize()),
96 ndarray::makeVector(
int(_impl->table->getSchema().getRecordSize() /
sizeof(T)), 1),
100 ndarray::result_of::vectorize<detail::FlagExtractor, ndarray::Array<Field<Flag>::Element
const, 1> >
::type
105 "Key is not valid (if this is a SourceCatalog, make sure slot aliases have been set up).");
110 reinterpret_cast<char *
>(_impl->buf) + key.
getOffset()),
111 ndarray::makeVector(_impl->recordCount),
112 ndarray::makeVector(
int(_impl->table->getSchema().getRecordSize() /
119 ndarray::ArrayRef<BitsColumn::IntT, 1, 1> array = result._array.deep();
122 (boost::format(
"Too many keys passed to getBits(); %d > %d.") %
keys.size() %
136 struct ExtractFlagItems {
137 template <
typename T>
140 void operator()(SchemaItem<Flag>
const &item)
const {
items->push_back(item); }
149 ExtractFlagItems func = {&result._items};
153 (boost::format(
"Too many Flag keys in schema; %d > %d.") % result._items.size() %
157 ndarray::ArrayRef<BitsColumn::IntT, 1, 1> array = result._array.deep();
174 ndarray::Manager::Ptr
const &manager)
175 : _impl(
std::make_shared<
Impl>(table, recordCount, buf, manager)) {}
179 #define INSTANTIATE_COLUMNVIEW_SCALAR(r, data, elem) \
180 template ndarray::ArrayRef<elem, 1> const BaseColumnView::operator[](Key<elem> const &) const;
185 #define INSTANTIATE_COLUMNVIEW_ARRAY(r, data, elem) \
186 template ndarray::ArrayRef<elem, 2, 1> const BaseColumnView::operator[](Key<Array<elem> > const &) const;
table::Key< std::string > name
#define INSTANTIATE_COLUMNVIEW_SCALAR(r, data, elem)
Key< Flag > const & target
#define INSTANTIATE_COLUMNVIEW_ARRAY(r, data, elem)
std::vector< SchemaItem< Flag > > * items
#define LSST_EXCEPT(type,...)
Tag types used to declare specialized field types.
Column-wise view into a sequence of records that have been allocated contiguously.
BaseColumnView & operator=(BaseColumnView const &)
BitsColumn getBits(std::vector< Key< Flag > > const &keys) const
Return an integer array with the given Flag fields repacked into individual bits.
Schema getSchema() const
Return the schema that defines the fields.
BaseColumnView(BaseColumnView const &)
BitsColumn getAllBits() const
Return an integer array with all Flag fields repacked into individual bits.
std::shared_ptr< BaseTable > getTable() const
Return the table that owns the records.
ndarray::ArrayRef< T, 1 > const operator[](Key< T > const &key) const
Return a 1-d array corresponding to a scalar field (or subfield).
A packed representation of a collection of Flag field columns.
IntT getBit(Key< Flag > const &key) const
Key specialization for Flag.
bool isValid() const
Return true if the key was initialized to valid offset.
int getOffset() const
Return the offset in bytes of the integer element that holds this field's bit.
A class used as a handle to a particular field in a table.
bool isValid() const noexcept
Return true if the key was initialized to valid offset.
int getOffset() const noexcept
Return the offset (in bytes) of this field within a record.
void forEach(F &func) const
Apply a functor to each SchemaItem in the Schema.
SchemaItem< T > find(std::string const &name) const
Find a SchemaItem in the Schema by name.
BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_COLUMNVIEW_SCALAR, _, BOOST_PP_TUPLE_TO_SEQ(AFW_TABLE_SCALAR_FIELD_TYPE_N, AFW_TABLE_SCALAR_FIELD_TYPE_TUPLE)) BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_COLUMNVIEW_ARRAY
A base class for image defects.
Impl(std::shared_ptr< BaseTable > const &table_, int recordCount_, void *buf_, ndarray::Manager::Ptr const &manager_)
std::shared_ptr< BaseTable > table
ndarray::Manager::Ptr manager
A description of a field in a table.
A simple pair-like struct for mapping a Field (name and description) with a Key (used for actual data...
#define AFW_TABLE_ARRAY_FIELD_TYPE_TUPLE
#define AFW_TABLE_ARRAY_FIELD_TYPE_N
#define AFW_TABLE_SCALAR_FIELD_TYPE_TUPLE
#define AFW_TABLE_SCALAR_FIELD_TYPE_N