LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Friends | List of all members
lsst::afw::table::Key< T > Class Template Reference

A class used as a handle to a particular field in a table. More...

#include <Key.h>

Inheritance diagram for lsst::afw::table::Key< T >:
lsst::afw::table::KeyBase< T > lsst::afw::table::FieldBase< T >

Public Types

using Value = T
 the type returned by BaseRecord::get More...
 
using Reference = T &
 the type returned by BaseRecord::operator[] (non-const) More...
 
using ConstReference = const T &
 the type returned by BaseRecord::operator[] (const) More...
 
using Element = T
 the type of subfields (the same as the type itself for scalars) More...
 

Public Member Functions

template<typename OtherT >
bool operator== (Key< OtherT > const &other) const noexcept
 Equality comparison. More...
 
template<typename OtherT >
bool operator!= (Key< OtherT > const &other) const noexcept
 
bool operator== (Key const &other) const noexcept
 
bool operator!= (Key const &other) const noexcept
 
std::size_t hash_value () const noexcept
 Return a hash of this object. More...
 
std::size_t getOffset () const noexcept
 Return the offset (in bytes) of this field within a record. More...
 
bool isValid () const noexcept
 Return true if the key was initialized to valid offset. More...
 
 Key () noexcept
 Default construct a field. More...
 
 Key (Key const &) noexcept=default
 
 Key (Key &&) noexcept=default
 
Keyoperator= (Key const &) noexcept=default
 
Keyoperator= (Key &&) noexcept=default
 
 ~Key () noexcept=default
 
std::size_t getElementCount () const noexcept
 Return the number of subfield elements (always one for scalars). More...
 

Static Public Member Functions

static std::string getTypeString ()
 Return a string description of the field type. More...
 

Static Public Attributes

static bool const HAS_NAMED_SUBFIELDS = false
 

Protected Member Functions

void stream (std::ostream &os) const
 Defines how Fields are printed. More...
 
Reference getReference (Element *p, ndarray::Manager::Ptr const &) const
 Used to implement BaseRecord::operator[] (non-const). More...
 
ConstReference getConstReference (Element const *p, ndarray::Manager::Ptr const &) const
 Used to implement BaseRecord::operator[] (const). More...
 
Value getValue (Element const *p, ndarray::Manager::Ptr const &) const
 Used to implement BaseRecord::get. More...
 
void setValue (Element *p, ndarray::Manager::Ptr const &, Value v) const
 Used to implement BaseRecord::set. More...
 

Static Protected Member Functions

static FieldBase makeDefault () noexcept
 Needed to allow Keys to be default-constructed. More...
 

Friends

class detail::Access
 
class BaseRecord
 
std::ostreamoperator<< (std::ostream &os, Key< T > const &key)
 Stringification. More...
 

Detailed Description

template<typename T>
class lsst::afw::table::Key< T >

A class used as a handle to a particular field in a table.

All access to table data ultimately goes through Key objects, which know (via an internal offset) how to address and cast the internal data buffer of a record or table.

Keys can be obtained from a Schema by name:

schema.find("myfield").key

and are also returned when a new field is added. Compound and array keys also provide accessors to retrieve scalar keys to their elements (see the documentation for the KeyBase specializations), even though these element keys do not correspond to a field that exists in any Schema. For example:

Schema schema;
Key< Array<float> > arrayKey = schema.addField< Array<float> >("array", "docs for array", 5);
Key< Point<int> > pointKey = schema.addField< Point<int> >("point", "docs for point");
Key<float> elementKey = arrayKey[3];
Key<int> xKey = pointKey.getX();
std::shared_ptr<BaseTable> table = BaseTable::make(schema);
std::shared_ptr<BaseRecord> record = table.makeRecord();
assert(&record[arrayKey][3] == &record[elementKey3]);
assert(record.get(pointKey).getX() == record[xKey]);

Key inherits from FieldBase to allow a key for a dynamically-sized field to know its size without needing to specialize Key itself or hold a full Field object.

Definition at line 53 of file Key.h.

Member Typedef Documentation

◆ ConstReference

