Changeset 4fb16c for src/Helpers


Ignore:
Timestamp:
Feb 28, 2011, 2:20:23 PM (15 years ago)
Author:
Frederik Heber <heber@…>
Children:
6b898c
Parents:
178da0
git-author:
Frederik Heber <heber@…> (02/22/11 14:45:16)
git-committer:
Frederik Heber <heber@…> (02/28/11 14:20:23)
Message:

BUGFIX: ObservedIterator::operator* and ::operator-> have to be const members, added MapValue(Const)Iterator adaptors.

  • Library version is now 6:0:0, API version is still 1.0.12.
  • note: in order to comply with standards operator* and operator-> of iterators have to be const members (e.g. for use with boost::iterator_adaptor, or iterator_facade). Hence, ObservedIterator::protector is now mutable and AcquireLock() is const member as well.
  • Added const versions of both IteratorAdaptors.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Helpers/IteratorAdaptors.hpp

    r178da0 r4fb16c  
    4646
    4747/** This class wraps an iterator and implements a dereferencer (operator*) that
     48 *  always returns the value
     49 */
     50template <class BaseIterator>
     51class MapValueConstIterator :
     52    public boost::iterator_adaptor<
     53    MapValueConstIterator<BaseIterator>,
     54        BaseIterator,
     55        const typename BaseIterator::value_type::second_type >
     56{
     57public:
     58    typedef const typename BaseIterator::value_type::second_type& const_reference;
     59
     60    MapValueConstIterator() {}
     61
     62    explicit MapValueConstIterator(BaseIterator base)
     63    :   MapValueConstIterator::iterator_adaptor_(base) {}
     64
     65 private:
     66    friend class boost::iterator_core_access;
     67    const_reference dereference() const
     68        {return this->base_reference()->second;}
     69};
     70
     71/** This class wraps an iterator and implements a dereferencer (operator*) that
    4872 *  always returns the key
    4973 */
     
    6993};
    7094
     95/** This class wraps an iterator and implements a dereferencer (operator*) that
     96 *  always returns the key
     97 */
     98template <class BaseIterator>
     99class MapKeyConstIterator :
     100    public boost::iterator_adaptor<
     101    MapKeyConstIterator<BaseIterator>,
     102        BaseIterator,
     103        const typename BaseIterator::value_type::first_type >
     104{
     105public:
     106    typedef const typename BaseIterator::value_type::first_type& const_reference;
     107
     108    MapKeyConstIterator() {}
     109
     110    explicit MapKeyConstIterator(BaseIterator base)
     111    :   MapKeyConstIterator::iterator_adaptor_(base) {}
     112
     113 private:
     114    friend class boost::iterator_core_access;
     115    const_reference dereference() const
     116        {return this->base_reference()->first;}
     117};
     118
    71119#endif /* ITERATORADAPTORS_HPP_ */
Note: See TracChangeset for help on using the changeset viewer.