source: src/Patterns/ObservedContainer_impl.hpp@ d3926b5

Last change on this file since d3926b5 was d3926b5, checked in by Frederik Heber <heber@…>, 15 years ago

BUGFIX: ObservedContainer::reverse_iterator was wrong way implemnted.

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