LSSTApplications  1.1.2+25,10.0+13,10.0+132,10.0+133,10.0+224,10.0+41,10.0+8,10.0-1-g0f53050+14,10.0-1-g4b7b172+19,10.0-1-g61a5bae+98,10.0-1-g7408a83+3,10.0-1-gc1e0f5a+19,10.0-1-gdb4482e+14,10.0-11-g3947115+2,10.0-12-g8719d8b+2,10.0-15-ga3f480f+1,10.0-2-g4f67435,10.0-2-gcb4bc6c+26,10.0-28-gf7f57a9+1,10.0-3-g1bbe32c+14,10.0-3-g5b46d21,10.0-4-g027f45f+5,10.0-4-g86f66b5+2,10.0-4-gc4fccf3+24,10.0-40-g4349866+2,10.0-5-g766159b,10.0-5-gca2295e+25,10.0-6-g462a451+1
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 operator!=(Key< OtherT > const &other) const
Equality comparison.
Definition: Key.h:64
Field base class default implementation (used for numeric scalars and Angle).
Definition: FieldBase.h:50
static FieldBase makeDefault()
Needed to allow Keys to be default-constructed.
Definition: FieldBase.h:79
int getOffset() const
Return the offset (in bytes) of this field within a record.
Definition: Key.h:73
bool isValid() const
Return true if the key was initialized to valid offset.
Definition: Key.h:83
Key()
Default construct a field.
Definition: Key.h:90
bool operator!=(Key const &other) const
Equality comparison.
Definition: Key.h:69
static std::string getTypeString()
Return a string description of the field type.
int getElementCount() const
Return the number of subfield elements (always one for scalars).
Definition: FieldBase.h:58
Key(int offset, FieldBase< T > const &fb=FieldBase< T >())
Definition: Key.h:103
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
bool operator==(Key const &other) const
Equality comparison.
Definition: Key.h:66
bool operator==(Key< OtherT > const &other) const
Equality comparison.
Definition: Key.h:63