Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
definitionmgr.h
Go to the documentation of this file.
1/*
2** Command & Conquer Generals Zero Hour(tm)
3** Copyright 2025 Electronic Arts Inc.
4**
5** This program is free software: you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation, either version 3 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19/***********************************************************************************************
20 *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
21 ***********************************************************************************************
22 * *
23 * Project Name : WWSaveLoad *
24 * *
25 * $Archive:: /Commando/Code/wwsaveload/definitionmgr.h $*
26 * *
27 * Author:: Patrick Smith *
28 * *
29 * $Modtime:: 8/24/01 5:13p $*
30 * *
31 * $Revision:: 24 $*
32 * *
33 *---------------------------------------------------------------------------------------------*
34 * Functions: *
35 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
36
37
38#if defined(_MSC_VER)
39#pragma once
40#endif
41
42
43#ifndef __DEFINITION_MGR_H
44#define __DEFINITION_MGR_H
45
46#include "always.h"
47#include "saveload.h"
48#include "saveloadsubsystem.h"
49#include "saveloadids.h"
50#include "wwdebug.h"
51#include "wwstring.h"
52#include "hashtemplate.h"
53#include "vector.h"
54
55
56// Forward declarations
57class DefinitionClass;
58
60// Global declarations
63
65//
66// DefinitionMgrClass
67//
70{
71public:
72
74 // Public constructors/destructors
76 DefinitionMgrClass (void);
78
80 // Public methods
82
83 // From SaveLoadSubSystemClass
84 virtual uint32 Chunk_ID (void) const;
85
86 // Type identification
87 static DefinitionClass * Find_Definition (uint32 id, bool twiddle = true);
88 static DefinitionClass * Find_Named_Definition (const char *name, bool twiddle = true);
89 static DefinitionClass * Find_Typed_Definition (const char *name, uint32 class_id, bool twiddle = true);
90 static void List_Available_Definitions (void);
91 static void List_Available_Definitions (int superclass_id);
92 static uint32 Get_New_ID (uint32 class_id);
93
94 // Definition registration
95 static void Register_Definition (DefinitionClass *definition);
96 static void Unregister_Definition (DefinitionClass *definition);
97
98 //
99 // Definition enumeration
100 //
101 typedef enum
102 {
105 } ID_TYPE;
106
107 static DefinitionClass * Get_First (void);
108 static DefinitionClass * Get_First (uint32 id, ID_TYPE type = ID_CLASS);
109 static DefinitionClass * Get_Next (DefinitionClass *curr_def);
110 static DefinitionClass * Get_Next (DefinitionClass *curr_def, uint32 id, ID_TYPE type = ID_CLASS);
111
112 static void Free_Definitions (void);
113
114protected:
115
117 // Protected methods
119
120 // From SaveLoadSubSystemClass
121 virtual bool Contains_Data (void) const;
122 virtual bool Save (ChunkSaveClass &csave);
123 virtual bool Load (ChunkLoadClass &cload);
124 virtual const char* Name (void) const { return "DefinitionMgrClass"; }
125
126 // Persistence methods
127 bool Save_Objects (ChunkSaveClass &csave);
128 bool Load_Objects (ChunkLoadClass &cload);
129 bool Save_Variables (ChunkSaveClass &csave);
130 bool Load_Variables (ChunkLoadClass &cload);
131
132private:
134
136 // Private methods
138 static void Prepare_Definition_Array (void);
139 static int __cdecl fnCompareDefinitionsCallback (const void *elem1, const void *elem2);
140
142 // Static member data
144 static DefinitionClass ** _SortedDefinitionArray;
145 static int _MaxDefinitionCount;
146 static int _DefinitionCount;
147
149 // Friend classes
151 friend class DefinitionClass;
152};
153
155// Chunk_ID
157inline uint32
159{
161}
162
164// Contains_Data
166inline bool
168{
169 return true; // TODO: check if we have any definitions...
170}
171
173// Get_First_Definition
175inline DefinitionClass *
177{
178 DefinitionClass *definition = NULL;
179 if (_DefinitionCount > 0) {
180 definition = _SortedDefinitionArray[0];
181 }
182
183 return definition;
184}
185
186
187#endif //__DEFINITION_MGR_H
#define NULL
Definition BaseType.h:92
#define __cdecl
Definition IFF.H:44
unsigned long uint32
Definition bittype.h:46
virtual bool Save(ChunkSaveClass &csave)
static DefinitionClass * Find_Typed_Definition(const char *name, uint32 class_id, bool twiddle=true)
bool Load_Objects(ChunkLoadClass &cload)
static DefinitionClass * Find_Named_Definition(const char *name, bool twiddle=true)
static DefinitionClass * Get_Next(DefinitionClass *curr_def)
bool Save_Variables(ChunkSaveClass &csave)
static void Unregister_Definition(DefinitionClass *definition)
static uint32 Get_New_ID(uint32 class_id)
virtual const char * Name(void) const
bool Save_Objects(ChunkSaveClass &csave)
static DefinitionClass * Get_First(void)
bool Load_Variables(ChunkLoadClass &cload)
static void Register_Definition(DefinitionClass *definition)
virtual uint32 Chunk_ID(void) const
static DefinitionClass * Find_Definition(uint32 id, bool twiddle=true)
friend class DefinitionClass
static void List_Available_Definitions(void)
virtual bool Load(ChunkLoadClass &cload)
static void Free_Definitions(void)
virtual bool Contains_Data(void) const
DefinitionMgrClass _TheDefinitionMgr
@ CHUNKID_SAVELOAD_DEFMGR
Definition saveloadids.h:57