2 #ifndef AFW_TABLE_FieldBase_h_INCLUDED
3 #define AFW_TABLE_FieldBase_h_INCLUDED
8 #include "boost/mpl/vector.hpp"
9 #include "boost/preprocessor/punctuation/paren.hpp"
20 namespace lsst {
namespace afw {
namespace table {
32 return (i < j) ? (i + j*(j+1)/2) : (j + i*(i+1)/2);
37 return size * (size + 1) / 2;
61 #ifndef SWIG_BUG_3465431_FIXED
68 lsst::pex::exceptions::LogicError,
69 "Constructor disabled (it only appears to exist as a workaround for a SWIG bug)."
80 void stream(std::ostream & os)
const {}
105 template <
typename U>
108 typedef ndarray::Array<U const,1,1>
Value;
133 lsst::pex::exceptions::LogicError,
134 "A non-negative size must be provided when constructing an array field."
156 void stream(std::ostream & os)
const { os <<
", size=" << _size; }
160 if (isVariableLength()) {
161 return reinterpret_cast< ndarray::Array<Element,1,1> *
>(p)->deep();
163 return ndarray::external(p, ndarray::makeVector(_size), ndarray::ROW_MAJOR, m);
168 if (isVariableLength()) {
169 return reinterpret_cast< ndarray::Array<Element,1,1>
const *
>(p)->deep();
171 return ndarray::external(p, ndarray::makeVector(_size), ndarray::ROW_MAJOR, m);
176 if (isVariableLength()) {
177 return *
reinterpret_cast< ndarray::Array<Element,1,1>
const *
>(p);
179 return ndarray::external(p, ndarray::makeVector(_size), ndarray::ROW_MAJOR, m);
187 Element * p, ndarray::Manager::Ptr
const &, ndarray::Array<Element,1,1>
const & value
189 if (isVariableLength()) {
190 *
reinterpret_cast< ndarray::Array<Element,1,1>*
>(p) = value;
192 setValueDeep(p, value);
197 template <
typename Derived>
199 Element * p, ndarray::Manager::Ptr
const &, ndarray::ExpressionBase<Derived>
const & value
201 if (isVariableLength()) {
203 lsst::pex::exceptions::LogicError,
204 "Assignment to a variable-length array must use a non-const array of the correct type."
207 setValueDeep(p, value);
212 template <
typename Derived>
214 if (value.template getSize<0>() != static_cast<std::size_t>(_size)) {
216 lsst::pex::exceptions::LengthError,
217 "Incorrect size in array field assignment."
220 for (
int i = 0; i < _size; ++i) p[i] = value[i];
272 void stream(std::ostream & os)
const { os <<
", size=" << _size; }
288 void setValue(
Element * p, ndarray::Manager::Ptr
const &, std::string
const & value)
const;
296 #endif // !AFW_TABLE_FieldBase_h_INCLUDED
Field base class default implementation (used for numeric scalars and Angle).
An include file to include the header files for lsst::afw::geom.
This file contains macros and MPL vectors that list the types that can be used for fields...
T Value
the type returned by BaseRecord::get
Value getValue(Element const *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::get.
void stream(std::ostream &os) const
Defines how Fields are printed.
ndarray::ArrayRef< U const, 1, 1 > ConstReference
the type returned by BaseRecord::operator[] (const)
void stream(std::ostream &os) const
Defines how Fields are printed.
Include files required for standard LSST Exception handling.
int getSize() const
Return the size of the array (equal to the number of subfield elements).
U Element
the type of subfields and array elements
ConstReference getConstReference(Element const *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::operator[] (const).
Value getValue(Element const *p, ndarray::Manager::Ptr const &) const
Used to implement RecordBase::get.
void setValue(Element *p, ndarray::Manager::Ptr const &, Value v) const
Used to implement RecordBase::set.
int computeCovariancePackedSize(int size)
Defines the packed size of a covariance matrices.
bool isVariableLength() const
Return true if the field is variable-length (each record can have a different size array)...
T const & ConstReference
the type returned by BaseRecord::operator[] (const)
FieldBase(int size=0)
Construct a FieldBase with the given size.
Reference getReference(Element *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::operator[] (non-const).
static FieldBase makeDefault()
Needed to allow Keys to be default-constructed.
static std::string getTypeString()
Return a string description of the field type.
ConstReference getConstReference(Element const *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::operator[] (const).
void setValueDeep(Element *p, ndarray::ExpressionBase< Derived > const &value) const
char Element
the type of subfields and array elements
void setValue(Element *p, ndarray::Manager::Ptr const &, ndarray::ExpressionBase< Derived > const &value) const
Used to implement RecordBase::set; accepts any ndarray expression.
T & Reference
the type returned by BaseRecord::operator[] (non-const)
Reference getReference(Element *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::operator[] (non-const).
static FieldBase makeDefault()
Needed to allow Keys to be default-constructed.
int indexCovariance(int i, int j)
Defines the ordering of packed covariance matrices.
Tag types used to declare specialized field types.
char * Reference
the type returned by BaseRecord::operator[]
int getElementCount() const
Return the number of subfield elements (equal to the size of the string, including a null terminator)...
int getElementCount() const
Return the number of subfield elements (always one for scalars).
int getElementCount() const
Return the number of subfield elements (equal to the size of the array).
#define LSST_EXCEPT(type,...)
Create an exception with a given type and message and optionally other arguments (dependent on the ty...
void setValue(Element *p, ndarray::Manager::Ptr const &, ndarray::Array< Element, 1, 1 > const &value) const
Used to implement RecordBase::set; accepts only non-const arrays of the right type, and allows shallow assignment of variable-length arrays (which is the only kind of assignment allowed for variable-length arrays - if you want deep assignment, use operator[] to get a reference and assign to that.
void stream(std::ostream &os) const
Defines how Fields are printed.
Reference getReference(Element *p, ndarray::Manager::Ptr const &) const
Used to implement RecordBase::operator[] (non-const).
ndarray::ArrayRef< U, 1, 1 > Reference
the type returned by BaseRecord::operator[]
ConstReference getConstReference(Element const *p, ndarray::Manager::Ptr const &) const
Used to implement RecordBase::operator[] (const).
int getSize() const
Return the maximum length of the string, including a null terminator (equal to the number of subfield...
ndarray::Array< U const, 1, 1 > Value
the type returned by BaseRecord::get
char const * ConstReference
the type returned by BaseRecord::operator[] (const)
static FieldBase makeDefault()
Needed to allow Keys to be default-constructed.
std::string Value
the type returned by BaseRecord::get
T Element
the type of subfields (the same as the type itself for scalars)