LSSTApplications  8.0.0.0+107,8.0.0.1+13,9.1+18,9.2,master-g084aeec0a4,master-g0aced2eed8+6,master-g15627eb03c,master-g28afc54ef9,master-g3391ba5ea0,master-g3d0fb8ae5f,master-g4432ae2e89+36,master-g5c3c32f3ec+17,master-g60f1e072bb+1,master-g6a3ac32d1b,master-g76a88a4307+1,master-g7bce1f4e06+57,master-g8ff4092549+31,master-g98e65bf68e,master-ga6b77976b1+53,master-gae20e2b580+3,master-gb584cd3397+53,master-gc5448b162b+1,master-gc54cf9771d,master-gc69578ece6+1,master-gcbf758c456+22,master-gcec1da163f+63,master-gcf15f11bcc,master-gd167108223,master-gf44c96c709
LSSTDataManagementBasePackage
Key.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 #ifndef AFW_TABLE_Key_h_INCLUDED
3 #define AFW_TABLE_Key_h_INCLUDED
4 
6 #include "lsst/afw/table/Flag.h"
8 
9 namespace lsst { namespace afw { namespace table {
10 
11 namespace detail {
12 
13 class Access;
14 
15 } // namespace detail
16 
49 template <typename T>
50 class Key : public KeyBase<T>, public FieldBase<T> {
51 public:
52 
54 
63  template <typename OtherT> bool operator==(Key<OtherT> const & other) const { return false; }
64  template <typename OtherT> bool operator!=(Key<OtherT> const & other) const { return true; }
65 
66  bool operator==(Key const & other) const {
67  return _offset == other._offset && this->getElementCount() == other.getElementCount();
68  }
69  bool operator!=(Key const & other) const { return !this->operator==(other); }
71 
73  int getOffset() const { return _offset; }
74 
83  bool isValid() const { return _offset >= 0; }
84 
90  Key() : FieldBase<T>(FieldBase<T>::makeDefault()), _offset(-1) {}
91 
93  inline friend std::ostream & operator<<(std::ostream & os, Key<T> const & key) {
94  return os << "Key<" << Key<T>::getTypeString() << ">(offset=" << key.getOffset()
95  << ", nElements=" << key.getElementCount() << ")";
96  }
97 
98 private:
99 
100  friend class detail::Access;
101  friend class BaseRecord;
102 
103  explicit Key(int offset, FieldBase<T> const & fb = FieldBase<T>())
104  : FieldBase<T>(fb), _offset(offset) {}
105 
106  int _offset;
107 };
108 
109 }}} // namespace lsst::afw::table
110 
111 #endif // !AFW_TABLE_Key_h_INCLUDED
bool isValid() const
Return true if the key was initialized to valid offset.
Definition: Key.h:83
Field base class default implementation (used for numeric scalars and Angle).
Definition: FieldBase.h:50
bool operator!=(Key< OtherT > const &other) const
Equality comparison.
Definition: Key.h:64
bool operator!=(Key const &other) const
Equality comparison.
Definition: Key.h:69
int getOffset() const
Return the offset (in bytes) of this field within a record.
Definition: Key.h:73
int getElementCount() const
Return the number of subfield elements (always one for scalars).
Definition: FieldBase.h:58
bool operator==(Key const &other) const
Equality comparison.
Definition: Key.h:66
Base class for all records.
Definition: BaseRecord.h:27
A class used as a handle to a particular field in a table.
Definition: fwd.h:44
Key()
Default construct a field.
Definition: Key.h:90
bool operator==(Key< OtherT > const &other) const
Equality comparison.
Definition: Key.h:63
static FieldBase makeDefault()
Needed to allow Keys to be default-constructed.
Definition: FieldBase.h:79
Key(int offset, FieldBase< T > const &fb=FieldBase< T >())
Definition: Key.h:103
static std::string getTypeString()
Return a string description of the field type.