lsst.afw
g3a5ebb7d8a+28b83bf6a5
Toggle main menu visibility
Loading...
Searching...
No Matches
src
table
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
6
#include "
lsst/afw/table/KeyBase.h
"
7
#include "
lsst/afw/table/detail/Access.h
"
8
#include "
lsst/afw/table/Flag.h
"
9
#include "
lsst/afw/table/BaseRecord.h
"
10
11
namespace
lsst
{
12
namespace
afw
{
13
namespace
table
{
14
15
Key<FieldBase<Flag>::Element
>
KeyBase<Flag>::getStorage
()
const
{
16
return
detail::Access::extractElement
(*
this
, 0);
17
}
18
19
template
<
typename
U>
20
std::vector<U>
KeyBase<Array<U>
>
::extractVector
(
BaseRecord
const
&record)
const
{
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
28
template
<
typename
U>
29
void
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
34
template
<
typename
U>
35
Key<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()) {
38
throw
LSST_EXCEPT
(
lsst::pex::exceptions::LogicError
,
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
47
template
<
typename
U>
48
Key<Array<U>
>
KeyBase<Array<U>
>
::slice
(
std::size_t
begin,
std::size_t
end)
const
{
49
Key<Array<U>
>
const
*self =
static_cast<
Key<Array<U>
>
const
*>(
this
);
50
if
(self->isVariableLength()) {
51
throw
LSST_EXCEPT
(
lsst::pex::exceptions::LogicError
,
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
67
BOOST_PP_SEQ_FOR_EACH
(
INSTANTIATE_KEY
,
_
,
68
BOOST_PP_TUPLE_TO_SEQ(
AFW_TABLE_FIELD_TYPE_N
,
AFW_TABLE_FIELD_TYPE_TUPLE
))
69
}
// namespace table
70
}
// namespace afw
71
}
// namespace lsst
Access.h
BaseRecord.h
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Flag.h
INSTANTIATE_KEY
#define INSTANTIATE_KEY(r, data, elem)
Definition
KeyBase.cc:65
KeyBase.h
std::vector::begin
T begin(T... args)
lsst::afw::table::BaseRecord
Base class for all records.
Definition
BaseRecord.h:31
lsst::afw::table::KeyBase< Array< U > >::slice
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
lsst::afw::table::KeyBase< Array< U > >::assignVector
void assignVector(BaseRecord &record, std::vector< U > const &values) const
Definition
KeyBase.cc:29
lsst::afw::table::KeyBase< Array< U > >::extractVector
std::vector< U > extractVector(BaseRecord const &record) const
Definition
KeyBase.cc:20
lsst::afw::table::KeyBase< Flag >::KeyBase
KeyBase()=default
lsst::afw::table::KeyBase
A base class for Key that allows subfield keys to be extracted for some field types.
Definition
KeyBase.h:20
lsst::afw::table::Key
A class used as a handle to a particular field in a table.
Definition
Key.h:53
lsst::afw::table::detail::Access::extractElement
static Key< typename Key< T >::Element > extractElement(KeyBase< T > const &kb, std::size_t n)
Definition
Access.h:35
lsst::afw::table::detail::Access::extractRange
static Key< Array< T > > extractRange(KeyBase< Array< T > > const &kb, std::size_t begin, std::size_t end)
Definition
Access.h:51
lsst::pex::exceptions::LengthError
lsst::pex::exceptions::LogicError
std::copy
T copy(T... args)
std::vector::end
T end(T... args)
lsst::afw::table
Definition
table.dox:3
lsst::afw::table::_
_
Definition
BaseColumnView.cc:198
lsst::afw::table::BOOST_PP_SEQ_FOR_EACH
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
lsst::afw
Definition
imageAlgorithm.dox:1
lsst
std::size_t
AFW_TABLE_FIELD_TYPE_N
#define AFW_TABLE_FIELD_TYPE_N
Definition
types.h:38
AFW_TABLE_FIELD_TYPE_TUPLE
#define AFW_TABLE_FIELD_TYPE_TUPLE
Definition
types.h:43
std::vector
Generated on
for lsst.afw by
1.17.0