Changeset 9e619e for src/CodePatterns
- Timestamp:
- Dec 13, 2015, 5:37:05 PM (10 years ago)
- 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)
- Location:
- src/CodePatterns/Observer
- Files:
-
- 1 added
- 2 edited
-
ObservedContainer.hpp (modified) (3 diffs)
-
ObservedContainer_impl.hpp (modified) (3 diffs)
-
UnobservedIterator.hpp (added)
Legend:
- Unmodified
- Added
- Removed
-
src/CodePatterns/Observer/ObservedContainer.hpp
rba6aa5 r9e619e 14 14 #endif 15 15 16 #include <iterator> 16 17 #include <utility> 18 17 19 #include "CodePatterns/Observer/ObservedIterator.hpp" 20 #include "CodePatterns/Observer/UnobservedIterator.hpp" 18 21 19 22 /** … … 24 27 * World class 25 28 */ 26 template <class Container >29 template <class Container, class Iterator = ObservedIterator<Container> > 27 30 class ObservedContainer 28 31 { … … 34 37 typedef typename std::reverse_iterator<internal_iterator> reverse_internal_iterator; 35 38 39 typedef Iterator iterator; 36 40 // typedefs for iterator structure 37 typedef ObservedIterator<set_t> iterator;38 41 typedef typename set_t::const_iterator const_iterator; 39 42 typedef typename std::reverse_iterator<iterator> reverse_iterator; -
src/CodePatterns/Observer/ObservedContainer_impl.hpp
rba6aa5 r9e619e 16 16 #include "CodePatterns/Observer/ObservedContainer.hpp" 17 17 18 template <class Container >19 inline ObservedContainer<Container >::ObservedContainer(Observable* _obs) :18 template <class Container, class Iterator> 19 inline ObservedContainer<Container, Iterator>::ObservedContainer(Observable* _obs) : 20 20 obs(_obs) 21 21 {} 22 22 23 template <class Container >24 inline ObservedContainer<Container >::ObservedContainer(const ObservedContainer<Container> &src) :23 template <class Container, class Iterator> 24 inline ObservedContainer<Container, Iterator>::ObservedContainer(const ObservedContainer<Container, Iterator> &src) : 25 25 content(src.content), 26 26 obs(src.obs) 27 27 {} 28 28 29 template <class Container >30 inline ObservedContainer<Container >::~ObservedContainer()29 template <class Container, class Iterator> 30 inline ObservedContainer<Container, Iterator>::~ObservedContainer() 31 31 {} 32 32 33 template <class Container >34 inline 35 ObservedContainer<Container >&36 ObservedContainer<Container >::operator=(const ObservedContainer<Container> &rhs){33 template <class Container, class Iterator> 34 inline 35 ObservedContainer<Container, Iterator>& 36 ObservedContainer<Container, Iterator>::operator=(const ObservedContainer<Container, Iterator> &rhs){ 37 37 content=rhs.content; 38 38 return *this; 39 39 } 40 40 41 template <class Container >42 inline 43 typename ObservedContainer<Container >::iterator44 ObservedContainer<Container >::begin(){45 return ObservedContainer<Container >::iterator(content.begin(),obs);46 } 47 48 template <class Container >49 inline 50 typename ObservedContainer<Container >::const_iterator51 ObservedContainer<Container >::begin() const{41 template <class Container, class Iterator> 42 inline 43 typename ObservedContainer<Container, Iterator>::iterator 44 ObservedContainer<Container, Iterator>::begin(){ 45 return ObservedContainer<Container, Iterator>::iterator(content.begin(),obs); 46 } 47 48 template <class Container, class Iterator> 49 inline 50 typename ObservedContainer<Container, Iterator>::const_iterator 51 ObservedContainer<Container, Iterator>::begin() const{ 52 52 return content.begin(); 53 53 } 54 54 55 template <class Container >56 inline 57 typename ObservedContainer<Container >::iterator58 ObservedContainer<Container >::end(){59 return ObservedContainer<Container >::iterator(content.end(),obs);60 } 61 62 template <class Container >63 inline 64 typename ObservedContainer<Container >::const_iterator65 ObservedContainer<Container >::end() const{55 template <class Container, class Iterator> 56 inline 57 typename ObservedContainer<Container, Iterator>::iterator 58 ObservedContainer<Container, Iterator>::end(){ 59 return ObservedContainer<Container, Iterator>::iterator(content.end(),obs); 60 } 61 62 template <class Container, class Iterator> 63 inline 64 typename ObservedContainer<Container, Iterator>::const_iterator 65 ObservedContainer<Container, Iterator>::end() const{ 66 66 return content.end(); 67 67 } 68 68 69 template <class Container >70 inline 71 typename ObservedContainer<Container >::reverse_iterator72 ObservedContainer<Container >::rbegin(){69 template <class Container, class Iterator> 70 inline 71 typename ObservedContainer<Container, Iterator>::reverse_iterator 72 ObservedContainer<Container, Iterator>::rbegin(){ 73 73 return reverse_iterator(end()); 74 74 } 75 75 76 template <class Container >77 inline 78 typename ObservedContainer<Container >::const_reverse_iterator79 ObservedContainer<Container >::rbegin() const{76 template <class Container, class Iterator> 77 inline 78 typename ObservedContainer<Container, Iterator>::const_reverse_iterator 79 ObservedContainer<Container, Iterator>::rbegin() const{ 80 80 return const_reverse_iterator(end()); 81 81 } 82 82 83 template <class Container >84 inline 85 typename ObservedContainer<Container >::reverse_iterator86 ObservedContainer<Container >::rend(){83 template <class Container, class Iterator> 84 inline 85 typename ObservedContainer<Container, Iterator>::reverse_iterator 86 ObservedContainer<Container, Iterator>::rend(){ 87 87 return reverse_iterator(begin()); 88 88 } 89 89 90 template <class Container >91 inline 92 typename ObservedContainer<Container >::const_reverse_iterator93 ObservedContainer<Container >::rend() const{90 template <class Container, class Iterator> 91 inline 92 typename ObservedContainer<Container, Iterator>::const_reverse_iterator 93 ObservedContainer<Container, Iterator>::rend() const{ 94 94 return const_reverse_iterator(begin()); 95 95 } 96 96 97 template <class Container >98 inline bool ObservedContainer<Container >::empty() const{97 template <class Container, class Iterator> 98 inline bool ObservedContainer<Container, Iterator>::empty() const{ 99 99 return content.empty(); 100 100 } 101 101 102 template <class Container >103 inline size_t ObservedContainer<Container >::size() const{102 template <class Container, class Iterator> 103 inline size_t ObservedContainer<Container, Iterator>::size() const{ 104 104 return content.size(); 105 105 } 106 106 107 template <class Container >108 inline size_t ObservedContainer<Container >::max_size() const{107 template <class Container, class Iterator> 108 inline size_t ObservedContainer<Container, Iterator>::max_size() const{ 109 109 return content.max_size(); 110 110 } 111 111 112 template <class Container >113 inline 114 typename ObservedContainer<Container >::mapped_type &115 ObservedContainer<Container >::operator[](const key_type &key){112 template <class Container, class Iterator> 113 inline 114 typename ObservedContainer<Container, Iterator>::mapped_type & 115 ObservedContainer<Container, Iterator>::operator[](const key_type &key){ 116 116 return content[key]; 117 117 } 118 118 119 template <class Container >120 inline 121 std::pair<typename ObservedContainer<Container >::iterator,bool>122 ObservedContainer<Container >::insert (const value_type &value){119 template <class Container, class Iterator> 120 inline 121 std::pair<typename ObservedContainer<Container, Iterator>::iterator,bool> 122 ObservedContainer<Container, Iterator>::insert (const value_type &value){ 123 123 std::pair<typename set_t::iterator,bool> res = content.insert(value); 124 124 return std::make_pair(iterator(res.first,obs),res.second); 125 125 } 126 126 127 template <class Container >128 inline size_t ObservedContainer<Container >::erase ( const key_type& x ){127 template <class Container, class Iterator> 128 inline size_t ObservedContainer<Container, Iterator>::erase ( const key_type& x ){ 129 129 return content.erase(x); 130 130 } 131 131 132 template <class Container >133 inline void ObservedContainer<Container >::clear(){132 template <class Container, class Iterator> 133 inline void ObservedContainer<Container, Iterator>::clear(){ 134 134 content.clear(); 135 135 } 136 136 137 template <class Container >138 inline 139 typename ObservedContainer<Container >::iterator140 ObservedContainer<Container >::find ( const key_type& x ){137 template <class Container, class Iterator> 138 inline 139 typename ObservedContainer<Container, Iterator>::iterator 140 ObservedContainer<Container, Iterator>::find ( const key_type& x ){ 141 141 return iterator(content.find(x),obs); 142 142 } 143 143 144 template <class Container >145 inline 146 typename ObservedContainer<Container >::const_iterator147 ObservedContainer<Container >::find ( const key_type& x ) const{144 template <class Container, class Iterator> 145 inline 146 typename ObservedContainer<Container, Iterator>::const_iterator 147 ObservedContainer<Container, Iterator>::find ( const key_type& x ) const{ 148 148 return content.find(x); 149 149 } 150 150 151 template <class Container >152 inline size_t ObservedContainer<Container >::count ( const key_type& x ) const{151 template <class Container, class Iterator> 152 inline size_t ObservedContainer<Container, Iterator>::count ( const key_type& x ) const{ 153 153 return content.count(x); 154 154 } … … 156 156 /************ Unprotected access ***************/ 157 157 158 template <class Container >159 inline 160 typename ObservedContainer<Container >::internal_iterator161 ObservedContainer<Container >::begin_internal(){158 template <class Container, class Iterator> 159 inline 160 typename ObservedContainer<Container, Iterator>::internal_iterator 161 ObservedContainer<Container, Iterator>::begin_internal(){ 162 162 return content.begin(); 163 163 } 164 164 165 template <class Container >166 inline 167 typename ObservedContainer<Container >::internal_iterator168 ObservedContainer<Container >::end_internal(){165 template <class Container, class Iterator> 166 inline 167 typename ObservedContainer<Container, Iterator>::internal_iterator 168 ObservedContainer<Container, Iterator>::end_internal(){ 169 169 return content.end(); 170 170 } 171 171 172 template <class Container >173 inline 174 typename ObservedContainer<Container >::reverse_internal_iterator175 ObservedContainer<Container >::rbegin_internal(){172 template <class Container, class Iterator> 173 inline 174 typename ObservedContainer<Container, Iterator>::reverse_internal_iterator 175 ObservedContainer<Container, Iterator>::rbegin_internal(){ 176 176 return content.rbegin(); 177 177 } 178 178 179 template <class Container >180 inline 181 typename ObservedContainer<Container >::reverse_internal_iterator182 ObservedContainer<Container >::rend_internal(){179 template <class Container, class Iterator> 180 inline 181 typename ObservedContainer<Container, Iterator>::reverse_internal_iterator 182 ObservedContainer<Container, Iterator>::rend_internal(){ 183 183 return content.rend(); 184 184 } 185 185 186 template <class Container >187 inline 188 typename ObservedContainer<Container >::set_t &189 ObservedContainer<Container >::getContent(){186 template <class Container, class Iterator> 187 inline 188 typename ObservedContainer<Container, Iterator>::set_t & 189 ObservedContainer<Container, Iterator>::getContent(){ 190 190 return content; 191 191 } … … 193 193 /************ Explicit instantiation ***************/ 194 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(); \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(); \ 219 219 220 220 #endif /* OBSERVEDCONTAINER_IMPL_HPP_ */
Note:
See TracChangeset
for help on using the changeset viewer.
