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