00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00048 #ifndef WINSTL_INCL_WINSTL_WINDOW_HPP_ZORDER_SEQUENCES
00049 #define WINSTL_INCL_WINSTL_WINDOW_HPP_ZORDER_SEQUENCES
00050
00051 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00052 # define WINSTL_VER_WINSTL_WINDOW_HPP_ZORDER_SEQUENCES_MAJOR 2
00053 # define WINSTL_VER_WINSTL_WINDOW_HPP_ZORDER_SEQUENCES_MINOR 0
00054 # define WINSTL_VER_WINSTL_WINDOW_HPP_ZORDER_SEQUENCES_REVISION 3
00055 # define WINSTL_VER_WINSTL_WINDOW_HPP_ZORDER_SEQUENCES_EDIT 15
00056 #endif
00057
00058
00059
00060
00061
00062 #ifndef WINSTL_INCL_WINSTL_H_WINSTL
00063 # include <winstl/winstl.h>
00064 #endif
00065 #ifndef WINSTL_INCL_WINSTL_WINDOW_HPP_ZORDER_ITERATOR
00066 # include <winstl/window/zorder_iterator.hpp>
00067 #endif
00068 #ifndef STLSOFT_INCL_STLSOFT_UTIL_STD_HPP_ITERATOR_HELPER
00069 # include <stlsoft/util/std/iterator_helper.hpp>
00070 #endif
00071 #ifndef STLSOFT_INCL_STLSOFT_COLLECTIONS_UTIL_HPP_COLLECTIONS
00072 # include <stlsoft/collections/util/collections.hpp>
00073 #endif
00074
00075
00076
00077
00078
00079 #ifndef _WINSTL_NO_NAMESPACE
00080 # if defined(_STLSOFT_NO_NAMESPACE) || \
00081 defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00082
00083 namespace winstl
00084 {
00085 # else
00086
00087
00088 namespace stlsoft
00089 {
00090
00091 namespace winstl_project
00092 {
00093
00094 # endif
00095 #endif
00096
00097
00098
00099
00100
00105 template< zorder_iterator_base::search B
00106 , zorder_iterator_base::search E
00107 >
00108 class zorder_sequence_base
00109 : public stlsoft_ns_qual(stl_collection_tag)
00110 {
00113 public:
00115 typedef zorder_iterator iterator;
00117 typedef iterator::value_type value_type;
00119 typedef iterator::size_type size_type;
00121 typedef iterator::difference_type difference_type;
00123 typedef zorder_iterator const_iterator;
00125 typedef iterator::base_iterator_type reverse_iterator;
00127 typedef const_iterator::base_iterator_type const_reverse_iterator;
00129 typedef zorder_sequence_base<B, E> class_type;
00131
00134 public:
00136 ss_explicit_k zorder_sequence_base(HWND hwndRoot);
00138
00141 public:
00142 iterator begin();
00143 iterator end();
00144 const_iterator begin() const;
00145 const_iterator end() const;
00146 reverse_iterator rbegin();
00147 reverse_iterator rend();
00148 const_reverse_iterator rbegin() const;
00149 const_reverse_iterator rend() const;
00151
00154 public:
00155 ws_bool_t empty() const;
00157
00160 private:
00161 HWND m_hwnd;
00163
00166 private:
00167 zorder_sequence_base(class_type const&);
00168 class_type& operator =(class_type const&);
00170 };
00171
00172
00173
00174
00175
00181 typedef zorder_sequence_base< zorder_iterator_base::fromFirstChild
00182 , zorder_iterator_base::atLastChild
00183 > child_window_sequence;
00184
00190 typedef zorder_sequence_base< zorder_iterator_base::fromFirstPeer
00191 , zorder_iterator_base::atLastPeer
00192 > window_peer_sequence;
00193
00194
00195
00196
00197
00198 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00199
00200 template< zorder_iterator_base::search B
00201 , zorder_iterator_base::search E
00202 >
00203 inline zorder_sequence_base<B, E>::zorder_sequence_base(HWND hwndRoot)
00204 : m_hwnd(hwndRoot)
00205 {}
00206
00207 template< zorder_iterator_base::search B
00208 , zorder_iterator_base::search E
00209 >
00210 inline ss_typename_type_ret_k zorder_sequence_base<B, E>::iterator zorder_sequence_base<B, E>::begin()
00211 {
00212 return iterator::create(m_hwnd, B);
00213 }
00214
00215 template< zorder_iterator_base::search B
00216 , zorder_iterator_base::search E
00217 >
00218 inline ss_typename_type_ret_k zorder_sequence_base<B, E>::iterator zorder_sequence_base<B, E>::end()
00219 {
00220 return iterator::create(m_hwnd, E);
00221 }
00222
00223 template< zorder_iterator_base::search B
00224 , zorder_iterator_base::search E
00225 >
00226 inline ss_typename_type_ret_k zorder_sequence_base<B, E>::const_iterator zorder_sequence_base<B, E>::begin() const
00227 {
00228 return const_iterator::create(m_hwnd, B);
00229 }
00230
00231 template< zorder_iterator_base::search B
00232 , zorder_iterator_base::search E
00233 >
00234 inline ss_typename_type_ret_k zorder_sequence_base<B, E>::const_iterator zorder_sequence_base<B, E>::end() const
00235 {
00236 return const_iterator::create(m_hwnd, E);
00237 }
00238
00239 template< zorder_iterator_base::search B
00240 , zorder_iterator_base::search E
00241 >
00242 inline ss_typename_type_ret_k zorder_sequence_base<B, E>::reverse_iterator zorder_sequence_base<B, E>::rbegin()
00243 {
00244 return reverse_iterator::create(m_hwnd, B);
00245 }
00246
00247 template< zorder_iterator_base::search B
00248 , zorder_iterator_base::search E
00249 >
00250 inline ss_typename_type_ret_k zorder_sequence_base<B, E>::reverse_iterator zorder_sequence_base<B, E>::rend()
00251 {
00252 return reverse_iterator::create(m_hwnd, E);
00253 }
00254
00255 template< zorder_iterator_base::search B
00256 , zorder_iterator_base::search E
00257 >
00258 inline ss_typename_type_ret_k zorder_sequence_base<B, E>::const_reverse_iterator zorder_sequence_base<B, E>::rbegin() const
00259 {
00260 return const_reverse_iterator::create(m_hwnd, B);
00261 }
00262
00263 template< zorder_iterator_base::search B
00264 , zorder_iterator_base::search E
00265 >
00266 inline ss_typename_type_ret_k zorder_sequence_base<B, E>::const_reverse_iterator zorder_sequence_base<B, E>::rend() const
00267 {
00268 return const_reverse_iterator::create(m_hwnd, E);
00269 }
00270
00271 template< zorder_iterator_base::search B
00272 , zorder_iterator_base::search E
00273 >
00274 inline ws_bool_t zorder_sequence_base<B, E>::empty() const
00275 {
00276 return end() == begin();
00277 }
00278
00279 #endif
00280
00281
00282
00283
00284
00285 #ifndef _WINSTL_NO_NAMESPACE
00286 # if defined(_STLSOFT_NO_NAMESPACE) || \
00287 defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00288 }
00289 # else
00290 }
00291 }
00292 # endif
00293 #endif
00294
00295
00296
00297 #endif
00298
00299