123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _SIMPERSISTID_H_
- #define _SIMPERSISTID_H_
- #ifndef _TORQUE_UUID_H_
- #include "core/util/uuid.h"
- #endif
- #ifndef _REFBASE_H_
- #include "core/util/refBase.h"
- #endif
- #ifndef _ENGINEOBJECT_H_
- #include "console/engineObject.h"
- #endif
- /// @file
- /// Persistent IDs for SimObjects.
- class SimObject;
- template< typename, typename > class HashTable;
- /// A globally unique persistent ID for a SimObject.
- class SimPersistID : public EngineObject
- {
- public:
- DECLARE_CLASS(SimPersistID, EngineObject);
-
- typedef void Parent;
- friend class SimObject;
- ///
- SimPersistID();
- /// Construct a new persistent ID for "object" by generating a fresh
- /// unique identifier.
- SimPersistID(SimObject* object);
- /// Construct a persistent ID stub for the given unique identifier.
- /// The stub remains not bound to any object until it is resolved.
- SimPersistID(const Torque::UUID& uuid);
- ///
- ~SimPersistID();
-
- protected:
-
- typedef HashTable< Torque::UUID, SimPersistID* > LookupTableType;
-
- /// Reference to the SimObject. Will be NULL for as long as the
- /// persistent ID is not resolved.
- SimObject* mObject;
-
- /// The UUID assigned to the object. Never changes.
- Torque::UUID mUUID;
-
- /// Table of persistent object IDs.
- static LookupTableType* smLookupTable;
-
- /// Bind this unresolved PID to the given object.
- void resolve( SimObject* object );
-
- ///
- void unresolve() { mObject = NULL; }
- /// Create a persistent ID for the given object.
- static SimPersistID* create( SimObject* object );
-
- public:
-
- /// Initialize the persistent ID system.
- static void init();
-
- /// Uninitialize the persistent ID system.
- static void shutdown();
-
- /// Look up a persistent ID by its UUID. Return NULL if no PID is bound to the given UUID.
- static SimPersistID* find( const Torque::UUID& uuid );
- /// Look up a persistent ID by its UUID. If no PID is bound to the given UUID yet, create a
- /// new PID and bind it to the UUID.
- static SimPersistID* findOrCreate( const Torque::UUID& uuid );
-
- /// Find a SimObject by the UUID assigned to its PID. Return NULL if either no PID is bound
- /// to the given UUID or if the PID bound to it is not yet resolved.
- static SimObject* findObjectByUUID( const Torque::UUID& uuid );
-
- /// Return the object that is bound to this PID. If the PID has not yet been resolved,
- /// return NULL.
- SimObject* getObject() const { return mObject; }
-
- /// Return the UUID bound to this PID.
- const Torque::UUID& getUUID() const { return mUUID; }
- };
- #endif // !_SIMPERSISTID_H_
|