Branch data Line data Source code
1 : : //- Class: TDUniqueId
2 : : //- Owner: Tim Tautges
3 : : //- Description: This tool data generates unique ids using a random number
4 : : //- generator, and keeps an id in this object
5 : : //- A NOTE ABOUT RANDOM NUMBER GENERATION USED IN THIS CLASS:
6 : : //- A 3rd party random number generator is used in this class, to overcome limitations
7 : : //- of the (16-bit) random number generator on windows systems. This generator is in
8 : : //- the TRandomMersenne class; see that class for documentation of the actual RNG source.
9 : : //- In this class (TDUniqueId), the random number generator is seeded DURING THE FIRST CALL
10 : : //- TO GET A UNIQUE ID with the output of time(NULL). This "function-static" method is
11 : : //- used to further randomize the seed to decrease the liklihood of getting duplicate uids.
12 : : //-
13 : : //- Checked By:
14 : : //- Version:
15 : :
16 : : #ifndef TD_UNIQUE_ID
17 : : #define TD_UNIQUE_ID
18 : :
19 : : #include "ToolData.hpp"
20 : : #include "MemoryManager.hpp"
21 : : #include "CubitDefines.h"
22 : : #include "CGMGeomConfigure.h"
23 : : #include <map>
24 : :
25 : : template <class X> class DLIList;
26 : : class ToolDataUser;
27 : : class RefEntity;
28 : : class TDUniqueId;
29 : :
30 : : typedef std::multimap<long, TDUniqueId*> TDUIDList;
31 : :
32 : : //This map is used when copying an entity. It maps the unique
33 : : //id of the original to the unique id of the copy
34 : : typedef std::map<long, long> COPYUIDMap;
35 : :
36 : : class CUBIT_GEOM_EXPORT TDUniqueId : public ToolData
37 : : {
38 : : private:
39 : :
40 : : int uniqueId;
41 : : //- unique id of the owning entity
42 : :
43 : : ToolDataUser *ownerEntity;
44 : : //- back pointer to the owning entity (needed for sorted lists of
45 : : //- TDUniqueId's)
46 : :
47 : : static MemoryManager memoryManager;
48 : : //- memory management object
49 : :
50 : : static TDUIDList uniqueIdList;
51 : : //- static list of all entities containing unique ids
52 : :
53 : : static COPYUIDMap mapForCopying;
54 : : //- maps original unique id to that on copy of entity
55 : :
56 : : static int initialize();
57 : : //- initialize the random number generator
58 : :
59 : : static TDUIDList &unique_id_list();
60 : : //- get a reference to the unique id map
61 : :
62 : : public:
63 : :
64 : : static int generate_unique_id();
65 : :
66 : : TDUniqueId(ToolDataUser *owner, const int id = 0);
67 : :
68 : : virtual ~TDUniqueId();
69 : : //-constructor and destructor
70 : :
71 : : //- clear copy map
72 : : static void clear_copy_map();
73 : :
74 : : static int is_unique_id(const ToolData* td);
75 : :
76 : : static int get_unique_id(ToolDataUser *owner,
77 : : const CubitBoolean create_new = CUBIT_TRUE);
78 : : //- get the unique id for owner, or create a new one
79 : :
80 : : int unique_id(); /*{return uniqueId;};*/
81 : : void unique_id(const int id) {uniqueId = id;};
82 : : //- get/set functions for unique id
83 : :
84 : : static int get_unique_id_for_copy( int original_id );
85 : : //- when copying an entity that has unique id, gets another
86 : : //unique id for the copy
87 : :
88 : 1512 : ToolDataUser *owner_entity() {return ownerEntity;};
89 : : void owner_entity(ToolDataUser *owner) {ownerEntity = owner;};
90 : : //- get/set functions for ownerEntity
91 : :
92 : : static ToolDataUser *find_td_unique_id(const int temp_id,
93 : : const RefEntity *related_entity = NULL);
94 : : //- find the tdu with id temp_id (sorts the list if not sorted)
95 : :
96 : : static int find_td_unique_id(const int temp_id,
97 : : DLIList<ToolDataUser*> &td_list,
98 : : const RefEntity *related_entity = NULL);
99 : : //- find all tdus with id temp_id (sorts the list if not sorted); returns num found
100 : :
101 : 2628 : SetDynamicMemoryAllocation(memoryManager)
102 : : //- class specific new and delete operators
103 : :
104 : : static void set_memory_allocation_increment(int increment = 0)
105 : : {memoryManager.set_memory_allocation_increment(increment);}
106 : : //- set block memory size increment
107 : :
108 : : static void destroy_memory()
109 : : {memoryManager.destroy_memory();}
110 : : //- destroy all memory allocted to this object
111 : :
112 : : };
113 : :
114 : 3546 : inline TDUIDList &TDUniqueId::unique_id_list()
115 : : {
116 : 3546 : return uniqueIdList;
117 : : }
118 : : #endif
119 : :
120 : :
|