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
00047 #ifndef WINSTL_INCL_WINSTL_SECURITY_HPP_ACL_SEQUENCE
00048 #define WINSTL_INCL_WINSTL_SECURITY_HPP_ACL_SEQUENCE
00049
00050 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00051 # define WINSTL_VER_WINSTL_SECURITY_HPP_ACL_SEQUENCE_MAJOR 4
00052 # define WINSTL_VER_WINSTL_SECURITY_HPP_ACL_SEQUENCE_MINOR 0
00053 # define WINSTL_VER_WINSTL_SECURITY_HPP_ACL_SEQUENCE_REVISION 2
00054 # define WINSTL_VER_WINSTL_SECURITY_HPP_ACL_SEQUENCE_EDIT 31
00055 #endif
00056
00057
00058
00059
00060
00061 #ifndef WINSTL_INCL_WINSTL_H_WINSTL
00062 # include <winstl/winstl.h>
00063 #endif
00064 #ifndef STLSOFT_INCL_STLSOFT_COLLECTIONS_UTIL_HPP_COLLECTIONS
00065 # include <stlsoft/collections/util/collections.hpp>
00066 #endif
00067
00068
00069
00070
00071
00072 #ifndef _WINSTL_NO_NAMESPACE
00073 # if defined(_STLSOFT_NO_NAMESPACE) || \
00074 defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00075
00076 namespace winstl
00077 {
00078 # else
00079
00080
00081 namespace stlsoft
00082 {
00083
00084 namespace winstl_project
00085 {
00086
00087 # endif
00088 #endif
00089
00090
00091
00092
00093
00101 class acl_sequence
00102 : public stlsoft_ns_qual(stl_collection_tag)
00103 {
00106 public:
00107 typedef acl_sequence class_type;
00109
00112 public:
00113 ss_explicit_k acl_sequence(PACL pacl)
00114 : m_pacl(pacl)
00115 {}
00117
00120 public:
00122 class const_iterator
00123 {
00124 protected:
00125 friend class acl_sequence;
00126
00127 const_iterator(ws_uint32_t count, ACE_HEADER *header)
00128 : m_index(0)
00129 , m_count(count)
00130 , m_header(header)
00131 {}
00132 public:
00133 const_iterator()
00134 : m_index(0)
00135 , m_count(0)
00136 , m_header(0)
00137 {}
00138
00139 const_iterator(const_iterator const& rhs)
00140 : m_index(rhs.m_index)
00141 , m_count(rhs.m_count)
00142 , m_header(rhs.m_header)
00143 {}
00144
00145 const_iterator& operator =(const_iterator const& rhs)
00146 {
00147 m_index = rhs.m_index;
00148 m_count = rhs.m_count;
00149 m_header = rhs.m_header;
00150
00151 return *this;
00152 }
00153
00154 const_iterator& operator ++()
00155 {
00156 WINSTL_MESSAGE_ASSERT("Incrementing an invalid iterator", (m_header != 0 && m_index < m_count));
00157
00158 if(++m_index == m_count)
00159 {
00160 m_header = 0;
00161 }
00162 else
00163 {
00164 m_header = (ACE_HEADER*)ptr_byte_offset(m_header, m_header->AceSize);
00165 }
00166
00167 return *this;
00168 }
00169 const_iterator operator ++(int)
00170 {
00171 const_iterator ret(*this);
00172
00173 operator ++();
00174
00175 return ret;
00176 }
00177
00178 ACE_HEADER *operator *() const
00179 {
00180 WINSTL_MESSAGE_ASSERT("Dereferencing an invalid iterator", m_header != 0);
00181
00182 return m_header;
00183 }
00184
00185 ws_bool_t operator == (const_iterator const& rhs)
00186 {
00187 return m_header == rhs.m_header;
00188 }
00189 ws_bool_t operator != (const_iterator const& rhs)
00190 {
00191 return !operator == (rhs);
00192 }
00193
00194
00195 private:
00196 ws_uint32_t m_index;
00197 ws_uint32_t m_count;
00198 ACE_HEADER *m_header;
00199 };
00200
00201 const_iterator begin() const
00202 {
00203 return const_iterator(m_pacl->AceCount, (ACE_HEADER*)(m_pacl + 1));
00204 }
00205 const_iterator end() const
00206 {
00207 return const_iterator();
00208 }
00210
00213 public:
00214 ws_size_t size() const
00215 {
00216 return m_pacl->AceCount;
00217 }
00218 ws_bool_t empty() const
00219 {
00220 return 0 == size();
00221 }
00223
00226 private:
00227 PACL m_pacl;
00229
00232 private:
00233 acl_sequence(class_type const&);
00234 acl_sequence& operator =(class_type const&);
00236 };
00237
00238
00239
00240 #ifndef _WINSTL_NO_NAMESPACE
00241 # if defined(_STLSOFT_NO_NAMESPACE) || \
00242 defined(STLSOFT_DOCUMENTATION_SKIP_SECTION)
00243 }
00244 # else
00245 }
00246 }
00247 # endif
00248 #endif
00249
00250
00251
00252 #endif
00253
00254