35 #ifndef VIGRA_ITERATORFACADE_HXX
36 #define VIGRA_ITERATORFACADE_HXX
42 #include "metaprogramming.hxx"
48 class IteratorFacadeCoreAccess{
51 static bool equal(
const F & fa,
const F & fb){
55 template<
class F,
class REFERENCE>
56 static REFERENCE dereference(
const F & f){
57 return f.dereference();
61 static void increment(F & f){
68 template<
class FACADE,
class VALUE_TYPE,
bool IS_CONST = true>
69 class ForwardIteratorFacade{
74 typedef std::forward_iterator_tag iterator_category;
75 typedef typename UnqualifiedType<VALUE_TYPE>::type value_type;
76 typedef typename IfBool<IS_CONST, value_type const * , value_type *>::type pointer;
77 typedef typename IfBool<IS_CONST, const value_type & , value_type &>::type reference;
78 typedef std::ptrdiff_t difference_type;
83 IteratorFacadeCoreAccess::increment(getF());
87 FACADE operator++(
int)
90 IteratorFacadeCoreAccess::increment(getF());
95 return IteratorFacadeCoreAccess::equal(getF(),f);
98 return !IteratorFacadeCoreAccess::equal(getF(),f);
101 reference operator*()
const{
102 return IteratorFacadeCoreAccess:: template dereference<FACADE,reference>(getF());
105 pointer operator->()
const{
106 return &IteratorFacadeCoreAccess:: template dereference<FACADE,reference>(getF());
112 const FACADE & getF()
const{
113 return *
static_cast<FACADE
const *
>(
this);
116 return *
static_cast<FACADE *
>(
this);
122 :
public ForwardIteratorFacade<MapKeyIterator<MAP>,typename MAP::key_type,true>
126 typedef ForwardIteratorFacade<MapKeyIterator<MAP>,
typename MAP::key_type,
true> BaseType;
127 typedef typename MAP::const_iterator InternalIterator;
128 typedef typename BaseType::value_type value_type;
129 typedef typename BaseType::reference reference;
130 typedef typename BaseType::pointer pointer;
132 MapKeyIterator(InternalIterator i)
138 friend class IteratorFacadeCoreAccess;
140 bool equal(
const MapKeyIterator & other)
const{
141 return iter_ == other.iter_;
148 reference dereference()
const{
152 InternalIterator iter_;
156 inline MapKeyIterator<MAP>
157 key_begin(MAP
const & m)
159 return MapKeyIterator<MAP>(m.begin());
164 inline MapKeyIterator<MAP>
165 key_end(MAP
const & m)
167 return MapKeyIterator<MAP>(m.end());
bool operator!=(FFTWComplex< R > const &a, const FFTWComplex< R > &b)
not equal
Definition: fftw3.hxx:841
bool operator==(FFTWComplex< R > const &a, const FFTWComplex< R > &b)
equal
Definition: fftw3.hxx:825