template<typename T >
using lsst::afw::table::FieldBase< T >::ConstReference = const T &
inherited

the type returned by BaseRecord::operator[] (const)

Definition at line 44 of file FieldBase.h.

◆ Element

template<typename T >
using lsst::afw::table::FieldBase< T >::Element = T
inherited

the type of subfields (the same as the type itself for scalars)

Definition at line 45 of file FieldBase.h.

◆ Reference

template<typename T >
using lsst::afw::table::FieldBase< T >::Reference = T &
inherited

the type returned by BaseRecord::operator[] (non-const)

Definition at line 43 of file FieldBase.h.

◆ Value

template<typename T >
using lsst::afw::table::FieldBase< T >::Value = T
inherited

the type returned by BaseRecord::get

Definition at line 42 of file FieldBase.h.

Constructor & Destructor Documentation

◆ Key() [1/3]

template<typename T >
lsst::afw::table::Key< T >::Key ( )
inlinenoexcept

Default construct a field.

The new field will be invalid until a valid Key is assigned to it.

Definition at line 104 of file Key.h.

104 : FieldBase<T>(FieldBase<T>::makeDefault()), _offset(0), _valid(false) {}
static FieldBase makeDefault() noexcept
Needed to allow Keys to be default-constructed.
Definition: FieldBase.h:69

◆ Key() [2/3]

template<typename T >
lsst::afw::table::Key< T >::Key ( Key< T > const &  )
defaultnoexcept

◆ Key() [3/3]

template<typename T >
lsst::afw::table::Key< T >::Key ( Key< T > &&  )
defaultnoexcept

◆ ~Key()

template<typename T >
lsst::afw::table::Key< T >::~Key ( )
defaultnoexcept

Member Function Documentation

◆ getConstReference()

template<typename T >
ConstReference lsst::afw::table::FieldBase< T >::getConstReference ( Element const *  p,
ndarray::Manager::Ptr const &   
) const
inlineprotectedinherited

Used to implement BaseRecord::operator[] (const).

Definition at line 78 of file FieldBase.h.

78 { return *p; }

◆ getElementCount()

template<typename T >
std::size_t lsst::afw::table::FieldBase< T >::getElementCount ( ) const
inlinenoexceptinherited

Return the number of subfield elements (always one for scalars).

Definition at line 48 of file FieldBase.h.

48 { return 1; }

◆ getOffset()

template<typename T >
std::size_t lsst::afw::table::Key< T >::getOffset ( ) const
inlinenoexcept

Return the offset (in bytes) of this field within a record.

Definition at line 87 of file Key.h.

87 { return _offset; }

◆ getReference()

template<typename T >
Reference lsst::afw::table::FieldBase< T >::getReference ( Element p,
ndarray::Manager::Ptr const &   
) const
inlineprotectedinherited

Used to implement BaseRecord::operator[] (non-const).

Definition at line 75 of file FieldBase.h.

75 { return *p; }

◆ getTypeString()

template<typename T >
std::string lsst::afw::table::FieldBase< T >::getTypeString
staticinherited

Return a string description of the field type.

Definition at line 56 of file FieldBase.cc.

56  {
57  return TypeTraits<T>::getName();
58 }
std::string const & getName() const noexcept
Return a filter's name.
Definition: Filter.h:78

◆ getValue()

template<typename T >
Value lsst::afw::table::FieldBase< T >::getValue ( Element const *  p,
ndarray::Manager::Ptr const &   
) const
inlineprotectedinherited

Used to implement BaseRecord::get.

Definition at line 81 of file FieldBase.h.

81 { return *p; }

◆ hash_value()

template<typename T >
std::size_t lsst::afw::table::Key< T >::hash_value ( ) const
inlinenoexcept

Return a hash of this object.

Definition at line 81 of file Key.h.

81  {
82  // Completely arbitrary seed
83  return utils::hashCombine(17, _offset, this->getElementCount());
84  }
std::size_t hashCombine(std::size_t seed) noexcept
Combine hashes.
Definition: hashCombine.h:35
std::size_t getElementCount() const noexcept
Return the number of subfield elements (always one for scalars).
Definition: FieldBase.h:48

