Changeset 9e619e for src/Observer


Ignore:
Timestamp:
Dec 13, 2015, 5:37:05 PM (10 years ago)
Author:
Frederik Heber <heber@…>
Children:
afbe20
Parents:
ba6aa5
git-author:
Frederik Heber <heber@…> (12/13/15 17:01:34)
git-committer:
Frederik Heber <heber@…> (12/13/15 17:37:05)
Message:

Added UnobservedIterator to allow for an "unobserved" ObservedContainer.

Location:
src/Observer
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/Observer/Makefile.am

    rba6aa5 r9e619e  
    3232        $(top_srcdir)/src/CodePatterns/Observer/ObservedIterator.hpp \
    3333        $(top_srcdir)/src/CodePatterns/Observer/ObservedContainer_impl.hpp \
     34        $(top_srcdir)/src/CodePatterns/Observer/UnobservedIterator.hpp \
    3435        $(top_srcdir)/src/CodePatterns/Observer/Relay.hpp \
    3536        $(top_srcdir)/src/CodePatterns/Observer/Zombie.hpp
  • src/Observer/unittests/ObservedContainerUnitTest.cpp

    rba6aa5 r9e619e  
    3030#include "CodePatterns/Observer/ObservedContainer.hpp"
    3131#include "CodePatterns/Observer/ObservedContainer_impl.hpp"
     32#include "CodePatterns/Observer/ObservedIterator.hpp"
     33#include "CodePatterns/Observer/UnobservedIterator.hpp"
    3234
    3335#include "ObservedContainerUnitTest.hpp"
     
    5658void ObservedContainerTest::IteratorMapTest()
    5759{
    58   typedef ObservedContainer< std::map<int, int> > OC;
     60  typedef ObservedContainer< std::map<int, int>, ObservedIterator<std::map<int, int> > > OC;
    5961  OC OContainer(simpleObservable1);
    6062  int i;
     
    121123}
    122124
     125void ObservedContainerTest::IteratorMapNotObservedTest()
     126{
     127  typedef ObservedContainer< std::map<int, int>, UnobservedIterator<std::map<int, int> > > OC;
     128  OC OContainer(simpleObservable1);
     129  int i;
     130
     131  OContainer.insert( std::pair<int,int> (1,1) );
     132  OContainer.insert( std::pair<int,int> (2,2) );
     133
     134  i=0;
     135  for (OC::internal_iterator iter = OContainer.begin_internal(); iter != OContainer.end_internal(); ++iter) {
     136    i++;
     137    CPPUNIT_ASSERT_EQUAL(i, iter->first);
     138    CPPUNIT_ASSERT_EQUAL(i, iter->second);
     139  }
     140  CPPUNIT_ASSERT_EQUAL(i,2);
     141
     142  i=0;
     143  for (OC::iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
     144    i++;
     145    CPPUNIT_ASSERT_EQUAL(i, iter->first);
     146    CPPUNIT_ASSERT_EQUAL(i, iter->second);
     147  }
     148  CPPUNIT_ASSERT_EQUAL(i,2);
     149
     150  i=0;
     151  for (OC::const_iterator iter = OContainer.begin(); iter != OContainer.end(); ++iter) {
     152    i++;
     153    CPPUNIT_ASSERT_EQUAL(i, iter->first);
     154    CPPUNIT_ASSERT_EQUAL(i, iter->second);
     155  }
     156  CPPUNIT_ASSERT_EQUAL(i,2);
     157
     158  i=3;
     159  for (OC::reverse_internal_iterator iter = OContainer.rbegin_internal(); iter != OContainer.rend_internal(); ++iter) {
     160    i--;
     161    CPPUNIT_ASSERT_EQUAL(i, iter->first);
     162    CPPUNIT_ASSERT_EQUAL(i, iter->second);
     163  }
     164  CPPUNIT_ASSERT_EQUAL(i,1);
     165
     166  /* @todo TODO: Check whether dereferencing ObservedContainer::reverse_iterator
     167   *  is working now.
     168   * I am quite convinced that the reason for us having to use a
     169   * const_reverse_iterator below is in stl_iterator.h, where operator* is
     170   * implemented with a temporary _Iterator that is returned, i.e. a
     171   * temporary object and we are not allowed to dereference from this
     172   * temporary object.
     173   */
     174  i=3;
     175  for (OC::reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
     176    i--;
     177    OC::const_reverse_iterator helper = iter;
     178    CPPUNIT_ASSERT_EQUAL(i, helper->first);
     179    CPPUNIT_ASSERT_EQUAL(i, helper->second);
     180  }
     181  CPPUNIT_ASSERT_EQUAL(i,1);
     182
     183  i=3;
     184  for (OC::const_reverse_iterator iter = OContainer.rbegin(); iter != OContainer.rend(); ++iter) {
     185    i--;
     186    CPPUNIT_ASSERT_EQUAL(i, iter->first);
     187    CPPUNIT_ASSERT_EQUAL(i, iter->second);
     188  }
     189  CPPUNIT_ASSERT_EQUAL(i,1);
     190}
     191
    123192// @todo TODO: Check whether ObservedContainer with sets not maps is working now
    124193void ObservedContainerTest::IteratorSetTest()
    125194{
    126 //  typedef ObservedContainer< std::set<int> > OC;
     195//  typedef ObservedContainer< std::set<int>, ObservedIterator<std::set<int> > > OC;
    127196//  OC OContainer(simpleObservable1);
    128197//  int i;
  • src/Observer/unittests/ObservedContainerUnitTest.hpp

    rba6aa5 r9e619e  
    3131  CPPUNIT_TEST_SUITE( ObservedContainerTest ) ;
    3232  CPPUNIT_TEST ( IteratorMapTest );
     33  CPPUNIT_TEST ( IteratorMapNotObservedTest );
    3334  CPPUNIT_TEST ( IteratorSetTest );
    3435  CPPUNIT_TEST_SUITE_END();
     
    3940
    4041  void IteratorMapTest();
     42  void IteratorMapNotObservedTest();
    4143  void IteratorSetTest();
    4244
Note: See TracChangeset for help on using the changeset viewer.