source: trunk/nv/uid.hh @ 110

Last change on this file since 110 was 110, checked in by shark, 12 years ago
  • Doing a little documenting.
File size: 2.1 KB
RevLine 
[59]1// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz
2// http://chaosforge.org/
3//
4// This file is part of NV Libraries.
5// For conditions of distribution and use, see copyright notice in nv.hh
6
7/**
8 * @file uid.hh
9 * @author Kornel Kisielewicz
10 * @brief Implements a unique identifier class manager
11 */
12
13#ifndef NV_UID_HH
14#define NV_UID_HH
15
16#include <nv/common.hh>
17#include <unordered_map>
18
19namespace nv
20{
21        class uid_store
22        {
23        public:
[110]24               
25                /**
26                 *Creates a new instance of the unique indentifer store.
27                 */
[59]28                uid_store();
[110]29
30                /**
31                 *Gets the object with the specified ID.
32                 *
33                 *@param auid The ID to fetch.
34                 *@returns The stored object for that ID.
35                 */
[59]36                object* get( uid auid ) const;
[110]37
38                /**
39                 *Removes the object with the specified ID.
40                 *
41                 *@param auid The ID to remove.
42                 *@returns True if the removal was successful, false if the ID didn't exist.
43                 */
[59]44                bool remove( uid auid );
[110]45
46                /**
47                 *Adds an object to the store assigned to the indicated ID.
48                 *
49                 *@param o The object to add to the store.
50                 *@param auid The ID to assign to the object.
51                 */
[59]52                void insert( object* o, uid auid );
[110]53
54                /**
55                 *Adds an object to the store and assigns it a new ID.
56                 *
57                 *@param o The object to add to the store.
58                 *@returns The ID the object was store under.
59                 */
[59]60                uid insert( object* o );
[110]61
62                /**
63                 *Gets the next available ID.
64                 *
65                 *@returns The next ID in the store.
66                 */
[59]67                uid request_uid();
[110]68
69                /**
70                 *Destroys the unique identifier store.
71                 */
[59]72                ~uid_store();
[110]73
74                /**
75                 *Retrieves an object and casts it to the specified type.
76                 *
77                 *@tparam T The type to cast to.
78                 *@param auid The ID the object is stored under.
79                 *@returns An object of the indicated type that was stored at the indicated ID.
80                 */
[59]81                template< typename T >
82                T* get_as( uid auid ) const
83                {
84                        return dynamic_cast< T* >( get(auid) );
85                }
86        private:
87                typedef std::unordered_map< uid, object* > map;
[110]88                map m_map; ///< The hash map everything is stored in.
89                uid m_current; ///< The last UID assigned.
[59]90        };
91}
92
93#endif // NV_UID_HH
Note: See TracBrowser for help on using the repository browser.