Google OR-Tools: ortools/graph/iterators.h Source File

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16#ifndef UTIL_GRAPH_ITERATORS_H_

17#define UTIL_GRAPH_ITERATORS_H_

18

19#include <cstddef>

20#include <iterator>

21#include <utility>

22

23#include "absl/log/check.h"

24

25namespace util {

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47template <typename Iterator>

49 public:

51 using value_type = typename std::iterator_traits<Iterator>::value_type;

52

53

55

57

58 Iterator begin() const { return begin_; }

59 Iterator end() const { return end_; }

60

61

62 size_t size() const { return end_ - begin_; }

63

65

66 private:

67 Iterator begin_;

68 Iterator end_;

69};

70

71

72

73

74template <typename Iterator>

78template <typename Iterator>

80 std::pair<Iterator, Iterator> begin_end) {

82}

83

84

85

86

87template <typename MultiMap>

89 MultiMap& multi_map, const typename MultiMap::key_type& key) {

91}

92template <typename MultiMap>

94 const MultiMap& multi_map, const typename MultiMap::key_type& key) {

96}

97

98

99

100

101

102template <typename Container>

104 public:

106 typename Container::const_reverse_iterator begin() const {

107 return c_.rbegin();

108 }

109 typename Container::const_reverse_iterator end() const { return c_.rend(); }

110

111 private:

112 const Container& c_;

113};

114template <typename Container>

118

119

120

121

122template <typename IntegerType>

124

125

126

127#if __cplusplus < 201703L

128 : public std::iterator<std::input_iterator_tag, IntegerType>

129#endif

130{

131 public:

134#if __cplusplus >= 201703L && __cplusplus < 202002L

135 using iterator_category = std::input_iterator_tag;

136 using pointer = IntegerType*;

137 using reference = IntegerType&;

138#endif

139

141

143

144 IntegerType operator*() const { return index_; }

145

146

147

149 return index_ == other.index_;

150 }

152 return index_ != other.index_;

153 }

155 return index_ < other.index_;

156 }

158 return index_ > other.index_;

159 }

161 return index_ <= other.index_;

162 }

164 return index_ >= other.index_;

165 }

166

168 ++index_;

169 return *this;

170 }

171

173 auto tmp = *this;

174 ++*this;

175 return tmp;

176 }

177

179 index_ += n;

180 return *this;

181 }

182

184 --index_;

185 return *this;

186 }

187

189 auto tmp = *this;

190 --*this;

191 return tmp;

192 }

193

195 index_ -= n;

196 return *this;

197 }

198

200

205

210

215

220

221 private:

222 IntegerType index_;

223};

224

225

226

227

228

229

230

231

232

233

234template <typename IntegerType>

245

246

247

248

249template <typename IndexT, const IndexT& sentinel, typename Tag>

251#if __cplusplus < 201703L

252 : public std::iterator<std::input_iterator_tag, IndexT>

253#endif

254{

255 public:

258#if __cplusplus >= 201703L && __cplusplus < 202002L

259 using iterator_category = std::input_iterator_tag;

260 using pointer = IndexT*;

261 using reference = IndexT&;

262#endif

263

265

267 : index_(index), next_(next) {}

268

270

272 index_ = next_[static_cast<ptrdiff_t>(index_)];

273 return *this;

274 }

276 auto tmp = *this;

277 index_ = next_[static_cast<ptrdiff_t>(index_)];

278 return tmp;

279 }

280

282 return l.index_ == r.index_;

283 }

285 return l.index_ != r.index_;

286 }

287

288 private:

289 IndexT index_;

290 const IndexT* next_;

291};

292

293}

294

295#endif

Definition iterators.h:103

BeginEndReverseIteratorWrapper(const Container &c)

Definition iterators.h:105

Container::const_reverse_iterator end() const

Definition iterators.h:109

Container::const_reverse_iterator begin() const

Definition iterators.h:106

Definition iterators.h:48

Iterator end() const

Definition iterators.h:59

Iterator begin() const

Definition iterators.h:58

BeginEndWrapper(Iterator begin, Iterator end)

Definition iterators.h:56

bool empty() const

Definition iterators.h:64

BeginEndWrapper()=default

typename std::iterator_traits< Iterator >::value_type value_type

Definition iterators.h:51

Iterator const_iterator

Definition iterators.h:50

size_t size() const

Definition iterators.h:62

ChasingIterator(IndexT index, const IndexT *next)

Definition iterators.h:266

ArcIndexType value_type

Definition iterators.h:257

friend bool operator!=(const ChasingIterator &l, const ChasingIterator &r)

Definition iterators.h:284

IndexT operator*() const

Definition iterators.h:269

ChasingIterator operator++(int)

Definition iterators.h:275

ptrdiff_t difference_type

Definition iterators.h:256

ChasingIterator()

Definition iterators.h:264

friend bool operator==(const ChasingIterator &l, const ChasingIterator &r)

Definition iterators.h:281

ChasingIterator & operator++()

Definition iterators.h:271

Definition iterators.h:130

friend IntegerRangeIterator operator+(IntegerRangeIterator it, difference_type n)

Definition iterators.h:201

bool operator<(const IntegerRangeIterator &other) const

Definition iterators.h:154

ArcIndexType value_type

Definition iterators.h:133

bool operator==(const IntegerRangeIterator &other) const

Definition iterators.h:148

friend IntegerRangeIterator operator+(difference_type n, IntegerRangeIterator it)

Definition iterators.h:206

ptrdiff_t difference_type

Definition iterators.h:132

IntegerRangeIterator()

Definition iterators.h:140

IntegerRangeIterator operator--(int)

Definition iterators.h:188

IntegerRangeIterator & operator--()

Definition iterators.h:183

IntegerRangeIterator & operator+=(difference_type n)

Definition iterators.h:178

IntegerRangeIterator & operator++()

Definition iterators.h:167

bool operator!=(const IntegerRangeIterator &other) const

Definition iterators.h:151

bool operator>=(const IntegerRangeIterator &other) const

Definition iterators.h:163

bool operator>(const IntegerRangeIterator &other) const

Definition iterators.h:157

IntegerRangeIterator(IntegerType value)

Definition iterators.h:142

bool operator<=(const IntegerRangeIterator &other) const

Definition iterators.h:160

IntegerType operator*() const

Definition iterators.h:144

friend difference_type operator-(const IntegerRangeIterator l, const IntegerRangeIterator r)

Definition iterators.h:216

IntegerRangeIterator & operator-=(difference_type n)

Definition iterators.h:194

IntegerType operator[](difference_type n) const

Definition iterators.h:199

friend IntegerRangeIterator operator-(IntegerRangeIterator it, difference_type n)

Definition iterators.h:211

IntegerRangeIterator operator++(int)

Definition iterators.h:172

IntegerRange(IntegerType begin, IntegerType end)

Definition iterators.h:238

BeginEndReverseIteratorWrapper< Container > Reverse(const Container &c)

Definition iterators.h:115

BeginEndWrapper< Iterator > BeginEndRange(Iterator begin, Iterator end)

Definition iterators.h:75

BeginEndWrapper< typename MultiMap::iterator > EqualRange(MultiMap &multi_map, const typename MultiMap::key_type &key)

Definition iterators.h:88