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>() != _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
Value getValue(Element const *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::get.
static FieldBase makeDefault()
Needed to allow Keys to be default-constructed.
Field base class default implementation (used for numeric scalars and Angle).
An include file to include the header files for lsst::afw::geom.
ndarray::Array< U const, 1, 1 > Value
the type returned by BaseRecord::get
int getElementCount() const
Return the number of subfield elements (equal to the size of the string, including a null terminator)...
int getSize() const
Return the size of the array (equal to the number of subfield elements).
void setValue(Element *p, ndarray::Manager::Ptr const &, ndarray::Array< Element, 1, 1 > const &value) const
U Element
the type of subfields and array elements
void setValueDeep(Element *p, ndarray::ExpressionBase< Derived > const &value) const
void setValue(Element *p, ndarray::Manager::Ptr const &, ndarray::ExpressionBase< Derived > const &value) const
Used to implement RecordBase::set; accepts any ndarray expression.
int getElementCount() const
Return the number of subfield elements (equal to the size of the array).
void stream(std::ostream &os) const
Defines how Fields are printed.
ndarray::ArrayRef< U, 1, 1 > Reference
the type returned by BaseRecord::operator[]
char const * ConstReference
the type returned by BaseRecord::operator[] (const)
int computeCovariancePackedSize(int size)
Defines the packed size of a covariance matrices.
ndarray::ArrayRef< U const, 1, 1 > ConstReference
the type returned by BaseRecord::operator[] (const)
FieldBase(int size=0)
Construct a FieldBase with the given size.
ConstReference getConstReference(Element const *p, ndarray::Manager::Ptr const &) const
Used to implement RecordBase::operator[] (const).
ConstReference getConstReference(Element const *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::operator[] (const).
int getElementCount() const
Return the number of subfield elements (always one for scalars).
int indexCovariance(int i, int j)
Defines the ordering of packed covariance matrices.
int getSize() const
Return the maximum length of the string, including a null terminator (equal to the number of subfield...
Tag types used to declare specialized field types.
bool isVariableLength() const
Return true if the field is variable-length (each record can have a different size array)...
void stream(std::ostream &os) const
Defines how Fields are printed.
T Element
the type of subfields (the same as the type itself for scalars)
#define LSST_EXCEPT(type,...)
Reference getReference(Element *p, ndarray::Manager::Ptr const &) const
Used to implement RecordBase::operator[] (non-const).
void stream(std::ostream &os) const
Defines how Fields are printed.
T Value
the type returned by BaseRecord::get
static FieldBase makeDefault()
Needed to allow Keys to be default-constructed.
Reference getReference(Element *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::operator[] (non-const).
char * Reference
the type returned by BaseRecord::operator[]
void setValue(Element *p, ndarray::Manager::Ptr const &, Value v) const
Used to implement RecordBase::set.
Include files required for standard LSST Exception handling.
std::string Value
the type returned by BaseRecord::get
T const & ConstReference
the type returned by BaseRecord::operator[] (const)
char Element
the type of subfields and array elements
Reference getReference(Element *p, ndarray::Manager::Ptr const &m) const
Used to implement RecordBase::operator[] (non-const).
T & Reference
the type returned by BaseRecord::operator[] (non-const)
static FieldBase makeDefault()
Needed to allow Keys to be default-constructed.
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.
static std::string getTypeString()
Return a string description of the field type.