LSSTApplications  10.0+286,10.0+36,10.0+46,10.0-2-g4f67435,10.1+152,10.1+37,11.0,11.0+1,11.0-1-g47edd16,11.0-1-g60db491,11.0-1-g7418c06,11.0-2-g04d2804,11.0-2-g68503cd,11.0-2-g818369d,11.0-2-gb8b8ce7
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:48
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:56
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:77
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.