Open-RJ C/C++ User's Journal Synesis Software STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ...

openrj/stl/iterator.hpp

Go to the documentation of this file.
00001 /* /////////////////////////////////////////////////////////////////////////////
00002  * File:    openrj/stl/iterator.hpp
00003  *
00004  * Purpose: Iterator adaptors for use with the Open-RJ STL mapping
00005  *
00006  * Created: 4th September 2005
00007  * Updated: 28th May 2006
00008  *
00009  * Home:    http://openrj.org/
00010  *
00011  * Copyright (c) 2005-2006, 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 names 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 
00047 #ifndef OPENRJ_INCL_OPENRJ_STL_HPP_ITERATOR
00048 #define OPENRJ_INCL_OPENRJ_STL_HPP_ITERATOR
00049 
00050 /* /////////////////////////////////////////////////////////////////////////////
00051  * Version information
00052  */
00053 
00054 #ifndef OPENRJ_DOCUMENTATION_SKIP_SECTION
00055 # define OPENRJ_VER_OPENRJ_STL_HPP_ITERATOR_MAJOR       1
00056 # define OPENRJ_VER_OPENRJ_STL_HPP_ITERATOR_MINOR       0
00057 # define OPENRJ_VER_OPENRJ_STL_HPP_ITERATOR_REVISION    1
00058 # define OPENRJ_VER_OPENRJ_STL_HPP_ITERATOR_EDIT        3
00059 #endif /* !OPENRJ_DOCUMENTATION_SKIP_SECTION */
00060 
00061 /* /////////////////////////////////////////////////////////////////////////////
00062  * Includes
00063  */
00064 
00065 #include <openrj/stl/openrj.hpp>
00066 #include <openrj/stl/field.hpp>
00067 
00068 /* /////////////////////////////////////////////////////////////////////////////
00069  * Compiler warnings
00070  */
00071 
00072 #ifdef __BORLANDC__
00073 # pragma warn -8027
00074 #endif /* __BORLANDC__ */
00075 
00076 /* /////////////////////////////////////////////////////////////////////////////
00077  * Namespace
00078  */
00079 
00080 namespace openrj
00081 {
00082 namespace stl
00083 {
00084 
00085 /* /////////////////////////////////////////////////////////////////////////////
00086  * Classes
00087  */
00088 
00091 template <typename C>
00092 struct field_assoc_insert_iterator
00093 {
00094 public:
00095     typedef C                               container_type;
00096     typedef field_assoc_insert_iterator<C>  class_type;
00097 
00098 public:
00103     field_assoc_insert_iterator(container_type &cont)
00104         : m_cont(cont)
00105     {}
00106 
00107     class_type &operator =(openrj::stl::field const &f)
00108     {
00109         m_cont[stlsoft::c_str_ptr(f.name())] = stlsoft::c_str_ptr(f.value());
00110 
00111         return *this;
00112     }
00113 
00114 public:
00115     class_type &operator *()
00116     {
00117         return *this;
00118     }
00119 
00120     class_type &operator ++()
00121     {
00122         return *this;
00123     }
00124 
00125     class_type &operator ++(int)
00126     {
00127         return *this;
00128     }
00129 
00130 private:
00131     container_type  &m_cont;
00132 };
00133 
00138 template <typename C>
00139 inline field_assoc_insert_iterator<C> field_assoc_inserter(C &c)
00140 {
00141     return field_assoc_insert_iterator<C>(c);
00142 }
00143 
00144 /* /////////////////////////////////////////////////////////////////////////////
00145  * Namespace
00146  */
00147 
00148 } // namespace stl
00149 } // namespace openrj
00150 
00151 /* ////////////////////////////////////////////////////////////////////////// */
00152 
00153 #endif /* !OPENRJ_INCL_OPENRJ_STL_HPP_ITERATOR */
00154 
00155 /* ////////////////////////////////////////////////////////////////////////// */

Open-RJ Library documentation © Synesis Software Pty Ltd, 2004-2005