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 | Public Attributes | Friends | List of all members
lsst::sphgeom::RangeSet::Iterator Struct Reference

A constant iterator over the ranges (represented as 2-tuples) in a RangeSet. More...

#include <RangeSet.h>

Public Types

using difference_type = ptrdiff_t
 
using value_type = std::tuple< uint64_t, uint64_t >
 
using pointer = void
 
using reference = std::tuple< uint64_t, uint64_t >
 
using iterator_category = std::input_iterator_tag
 

Public Member Functions

 Iterator ()=default
 
 Iterator (uint64_t const *ptr)
 
Iteratoroperator++ ()
 
Iteratoroperator-- ()
 
Iterator operator++ (int)
 
Iterator operator-- (int)
 
Iterator operator+ (ptrdiff_t n) const
 
Iterator operator- (ptrdiff_t n) const
 
Iteratoroperator+= (ptrdiff_t n)
 
Iteratoroperator-= (ptrdiff_t n)
 
ptrdiff_t operator- (Iterator const &i) const
 
bool operator== (Iterator const &i) const
 
bool operator!= (Iterator const &i) const
 
bool operator< (Iterator const &i) const
 
bool operator> (Iterator const &i) const
 
bool operator<= (Iterator const &i) const
 
bool operator>= (Iterator const &i) const
 
std::tuple< uint64_t, uint64_t > operator* ()
 
std::tuple< uint64_t, uint64_t > operator[] (ptrdiff_t n) const
 

Public Attributes

uint64_t const * p = nullptr
 

Friends

void swap (Iterator &a, Iterator &b)
 
Iterator operator+ (ptrdiff_t n, Iterator const &i)
 

Detailed Description

A constant iterator over the ranges (represented as 2-tuples) in a RangeSet.

RangeSet does not store an array of 2-tuples internally. But, ยง24.2.5 of the C++11 standard requires the following from constant forward iterators:

So, dereferencing a forward iterator cannot return by value, or return a reference to a member of the iterator itself. As a result, it seems impossible to provide more than an input iterator for container objects that do not store their values directly.

While this class only claims to be an input iterator, it nevertheless implements most random access iterator requirements. Dereferencing an iterator returns a tuple by value, and operator-> is omitted.

Definition at line 122 of file RangeSet.h.

Member Typedef Documentation

◆ difference_type

Definition at line 124 of file RangeSet.h.

◆ iterator_category

Definition at line 128 of file RangeSet.h.

◆ pointer

Definition at line 126 of file RangeSet.h.

◆ reference

Definition at line 127 of file RangeSet.h.

◆ value_type

Definition at line 125 of file RangeSet.h.

Constructor & Destructor Documentation

◆ Iterator() [1/2]

lsst::sphgeom::RangeSet::Iterator::Iterator ( )
default

◆ Iterator() [2/2]

lsst::sphgeom::RangeSet::Iterator::Iterator ( uint64_t const *  ptr)
inlineexplicit

Definition at line 131 of file RangeSet.h.

131 : p{ptr} {}
uint64_t * ptr
Definition: RangeSet.cc:88

Member Function Documentation

◆ operator!=()

bool lsst::sphgeom::RangeSet::Iterator::operator!= ( Iterator const &  i) const
inline

Definition at line 158 of file RangeSet.h.

158 { return p != i.p; }

◆ operator*()

std::tuple<uint64_t, uint64_t> lsst::sphgeom::RangeSet::Iterator::operator* ( )
inline

Definition at line 164 of file RangeSet.h.

164  {
165  return std::make_tuple(p[0], p[1]);
166  }
T make_tuple(T... args)

◆ operator+()

Iterator lsst::sphgeom::RangeSet::Iterator::operator+ ( ptrdiff_t  n) const
inline

Definition at line 144 of file RangeSet.h.

144 { return Iterator(p + 2 * n); }

◆ operator++() [1/2]

Iterator& lsst::sphgeom::RangeSet::Iterator::operator++ ( )
inline

Definition at line 138 of file RangeSet.h.

138 { p += 2; return *this; }

◆ operator++() [2/2]

Iterator lsst::sphgeom::RangeSet::Iterator::operator++ ( int  )
inline

Definition at line 141 of file RangeSet.h.

141 { Iterator i(*this); p += 2; return i; }

◆ operator+=()

Iterator& lsst::sphgeom::RangeSet::Iterator::operator+= ( ptrdiff_t  n)
inline

Definition at line 147 of file RangeSet.h.

147 { p += 2 * n; return *this; }

◆ operator-() [1/2]

ptrdiff_t lsst::sphgeom::RangeSet::Iterator::operator- ( Iterator const &  i) const
inline

Definition at line 154 of file RangeSet.h.

154 { return (p - i.p) / 2; }

◆ operator-() [2/2]

Iterator lsst::sphgeom::RangeSet::Iterator::operator- ( ptrdiff_t  n) const
inline

Definition at line 145 of file RangeSet.h.

145 { return Iterator(p + 2 * n); }

◆ operator--() [1/2]

Iterator& lsst::sphgeom::RangeSet::Iterator::operator-- ( )
inline

Definition at line 139 of file RangeSet.h.

139 { p -= 2; return *this; }

◆ operator--() [2/2]

Iterator lsst::sphgeom::RangeSet::Iterator::operator-- ( int  )
inline

Definition at line 142 of file RangeSet.h.

142 { Iterator i(*this); p -= 2; return i; }

◆ operator-=()

Iterator& lsst::sphgeom::RangeSet::Iterator::operator-= ( ptrdiff_t  n)
inline

Definition at line 148 of file RangeSet.h.

148 { p -= 2 * n; return *this; }

◆ operator<()

bool lsst::sphgeom::RangeSet::Iterator::operator< ( Iterator const &  i) const
inline

Definition at line 159 of file RangeSet.h.

159 { return p < i.p; }

◆ operator<=()

bool lsst::sphgeom::RangeSet::Iterator::operator<= ( Iterator const &  i) const
inline

Definition at line 161 of file RangeSet.h.

161 { return p <= i.p; }

◆ operator==()

bool lsst::sphgeom::RangeSet::Iterator::operator== ( Iterator const &  i) const
inline

Definition at line 157 of file RangeSet.h.

157 { return p == i.p; }

◆ operator>()

bool lsst::sphgeom::RangeSet::Iterator::operator> ( Iterator const &  i) const
inline

Definition at line 160 of file RangeSet.h.

160 { return p > i.p; }

◆ operator>=()

bool lsst::sphgeom::RangeSet::Iterator::operator>= ( Iterator const &  i) const
inline

Definition at line 162 of file RangeSet.h.

162 { return p >= i.p; }

◆ operator[]()

std::tuple<uint64_t, uint64_t> lsst::sphgeom::RangeSet::Iterator::operator[] ( ptrdiff_t  n) const
inline

Definition at line 168 of file RangeSet.h.

168  {
169  return std::make_tuple(p[2 * n], p[2 * n + 1]);
170  }

Friends And Related Function Documentation

◆ operator+

Iterator operator+ ( ptrdiff_t  n,
Iterator const &  i 
)
friend

Definition at line 150 of file RangeSet.h.

150  {
151  return i + n;
152  }

◆ swap

void swap ( Iterator a,
Iterator b 
)
friend

Definition at line 133 of file RangeSet.h.

133  {
134  std::swap(a.p, b.p);
135  }
table::Key< int > b
table::Key< int > a
T swap(T... args)

Member Data Documentation

◆ p

uint64_t const* lsst::sphgeom::RangeSet::Iterator::p = nullptr

Definition at line 172 of file RangeSet.h.


The documentation for this struct was generated from the following file: