STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ... ATLSTL - Template Software for the Active Template Library COMSTL - The Standard Template Library meets the Component Object Model .netSTL - Standard Template Library meets the Microsoft.NET Common Language Runtime InetSTL - The Standard Template Library meets WinInet MFCSTL - Template Software for the Microsoft Foundation Classes UNIXSTL - Template Software for the UNIX Operating System WinSTL - where the Standard Template Library meets the Win32 API

Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

winstl_acl_sequence.h

Go to the documentation of this file.
00001 /* 
00002  * File:        winstl_acl_sequence.h
00003  *
00004  * Purpose:     Helper for accessing token information.
00005  *
00006  * Created:     26th June 2003
00007  * Updated:     11th September 2004
00008  *
00009  * Home:        http://stlsoft.org/
00010  *
00011  * Copyright (c) 2003-2004, Matthew Wilson and Synesis Software
00012  * All rights reserved.
00013  *
00014  * Redistribution and use in source and binary forms, with or without
00015  * modification, are permitted provided that the following conditions are met:
00016  *
00017  * - Redistributions of source code must retain the above copyright notice, this
00018  *   list of conditions and the following disclaimer.
00019  * - Redistributions in binary form must reproduce the above copyright notice,
00020  *   this list of conditions and the following disclaimer in the documentation
00021  *   and/or other materials provided with the distribution.
00022  * - Neither the name(s) of Matthew Wilson and Synesis Software nor the names of
00023  *   any contributors may be used to endorse or promote products derived from
00024  *   this software without specific prior written permission.
00025  *
00026  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00027  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00028  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00029  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00030  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00031  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00032  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00033  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00034  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00035  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00036  * POSSIBILITY OF SUCH DAMAGE.
00037  *
00038  * 
00039 
00040 
00044 
00045 #ifndef WINSTL_INCL_H_WINSTL_ACL_SEQUENCE
00046 #define WINSTL_INCL_H_WINSTL_ACL_SEQUENCE
00047 
00048 #ifndef __STLSOFT_DOCUMENTATION_SKIP_SECTION
00049 # define WINSTL_VER_H_WINSTL_ACL_SEQUENCE_MAJOR     2
00050 # define WINSTL_VER_H_WINSTL_ACL_SEQUENCE_MINOR     0
00051 # define WINSTL_VER_H_WINSTL_ACL_SEQUENCE_REVISION  1
00052 # define WINSTL_VER_H_WINSTL_ACL_SEQUENCE_EDIT      11
00053 #endif /* !__STLSOFT_DOCUMENTATION_SKIP_SECTION */
00054 
00055 /* 
00056  * Includes
00057  */
00058 
00059 #ifndef WINSTL_INCL_H_WINSTL
00060 # include "winstl.h"                        // Include the WinSTL root header
00061 #endif /* WINSTL_INCL_H_WINSTL */
00062 
00063 /* 
00064  * Namespace
00065  */
00066 
00067 #ifndef _WINSTL_NO_NAMESPACE
00068 # if defined(_STLSOFT_NO_NAMESPACE) || \
00069      defined(__STLSOFT_DOCUMENTATION_SKIP_SECTION)
00070 /* There is no stlsoft namespace, so must define ::winstl */
00071 namespace winstl
00072 {
00073 # else
00074 /* Define stlsoft::winstl_project */
00075 
00076 namespace stlsoft
00077 {
00078 
00079 namespace winstl_project
00080 {
00081 
00082 # endif /* _STLSOFT_NO_NAMESPACE */
00083 #endif /* !_WINSTL_NO_NAMESPACE */
00084 
00085 /* 
00086 
00089 
00093 
00098 
00099 /* 
00100  * Classes
00101  */
00102 
00107 class acl_sequence
00108 {
00109 public:
00110     typedef acl_sequence    class_type;
00111 
00112 public:
00113     ss_explicit_k acl_sequence(PACL pacl)
00114         : m_pacl(pacl)
00115     {}
00116 
00117 public:
00119     class const_iterator
00120     {
00121     protected:
00122         friend class acl_sequence;
00123 
00124         const_iterator(ws_uint32_t count, ACE_HEADER *header)
00125             : m_index(0)
00126             , m_count(count)
00127             , m_header(header)
00128         {}
00129     public:
00130         const_iterator()
00131             : m_index(0)
00132             , m_count(0)
00133             , m_header(0)
00134         {}
00135 
00136         const_iterator(const_iterator const &rhs)
00137             : m_index(rhs.m_index)
00138             , m_count(rhs.m_count)
00139             , m_header(rhs.m_header)
00140         {}
00141 
00142         const_iterator &operator =(const_iterator const &rhs)
00143         {
00144             m_index     =   rhs.m_index;
00145             m_count     =   rhs.m_count;
00146             m_header    =   rhs.m_header;
00147 
00148             return *this;
00149         }
00150 
00151         const_iterator &operator ++()
00152         {
00153             stlsoft_message_assert("Incrementing an invalid iterator", m_header != 0 && m_index < m_count);
00154 
00155             if(++m_index == m_count)
00156             {
00157                 m_header = 0;
00158             }
00159             else
00160             {
00161                 m_header = (ACE_HEADER*)ptr_byte_offset(m_header, m_header->AceSize);
00162             }
00163 
00164             return *this;
00165         }
00166         const_iterator operator ++(int)
00167         {
00168             const_iterator  ret(*this);
00169 
00170             operator ++();
00171 
00172             return ret;
00173         }
00174 
00175         ACE_HEADER *operator *() const
00176         {
00177             stlsoft_message_assert("Dereferencing an invalid iterator", m_header != 0);
00178 
00179             return m_header;
00180         }
00181 
00182         ws_bool_t operator == (const_iterator const &rhs)
00183         {
00184             return m_header == rhs.m_header;
00185         }
00186         ws_bool_t operator != (const_iterator const &rhs)
00187         {
00188             return !operator == (rhs);
00189         }
00190 
00191     // Members
00192     private:
00193         ws_uint32_t m_index;
00194         ws_uint32_t m_count;
00195         ACE_HEADER  *m_header;
00196     };
00197 
00198     const_iterator begin() const
00199     {
00200         return const_iterator(m_pacl->AceCount, (ACE_HEADER*)(m_pacl + 1));
00201     }
00202     const_iterator end() const
00203     {
00204         return const_iterator();
00205     }
00206 
00207 public:
00208     ws_size_t   size() const
00209     {
00210         return m_pacl->AceCount;
00211     }
00212     ws_bool_t   empty() const
00213     {
00214         return 0 == size();
00215     }
00216 
00217 // Members
00218 private:
00219     PACL    m_pacl;
00220 
00221 // Not to be implemented
00222 private:
00223     acl_sequence(class_type const &);
00224     acl_sequence &operator =(class_type const &);
00225 };
00226 
00227 /* 
00228 
00230 
00231 /* 
00232 
00233 #ifndef _WINSTL_NO_NAMESPACE
00234 # if defined(_STLSOFT_NO_NAMESPACE) || \
00235      defined(__STLSOFT_DOCUMENTATION_SKIP_SECTION)
00236 } // namespace winstl
00237 # else
00238 } // namespace winstl_project
00239 } // namespace stlsoft
00240 # endif /* _STLSOFT_NO_NAMESPACE */
00241 #endif /* !_WINSTL_NO_NAMESPACE */
00242 
00243 /* 
00244 
00245 #endif /* WINSTL_INCL_H_WINSTL_ACL_SEQUENCE */
00246 
00247 /* 

STLSoft Libraries documentation © Synesis Software Pty Ltd, 2001-2004