00001 // Copyright NVIDIA Corporation 2002-2004 00002 // TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED 00003 // *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS 00004 // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY 00005 // AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS 00006 // BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES 00007 // WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, 00008 // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) 00009 // ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS 00010 // BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES 00011 00012 #pragma once 00013 00014 #include "nvsgcommon.h" 00015 00016 namespace nvutil { 00017 00019 00022 class Incarnation 00023 { 00024 public: 00026 00027 Incarnation() : m_incarnation(-1) {} 00028 00030 00031 explicit Incarnation(int incarnation) : m_incarnation(incarnation) {} 00032 00034 00035 Incarnation& operator=(const Incarnation& rhs); 00036 00038 00039 Incarnation& operator=(int incarnation); 00040 00042 00044 bool operator==(const Incarnation& rhs); 00045 00047 00049 bool operator!=(const Incarnation& rhs); 00050 00052 00054 Incarnation& operator++(); // prefix ++ 00055 00057 00060 const Incarnation operator++(int); // postfix ++ 00061 00062 private: 00063 int m_incarnation; 00064 }; 00065 00066 inline Incarnation& Incarnation::operator=(const Incarnation& rhs) 00067 { 00068 if ( this!=&rhs ) 00069 { 00070 m_incarnation=rhs.m_incarnation; 00071 } 00072 return *this; 00073 } 00074 00075 inline Incarnation& Incarnation::operator=(int incarnation) 00076 { 00077 m_incarnation=incarnation; 00078 return *this; 00079 } 00080 00081 inline bool Incarnation::operator==(const Incarnation& rhs) 00082 { 00083 return m_incarnation==rhs.m_incarnation; 00084 } 00085 00086 inline bool Incarnation::operator!=(const Incarnation& rhs) 00087 { 00088 return m_incarnation!=rhs.m_incarnation; 00089 } 00090 00091 inline Incarnation& Incarnation::operator++() 00092 { 00093 ++m_incarnation; 00094 return *this; 00095 } 00096 00097 inline const Incarnation Incarnation::operator++(int) 00098 { 00099 return Incarnation(m_incarnation++); 00100 } 00101 00102 } // namespace nvutil 00103