00001 /* 00002 00003 ************************************************************************* 00004 00005 ArmageTron -- Just another Tron Lightcycle Game in 3D. 00006 Copyright (C) 2000 Manuel Moos (manuel@moosnet.de) 00007 00008 ************************************************************************** 00009 00010 This program is free software; you can redistribute it and/or 00011 modify it under the terms of the GNU General Public License 00012 as published by the Free Software Foundation; either version 2 00013 of the License, or (at your option) any later version. 00014 00015 This program is distributed in the hope that it will be useful, 00016 but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 GNU General Public License for more details. 00019 00020 You should have received a copy of the GNU General Public License 00021 along with this program; if not, write to the Free Software 00022 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00023 00024 *************************************************************************** 00025 00026 */ 00027 00028 #ifndef ArmageTron_REFERENCEHOLDER_H 00029 #define ArmageTron_REFERENCEHOLDER_H 00030 00031 #include "tArray.h" 00032 #include "tSafePTR.h" 00033 00034 template< class T > class tReferenceHolder 00035 { 00036 tArray< tControlledPTR< T > > references_; 00037 00038 public: 00039 void ReleaseAll() 00040 { 00041 for ( int i = references_.Len()-1; i >= 0; --i ) 00042 { 00043 references_[i] = NULL; 00044 } 00045 00046 references_.SetLen( 0 ); 00047 } 00048 00049 void Add( T* obj ) 00050 { 00051 for ( int i = references_.Len()-1; i >= 0; --i ) 00052 { 00053 if ( references_[i] == obj ) 00054 { 00055 return; 00056 } 00057 } 00058 00059 references_[ references_.Len() ] = obj; 00060 } 00061 00062 void Remove( T* obj ) 00063 { 00064 int iLast = references_.Len()-1; 00065 for ( int i = iLast; i >= 0; --i ) 00066 { 00067 if ( references_[ i ] == obj ) 00068 { 00069 references_[ i ] = references_[ iLast ]; 00070 references_[ iLast ] = NULL; 00071 references_.SetLen( iLast ); 00072 } 00073 } 00074 } 00075 }; 00076 00077 #endif