LSST Applications g0fba68d861+5616995c1c,g1ebb85f214+2420ccdea7,g1fd858c14a+44c57a1f81,g21d47ad084+8e51fce9ac,g262e1987ae+1a7d68eb3b,g2cef7863aa+3bd8df3d95,g35bb328faa+fcb1d3bbc8,g36ff55ed5b+2420ccdea7,g47891489e3+5c6313fe9a,g53246c7159+fcb1d3bbc8,g646c943bdb+dbb9921566,g67b6fd64d1+5c6313fe9a,g6bd32b75b5+2420ccdea7,g74acd417e5+37fc0c974d,g786e29fd12+cf7ec2a62a,g86c591e316+6e13bcb9e9,g87389fa792+1e0a283bba,g89139ef638+5c6313fe9a,g90f42f885a+fce05a46d3,g9125e01d80+fcb1d3bbc8,g93e38de9ac+5345a64125,g95a1e89356+47d08a1cc6,g97be763408+bba861c665,ga9e4eb89a6+85210110a1,gb0b61e0e8e+1f27f70249,gb58c049af0+f03b321e39,gb89ab40317+5c6313fe9a,gc4e39d7843+4e09c98c3d,gd16ba4ae74+5402bcf54a,gd8ff7fe66e+2420ccdea7,gd9a9a58781+fcb1d3bbc8,gdab6d2f7ff+37fc0c974d,gde280f09ee+604b327636,ge278dab8ac+50e2446c94,ge410e46f29+5c6313fe9a,gef3c2e6661+6b480e0fb7,gf67bdafdda+5c6313fe9a,gffca2db377+fcb1d3bbc8,v29.2.0.rc1
LSST Data Management Base Package
Loading...
Searching...
No Matches
KeyBase.cc
Go to the documentation of this file.
1// -*- lsst-c++ -*-
2
3#include "boost/preprocessor/seq/for_each.hpp"
4#include "boost/preprocessor/tuple/to_seq.hpp"
5
10
11namespace lsst {
12namespace afw {
13namespace table {
14
18
19template <typename U>
21 Key<Array<U>> const *self = static_cast<Key<Array<U>> const *>(this);
22 std::vector<U> result(self->getSize());
23 typename Key<Array<U>>::ConstReference array = record[*self];
24 std::copy(array.begin(), array.end(), result.begin());
25 return result;
26}
27
28template <typename U>
29void KeyBase<Array<U>>::assignVector(BaseRecord &record, std::vector<U> const &values) const {
30 Key<Array<U>> const *self = static_cast<Key<Array<U>> const *>(this);
31 std::copy(values.begin(), values.end(), record[*self].begin());
32}
33
34template <typename U>
35Key<U> KeyBase<Array<U>>::operator[](std::size_t i) const {
36 Key<Array<U>> const *self = static_cast<Key<Array<U>> const *>(this);
37 if (self->isVariableLength()) {
39 "Cannot get Keys to elements of variable-length arrays.");
40 }
41 if (i >= self->getSize()) {
42 throw LSST_EXCEPT(lsst::pex::exceptions::LengthError, "Array key index out of range.");
43 }
44 return detail::Access::extractElement(*this, i);
45}
46
47template <typename U>
49 Key<Array<U>> const *self = static_cast<Key<Array<U>> const *>(this);
50 if (self->isVariableLength()) {
52 "Cannot get Keys to slices of variable-length arrays.");
53 }
54 if (begin > self->getSize()) {
55 throw LSST_EXCEPT(lsst::pex::exceptions::LengthError, "Array key begin index out of range.");
56 }
57 if (end > self->getSize()) {
58 throw LSST_EXCEPT(lsst::pex::exceptions::LengthError, "Array key end index out of range.");
59 }
60 return detail::Access::extractRange(*this, begin, end);
61}
62
63//----- Explicit instantiation ------------------------------------------------------------------------------
64
65#define INSTANTIATE_KEY(r, data, elem) template class KeyBase<elem>;
66
69} // namespace table
70} // namespace afw
71} // namespace lsst
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
#define INSTANTIATE_KEY(r, data, elem)
Definition KeyBase.cc:65
T begin(T... args)
Base class for all records.
Definition BaseRecord.h:31
Key< Array< U > > slice(std::size_t begin, std::size_t end) const
Return a key for a range of elements.
Definition KeyBase.cc:48
void assignVector(BaseRecord &record, std::vector< U > const &values) const
Definition KeyBase.cc:29
std::vector< U > extractVector(BaseRecord const &record) const
Definition KeyBase.cc:20
A base class for Key that allows subfield keys to be extracted for some field types.
Definition KeyBase.h:20
A class used as a handle to a particular field in a table.
Definition Key.h:53
static Key< typename Key< T >::Element > extractElement(KeyBase< T > const &kb, std::size_t n)
Definition Access.h:35
static Key< Array< T > > extractRange(KeyBase< Array< T > > const &kb, std::size_t begin, std::size_t end)
Definition Access.h:51
Reports attempts to exceed implementation-defined length limits for some classes.
Definition Runtime.h:76
Reports errors in the logical structure of the program.
Definition Runtime.h:46
T copy(T... args)
T end(T... args)
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
#define AFW_TABLE_FIELD_TYPE_N
Definition types.h:38
#define AFW_TABLE_FIELD_TYPE_TUPLE
Definition types.h:43