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  

dotnetstl_dispose_functions.h

Go to the documentation of this file.
00001 /* 
00002  * File:        dotnetstl_dispose_functions.h
00003  *
00004  * Purpose:     A useful tool for accessing a String object's content as a c-string.
00005  *
00006  * Created:     24th 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 DOTNETSTL_INCL_H_DOTNETSTL_DISPOSE_FUNCTIONS
00046 #define DOTNETSTL_INCL_H_DOTNETSTL_DISPOSE_FUNCTIONS
00047 
00048 #ifndef __STLSOFT_DOCUMENTATION_SKIP_SECTION
00049 # define DOTNETSTL_VER_H_DOTNETSTL_DISPOSE_FUNCTIONS_MAJOR    2
00050 # define DOTNETSTL_VER_H_DOTNETSTL_DISPOSE_FUNCTIONS_MINOR    0
00051 # define DOTNETSTL_VER_H_DOTNETSTL_DISPOSE_FUNCTIONS_REVISION 1
00052 # define DOTNETSTL_VER_H_DOTNETSTL_DISPOSE_FUNCTIONS_EDIT     13
00053 #endif /* !__STLSOFT_DOCUMENTATION_SKIP_SECTION */
00054 
00055 /* 
00056  * Includes
00057  */
00058 
00059 #ifndef DOTNETSTL_INCL_H_DOTNETSTL
00060 # include "dotnetstl.h"                     // Include the .netSTL root header
00061 #endif /* !DOTNETSTL_INCL_H_DOTNETSTL */
00062 
00063 /* 
00064 
00065 #ifdef _STLSOFT_NO_NAMESPACE
00066 /* There is no stlsoft namespace, so must define ::dotnetstl */
00067 namespace dotnetstl
00068 {
00069 #else
00070 /* Define stlsoft::dotnet_project */
00071 
00072 namespace stlsoft
00073 {
00074 
00075 namespace dotnetstl_project
00076 {
00077 
00078 #endif /* _STLSOFT_NO_NAMESPACE */
00079 
00080 /* 
00081  * Classes
00082  */
00083 
00087 template <ss_typename_param_k T>
00088 inline void dispose_set_null(T *&pt)
00089 {
00090     if(0 != pt)
00091     {
00092         System::IDisposable *disposable =   pt;
00093 
00094         disposable->Dispose();
00095         pt = 0;
00096     }
00097 }
00098 
00102 template <ss_typename_param_k C>
00103 inline void dispose_contents(C *pc)
00104 {
00105     for(int i = 0, count = pc->get_Count(); i < count; ++i)
00106     {
00107         System::IDisposable *o  =   dynamic_cast<System::IDisposable*>(pc->get_Item(i));
00108 
00109         dispose_set_null(o);
00110     }
00111 }
00112 
00114 // Unit-testing
00115 
00116 #ifdef STLSOFT_UNITTEST
00117 
00118 namespace unittest
00119 {
00120     ss_bool_t test_dotnetstl_dispose_functions(unittest_reporter *r)
00121     {
00122         using stlsoft::unittest::unittest_initialiser;
00123 
00124         ss_bool_t               bSuccess    =   true;
00125 
00126         unittest_initialiser    init(r, ".netSTL", "dispose_functions", __FILE__);
00127 
00128 #if 0
00129         if(<<TODO>>)
00130         {
00131             r->report("<<TODO>> failed ", __LINE__);
00132             bSuccess = false;
00133         }
00134 #endif /* 0 */
00135 
00136         return bSuccess;
00137     }
00138 
00139     unittest_registrar    unittest_dotnetstl_dispose_functions(test_dotnetstl_dispose_functions);
00140 
00141 } // namespace unittest
00142 
00143 #endif /* STLSOFT_UNITTEST */
00144 
00145 /* 
00146 
00147 #ifdef _STLSOFT_NO_NAMESPACE
00148 } // namespace dotnetstl
00149 #else
00150 } // namespace dotnetstl_project
00151 } // namespace stlsoft
00152 #endif /* _STLSOFT_NO_NAMESPACE */
00153 
00154 /* 
00155 
00156 #endif /* DOTNETSTL_INCL_H_DOTNETSTL_DISPOSE_FUNCTIONS */
00157 
00158 /* 

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