1 //===--- STLExtras.h - Helper STL related templates -------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Helper templates for using with the STL.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_CLANG_INDEX_STLEXTRAS_H
15 #define LLVM_CLANG_INDEX_STLEXTRAS_H
21 /// \brief Wraps an iterator whose value_type is a pair, and provides
22 /// pair's second object as the value.
23 template <typename iter_type>
24 class pair_value_iterator {
28 typedef typename iter_type::value_type::second_type value_type;
29 typedef value_type& reference;
30 typedef value_type* pointer;
31 typedef typename iter_type::iterator_category iterator_category;
32 typedef typename iter_type::difference_type difference_type;
34 pair_value_iterator() { }
35 pair_value_iterator(iter_type i) : I(i) { }
37 reference operator*() const { return I->second; }
38 pointer operator->() const { return &I->second; }
40 pair_value_iterator& operator++() {
45 pair_value_iterator operator++(int) {
46 pair_value_iterator tmp(*this);
51 friend bool operator==(pair_value_iterator L, pair_value_iterator R) {
54 friend bool operator!=(pair_value_iterator L, pair_value_iterator R) {
59 } // end idx namespace
61 } // end clang namespace