00001 // Copyright 2008 Michael Marsh, University of Maryland. 00002 // 00003 // This file is part of pydtn. 00004 // 00005 // pydtn is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // pydtn is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with pydtn. If not, see <http://www.gnu.org/licenses/>. 00017 // 00018 // The views and conclusions contained in the software and documentation 00019 // are those of the authors and should not be interpreted as representing 00020 // official policies, either expressed or implied, of the University 00021 // of Maryland. 00022 // 00023 // pydtn extends and embeds the Python interpreter, which is 00024 // Copyright 2001-2006 Python Software Foundation, All Rights Reserved, 00025 // and is released under the PSF License Agreement. 00026 // 00027 // RANLUX random number generation uses the Boost library, 00028 // Copyright 1994-2006 by various authors (details in individual files), 00029 // which is released under the Boost Software License, Version 1.0. 00030 00031 #include "BundlePointer.h" 00032 00033 using namespace DTN; 00034 00035 BundlePointer::BundlePointer( BundlePointerRepr* repr ) : 00036 m_repr( repr ) 00037 { 00038 } 00039 00040 BundlePointer::BundlePointer( const BundlePointer& aOther ) 00041 { 00042 if ( 0 != aOther.m_repr ) 00043 { 00044 m_repr = aOther.m_repr->clone(); 00045 } 00046 else 00047 { 00048 m_repr = 0; 00049 } 00050 } 00051 00052 BundlePointer::~BundlePointer() 00053 { 00054 if ( 0 != m_repr ) 00055 { 00056 delete m_repr; 00057 } 00058 } 00059 00060 void 00061 BundlePointer::operator=( const BundlePointer& aOther ) 00062 { 00063 if ( &aOther == this ) return; 00064 00065 if ( 0 != m_repr ) 00066 { 00067 delete m_repr; 00068 } 00069 m_repr = 0; 00070 if ( 0 != aOther.m_repr ) 00071 { 00072 m_repr = aOther.m_repr->clone(); 00073 } 00074 } 00075 00076 bool 00077 BundlePointer::operator==( const BundlePointer& bp ) 00078 { 00079 // NULL pointers are defined to be not equal to anything. 00080 if ( bp.isNull() ) return false; 00081 if ( 0 == m_repr ) return false; 00082 00083 return ( *bp.m_repr == *m_repr ); 00084 } 00085 00086 bool 00087 BundlePointer::isNull() const 00088 { 00089 return ( 0 == m_repr ); 00090 } 00091 00092 const BundlePointerRepr* 00093 BundlePointer::repr() const 00094 { 00095 return m_repr; 00096 } 00097 00098 BundlePointer 00099 BundlePointer::next() 00100 { 00101 if ( 0 == m_repr ) 00102 { 00103 return BundlePointer( 0 ); 00104 } 00105 return BundlePointer( m_repr->next() ); 00106 } 00107 00108 const BundlePointer 00109 BundlePointer::next() const 00110 { 00111 if ( 0 == m_repr ) 00112 { 00113 return BundlePointer( 0 ); 00114 } 00115 return BundlePointer( m_repr->next() ); 00116 }
1.5.4