◆ isValid()

template<typename T >
bool lsst::afw::table::Key< T >::isValid ( ) const
inlinenoexcept

Return true if the key was initialized to valid offset.

This does not guarantee that a key is valid with any particular schema, or even that any schemas still exist in which this key is valid.

A key that is default constructed will always be invalid.

Definition at line 97 of file Key.h.

97 { return _valid; }

◆ makeDefault()

template<typename T >
static FieldBase lsst::afw::table::FieldBase< T >::makeDefault ( )
inlinestaticprotectednoexceptinherited

Needed to allow Keys to be default-constructed.

Definition at line 69 of file FieldBase.h.

69 { return FieldBase(); }

◆ operator!=() [1/2]

template<typename T >
bool lsst::afw::table::Key< T >::operator!= ( Key< T > const &  other) const
inlinenoexcept

Definition at line 77 of file Key.h.

77 { return !this->operator==(other); }
bool operator==(Key< OtherT > const &other) const noexcept
Equality comparison.
Definition: Key.h:66

◆ operator!=() [2/2]

template<typename T >
template<typename OtherT >
bool lsst::afw::table::Key< T >::operator!= ( Key< OtherT > const &  other) const
inlinenoexcept

Definition at line 70 of file Key.h.

70  {
71  return true;
72  }

◆ operator=() [1/2]

template<typename T >
Key& lsst::afw::table::Key< T >::operator= ( Key< T > &&  )
defaultnoexcept

◆ operator=() [2/2]

template<typename T >
Key& lsst::afw::table::Key< T >::operator= ( Key< T > const &  )
defaultnoexcept

◆ operator==() [1/2]

template<typename T >
bool lsst::afw::table::Key< T >::operator== ( Key< T > const &  other) const
inlinenoexcept

Definition at line 74 of file Key.h.

74  {
75  return _offset == other._offset && this->getElementCount() == other.getElementCount();
76  }

◆ operator==() [2/2]

template<typename T >
template<typename OtherT >
bool lsst::afw::table::Key< T >::operator== ( Key< OtherT > const &  other) const
inlinenoexcept

Equality comparison.

Two keys with different types are never equal. Keys with the same type are equal if they point to the same location in a table, regardless of what Schema they were constructed from (for instance, if a field has a different name in one Schema than another, but is otherwise the same, the two keys will be equal).

Definition at line 66 of file Key.h.

66  {
67  return false;
68  }

◆ setValue()

template<typename T >
void lsst::afw::table::FieldBase< T >::setValue ( Element p,
ndarray::Manager::Ptr const &  ,
Value  v 
) const
inlineprotectedinherited

Used to implement BaseRecord::set.

Definition at line 84 of file FieldBase.h.

84 { *p = v; }

◆ stream()

template<typename T >
void lsst::afw::table::FieldBase< T >::stream ( std::ostream os) const
inlineprotectedinherited

Defines how Fields are printed.

Definition at line 72 of file FieldBase.h.

72 {}

Friends And Related Function Documentation

◆ BaseRecord

template<typename T >
friend class BaseRecord
friend

Definition at line 120 of file Key.h.

◆ detail::Access

template<typename T >
friend class detail::Access
friend

Definition at line 119 of file Key.h.

◆ operator<<

template<typename T >
std::ostream& operator<< ( std::ostream os,
Key< T > const &  key 
)
friend

Stringification.

Definition at line 113 of file Key.h.

113  {
114  return os << "Key<" << Key<T>::getTypeString() << ">(offset=" << key.getOffset()
115  << ", nElements=" << key.getElementCount() << ")";
116  }
std::ostream * os
Definition: Schema.cc:557
static std::string getTypeString()
Return a string description of the field type.
Definition: FieldBase.cc:56

Member Data Documentation

◆ HAS_NAMED_SUBFIELDS

template<typename T >
bool const lsst::afw::table::KeyBase< T >::HAS_NAMED_SUBFIELDS = false
staticinherited

Definition at line 22 of file KeyBase.h.


The documentation for this class was generated from the following files: