| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- ** Command & Conquer Generals Zero Hour(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /******************************************************************************
- *
- * FILE
- * $Archive: $
- *
- * DESCRIPTION
- * Base class for reference counted classes.
- * Use with the reference counting smart pointer RefPtr<Type>
- *
- * Release() is virtual. This helps support cached object and singletons
- *
- * PROGRAMMER
- * Steven Clinard
- * $Author: $
- *
- * VERSION INFO
- * $Modtime: $
- * $Revision: $
- *
- ******************************************************************************/
- #ifndef REFCOUNTED_H
- #define REFCOUNTED_H
- #include <assert.h>
- class RefCounted
- {
- protected:
- RefCounted()
- : mRefCount(0)
- {}
- RefCounted(const RefCounted&)
- : mRefCount(0)
- {}
- inline const RefCounted& operator=(const RefCounted&)
- {}
- virtual ~RefCounted()
- {assert(mRefCount == 0);}
- // Should not be allowed by default
- inline virtual bool operator==(const RefCounted&) const
- {return false;}
- inline bool operator!=(const RefCounted&) const
- {return false;}
- // Add reference
- inline void AddReference(void)
- {++mRefCount;}
- // Release reference
- inline virtual void Release(void)
- {if (--mRefCount == 0) delete this;}
- inline int ReferenceCount(void) const
- {return mRefCount;}
- private:
- friend class RefPtrBase;
- unsigned int mRefCount;
- };
- #endif // REFCOUNTED_H
|