source: src/CodePatterns/Observer/ObservedContainer_impl.hpp@ c6a59b

Last change on this file since c6a59b was 9e619e, checked in by Frederik Heber <heber@…>, 10 years ago

Added UnobservedIterator to allow for an "unobserved" ObservedContainer.

  • Property mode set to 100644
File size: 8.2 KB
RevLine 
[a80f419]1/*
2 * AtomSet_impl.hpp
3 *
4 * Created on: Jul 8, 2010
5 * Author: crueger
6 */
7
8#ifndef OBSERVEDCONTAINER_IMPL_HPP_
9#define OBSERVEDCONTAINER_IMPL_HPP_
10
[70672e3]11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
[9b8fa4]16#include "CodePatterns/Observer/ObservedContainer.hpp"
[a80f419]17
[9e619e]18template <class Container, class Iterator>
19inline ObservedContainer<Container, Iterator>::ObservedContainer(Observable* _obs) :
[a80f419]20 obs(_obs)
21{}
22
[9e619e]23template <class Container, class Iterator>
24inline ObservedContainer<Container, Iterator>::ObservedContainer(const ObservedContainer<Container, Iterator> &src) :
[a80f419]25 content(src.content),
26 obs(src.obs)
27{}
28
[9e619e]29template <class Container, class Iterator>
30inline ObservedContainer<Container, Iterator>::~ObservedContainer()
[a80f419]31{}
32
[9e619e]33template <class Container, class Iterator>
[a80f419]34inline
[9e619e]35ObservedContainer<Container, Iterator>&
36ObservedContainer<Container, Iterator>::operator=(const ObservedContainer<Container, Iterator> &rhs){
[a80f419]37 content=rhs.content;
38 return *this;
39}
40
[9e619e]41template <class Container, class Iterator>
[a80f419]42inline
[9e619e]43typename ObservedContainer<Container, Iterator>::iterator
44ObservedContainer<Container, Iterator>::begin(){
45 return ObservedContainer<Container, Iterator>::iterator(content.begin(),obs);
[a80f419]46}
47
[9e619e]48template <class Container, class Iterator>
[a80f419]49inline
[9e619e]50typename ObservedContainer<Container, Iterator>::const_iterator
51ObservedContainer<Container, Iterator>::begin() const{
[a80f419]52 return content.begin();
53}
54
[9e619e]55template <class Container, class Iterator>
[a80f419]56inline
[9e619e]57typename ObservedContainer<Container, Iterator>::iterator
58ObservedContainer<Container, Iterator>::end(){
59 return ObservedContainer<Container, Iterator>::iterator(content.end(),obs);
[a80f419]60}
61
[9e619e]62template <class Container, class Iterator>
[a80f419]63inline
[9e619e]64typename ObservedContainer<Container, Iterator>::const_iterator
65ObservedContainer<Container, Iterator>::end() const{
[a80f419]66 return content.end();
67}
68
[9e619e]69template <class Container, class Iterator>
[a80f419]70inline
[9e619e]71typename ObservedContainer<Container, Iterator>::reverse_iterator
72ObservedContainer<Container, Iterator>::rbegin(){
[d3926b5]73 return reverse_iterator(end());
[a80f419]74}
75
[9e619e]76template <class Container, class Iterator>
[a80f419]77inline
[9e619e]78typename ObservedContainer<Container, Iterator>::const_reverse_iterator
79ObservedContainer<Container, Iterator>::rbegin() const{
[d3926b5]80 return const_reverse_iterator(end());
[a80f419]81}
82
[9e619e]83template <class Container, class Iterator>
[a80f419]84inline
[9e619e]85typename ObservedContainer<Container, Iterator>::reverse_iterator
86ObservedContainer<Container, Iterator>::rend(){
[d3926b5]87 return reverse_iterator(begin());
[a80f419]88}
89
[9e619e]90template <class Container, class Iterator>
[a80f419]91inline
[9e619e]92typename ObservedContainer<Container, Iterator>::const_reverse_iterator
93ObservedContainer<Container, Iterator>::rend() const{
[d3926b5]94 return const_reverse_iterator(begin());
[a80f419]95}
96
[9e619e]97template <class Container, class Iterator>
98inline bool ObservedContainer<Container, Iterator>::empty() const{
[a80f419]99 return content.empty();
100}
101
[9e619e]102template <class Container, class Iterator>
103inline size_t ObservedContainer<Container, Iterator>::size() const{
[a80f419]104 return content.size();
105}
106
[9e619e]107template <class Container, class Iterator>
108inline size_t ObservedContainer<Container, Iterator>::max_size() const{
[a80f419]109 return content.max_size();
110}
111
[9e619e]112template <class Container, class Iterator>
[a80f419]113inline
[9e619e]114typename ObservedContainer<Container, Iterator>::mapped_type &
115ObservedContainer<Container, Iterator>::operator[](const key_type &key){
[a80f419]116 return content[key];
117}
118
[9e619e]119template <class Container, class Iterator>
[a80f419]120inline
[9e619e]121std::pair<typename ObservedContainer<Container, Iterator>::iterator,bool>
122ObservedContainer<Container, Iterator>::insert (const value_type &value){
[a80f419]123 std::pair<typename set_t::iterator,bool> res = content.insert(value);
124 return std::make_pair(iterator(res.first,obs),res.second);
125}
126
[9e619e]127template <class Container, class Iterator>
128inline size_t ObservedContainer<Container, Iterator>::erase ( const key_type& x ){
[a80f419]129 return content.erase(x);
130}
131
[9e619e]132template <class Container, class Iterator>
133inline void ObservedContainer<Container, Iterator>::clear(){
[a80f419]134 content.clear();
135}
136
[9e619e]137template <class Container, class Iterator>
[a80f419]138inline
[9e619e]139typename ObservedContainer<Container, Iterator>::iterator
140ObservedContainer<Container, Iterator>::find ( const key_type& x ){
[a80f419]141 return iterator(content.find(x),obs);
142}
143
[9e619e]144template <class Container, class Iterator>
[a80f419]145inline
[9e619e]146typename ObservedContainer<Container, Iterator>::const_iterator
147ObservedContainer<Container, Iterator>::find ( const key_type& x ) const{
[a80f419]148 return content.find(x);
149}
150
[9e619e]151template <class Container, class Iterator>
152inline size_t ObservedContainer<Container, Iterator>::count ( const key_type& x ) const{
[a80f419]153 return content.count(x);
154}
155
156/************ Unprotected access ***************/
157
[9e619e]158template <class Container, class Iterator>
[a80f419]159inline
[9e619e]160typename ObservedContainer<Container, Iterator>::internal_iterator
161ObservedContainer<Container, Iterator>::begin_internal(){
[a80f419]162 return content.begin();
163}
164
[9e619e]165template <class Container, class Iterator>
[a80f419]166inline
[9e619e]167typename ObservedContainer<Container, Iterator>::internal_iterator
168ObservedContainer<Container, Iterator>::end_internal(){
[a80f419]169 return content.end();
170}
171
[9e619e]172template <class Container, class Iterator>
[a80f419]173inline
[9e619e]174typename ObservedContainer<Container, Iterator>::reverse_internal_iterator
175ObservedContainer<Container, Iterator>::rbegin_internal(){
[a80f419]176 return content.rbegin();
177}
178
[9e619e]179template <class Container, class Iterator>
[a80f419]180inline
[9e619e]181typename ObservedContainer<Container, Iterator>::reverse_internal_iterator
182ObservedContainer<Container, Iterator>::rend_internal(){
[a80f419]183 return content.rend();
184}
185
[9e619e]186template <class Container, class Iterator>
[a80f419]187inline
[9e619e]188typename ObservedContainer<Container, Iterator>::set_t &
189ObservedContainer<Container, Iterator>::getContent(){
[a80f419]190 return content;
191}
192
193/************ Explicit instantiation ***************/
194
[9e619e]195#define CONSTRUCT_OBSERVEDCONTAINER(container, name) \
196 template ObservedContainer< container, name >& ObservedContainer< container, name >::operator=(const ObservedContainer< container, name >&); \
197 template ObservedContainer< container, name >::iterator ObservedContainer< container, name >::begin(); \
198 template ObservedContainer< container, name >::const_iterator ObservedContainer< container, name >::begin() const; \
199 template ObservedContainer< container, name >::iterator ObservedContainer< container, name >::end(); \
200 template ObservedContainer< container, name >::const_iterator ObservedContainer< container, name >::end() const; \
201 template ObservedContainer< container, name >::reverse_iterator ObservedContainer< container, name >::rbegin(); \
202 template ObservedContainer< container, name >::const_reverse_iterator ObservedContainer< container, name >::rbegin() const; \
203 template ObservedContainer< container, name >::reverse_iterator ObservedContainer< container, name >::rend(); \
204 template ObservedContainer< container, name >::const_reverse_iterator ObservedContainer< container, name >::rend() const; \
205 template bool ObservedContainer< container, name >::empty() const; \
206 template size_t ObservedContainer< container, name >::size() const; \
207 template size_t ObservedContainer< container, name >::max_size() const; \
208 template ObservedContainer< container, name >::mapped_type &ObservedContainer< container, name >::operator[](const key_type&); \
209 template std::pair<ObservedContainer< container, name >::iterator,bool> ObservedContainer< container, name >::insert (const value_type&); \
210 template size_t ObservedContainer< container, name >::erase ( const key_type& x ); \
211 template void ObservedContainer< container, name >::clear(); \
212 template ObservedContainer< container, name >::iterator ObservedContainer< container, name >::find ( const key_type& x ); \
213 template ObservedContainer< container, name >::const_iterator ObservedContainer< container, name >::find ( const key_type& x ) const; \
214 template size_t ObservedContainer< container, name >::count ( const key_type& x ) const; \
215 template ObservedContainer< container, name >::internal_iterator ObservedContainer< container, name >::begin_internal(); \
216 template ObservedContainer< container, name >::reverse_internal_iterator ObservedContainer< container, name >::rbegin_internal(); \
217 template ObservedContainer< container, name >::internal_iterator ObservedContainer< container, name >::end_internal(); \
218 template ObservedContainer< container, name >::reverse_internal_iterator ObservedContainer< container, name >::rend_internal(); \
[a80f419]219
220#endif /* OBSERVEDCONTAINER_IMPL_HPP_ */
Note: See TracBrowser for help on using the repository browser.