Changeset 4fb16c


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.
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • configure.ac

    r178da0 r4fb16c  
    33
    44AC_PREREQ([2.65])
    5 AC_INIT([CodePatterns], [1.0.11], [heber@ins.uni-bonn.de], [codepatterns], [http://trac.ins.uni-bonn.de/projects/CodePatterns/])
     5AC_INIT([CodePatterns], [1.0.12], [heber@ins.uni-bonn.de], [codepatterns], [http://trac.ins.uni-bonn.de/projects/CodePatterns/])
    66AC_CONFIG_AUX_DIR(config)
    77AC_CONFIG_SRCDIR([src/Patterns/Singleton_impl.hpp])
     
    2525# refer to the libtool manual, section "Updating library version information":
    2626# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
    27 AC_SUBST([CODEPATTERNS_SO_VERSION], [5:1:5])
    28 AC_SUBST([CODEPATTERNS_API_VERSION], [1.0.11])
     27AC_SUBST([CODEPATTERNS_SO_VERSION], [6:0:0])
     28AC_SUBST([CODEPATTERNS_API_VERSION], [1.0.12])
    2929
    3030# Checks for libraries.
  • 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_ */
  • src/Patterns/ObservedIterator.hpp

    r178da0 r4fb16c  
    109109  }
    110110
    111   value_type operator*(){
     111  /** Returns the value_type this iterator represents.
     112   * Activates a lock.
     113   *
     114   * \note In order to be conforming, dereference must be const member.
     115   *
     116   * @return value_type of iterator
     117   */
     118  value_type operator*() const {
    112119    // access is requested... time to get the lock
    113120    acquireLock();
     
    115122  }
    116123
    117   value_type *operator->(){
     124  /** Returns pointer to value_type this iterator represents.
     125   * Activates a lock.
     126   *
     127   * \note In order to be conforming, dereference must be const member.
     128   *
     129   * @return pointer to value_type of iterator
     130   */
     131  value_type *operator->() const {
    118132    acquireLock();
    119133    return &(*iter);
     
    135149   * etc.
    136150   */
    137   void acquireLock(){
     151  void acquireLock() const {
    138152    if(!protector)
    139153      protector = new Observable::_Observable_protector(collection);
     
    152166  _Iter iter;
    153167  Observable *collection;
    154   Observable::_Observable_protector *protector;
     168  mutable Observable::_Observable_protector *protector;
    155169};
    156170
Note: See TracChangeset for help on using the changeset viewer.