zjf
2023-03-06 392b76515f40376b6d36f40a114850ef63650384
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
/////////////////////////////////////////////////////////////////////////////// 
// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
// All rights reserved. 
// 
// This software and its documentation and related materials are owned by 
// the Alliance. The software may only be incorporated into application 
// programs owned by members of the Alliance, subject to a signed 
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable  
// trade secrets of the Alliance and its suppliers. The software is also 
// protected by copyright law and international treaty provisions. Application  
// programs incorporating this software must include the following statement 
// with their copyright notices:
//   
//   This application incorporates Teigha(R) software pursuant to a license 
//   agreement with Open Design Alliance.
//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you 
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
 
 
 
 
#ifndef _RXDICTIONARY_INC_
#define _RXDICTIONARY_INC_
 
 
#include "RxObject.h"
#include "RxIterator.h"
#include "RxDefs.h"
#include "RxNames.h"
 
class OdString;
 
#include "TD_PackPush.h"
 
/** \details
    <group OdRx_Classes>
 
    This class implements Iterator objects that traverse entries in OdRxDictionary objects in an OdDbDatabase instance.
    
    Library: TD_Db
    
    \remarks
    An OdRxDictionaryIterator maintains a "current position" within the entries
    of the associated dictionary, and can provide access to the key value and object at the
    current position.
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link iterator_overview.html, Overview of Classes that Implement an Iterator>
 
    <link dictionary_iterating.html, Iterating through Items of a Dictionary>
*/
class FIRSTDLL_EXPORT OdRxDictionaryIterator : public OdRxIterator
{
public:
  ODRX_DECLARE_MEMBERS(OdRxDictionaryIterator);
 
  /** \details
     Returns the keyword associated with the item of the dictionary on which the iterator refers
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
  */
  virtual OdString getKey() const = 0;
 
  /** \details
    Returns the ID of the item in the dictionary on which the iterator refers
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
  */
  virtual OdUInt32 id() const = 0;
};
 
/** \details
  The typified smart pointer for the /dictionary iterator/. It is the template class created by the OdSmartPtr class.
*/
typedef OdSmartPtr<OdRxDictionaryIterator> OdRxDictionaryIteratorPtr;
 
 
/** \details
    <group OdRx_Classes> 
    This class implements the Dictionary object.
    
    \remarks
    * Each instance of OdRxbDictionary is a single container object, in which items are searched, added, modified, and deleted.  
    * Each /dictionary item/ is associated with an unique textual string named keyword and 32-Bit ID with an unique OdDbObject.
    * Anonymous names are signified by specifying a name starting with an asterisk; e.g., *U. 
       A unique name (also starting with an asterisk) will be constructed for the entry.
    * Entry names honor the rules of Symbol names
        * Names may be any length.
        * Names are case-insensitve
        * Names may not contain any of the following characters: | * \ : ; < > ? " , equals
 
    \sa
    OdRxDictionaryIterator
    
    Library: TD_Db
    
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary.html, Working with Dictionaries>
*/
class FIRSTDLL_EXPORT OdRxDictionary : public OdRxObject
{
public:
  ODRX_DECLARE_MEMBERS(OdRxDictionary);
  
  /** \details
    Allocates storage for the specified number of items in this /dictionary object/.
 
    \param minSize [in]  Minimum number of items for allocating. 
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual void reserve(
    OdUInt32 minSize);
 
  /** \details
    Returns the /non-typified smart pointer/ to the instance that is associated with the /dictionary item/ 
    specified by the keyword or ID.
 
    \param key [in]  Item keyword as a string value.
    \param id [in]  Item ID as an integer value.
 
    \remarks
    Returns a Null if the specified item is not found.
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual OdRxObjectPtr getAt(
    const OdString& key) const = 0;
  virtual OdRxObjectPtr getAt(
    OdUInt32 id) const = 0;
 
  /** \details
    Puts the instance specified by the /smart pointer/ into the /dictionary object/ and associates it with the specified keyword.
    
    \param key [in]  Keyword as a string value.
    \param id [in]  ID as an integer value.
    \param pObject [in]  Pointer to the instance to be put.
    \param pRetId [in]  Pointer to an OdUInt32 to receive the Entry ID of the entry.
    
    \remarks
    Returns a /smart pointer/ to the object at this entry prior to the call.
    Keyword and smart pointer must not be Null, and id > 0.
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual OdRxObjectPtr putAt(
    const OdString& key, 
    OdRxObject* pObject, 
    OdUInt32* pRetId = 0) = 0;
  virtual OdRxObjectPtr putAt(
    OdUInt32 id, 
    OdRxObject* pObject) = 0;
  
  /** \details
    Sets the keyword for the item specified by ID for the /dictionary object/.
    
    \param id [in]   ID as an integer value.
    \param newKey [in]  New keyword as a string value.
    
    \remarks
    Returns true if and only if successful.    
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual bool resetKey(
    OdUInt32 id, 
    const OdString& newKey) = 0;
 
  /** \details
    Removes the item specified by keyword or ID from the /dictionary object/.
    
    \param key [in]  Keyword as a string value.
    \param id [in]  ID as an integer value.
    
    \remarks
    This method does not delete the instance associated with the removed item 
    and returns a /smart pointer/ to the instance referenced by the item.
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual OdRxObjectPtr remove(
    const OdString& key) = 0;
  virtual OdRxObjectPtr remove(
    OdUInt32 id) = 0;
 
 
  /** \details
    Returns true if and only if the /dictionary object/ contains the item with the specified keyword or ID.
 
    \param key [in]  Keyword as a string value.
    \param id [in]  ID as an integer value.
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual bool has(
    const OdString& key) const = 0;
  virtual bool has(
    OdUInt32 id) const = 0;
 
 
  /** \details
    Returns the ID of the item specified by the keyword in the /dictionary object/.
 
    \param key [in]  Keyword as a string value.
    
    \remarks
    Returns (-1) if the keyword is not found in the dictionary.
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual OdUInt32 idAt(
    const OdString& key) const = 0;
 
  /** \details
    Returns the keyword of the item specified by the ID in the /dictionary object/.
 
    \param id [in]  Entry ID.
    
    \remarks
    Returns an empty string if ID is not found in the dictionary.
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
   virtual OdString keyAt(
    OdUInt32 id) const = 0;
 
  /** \details
    Returns the number of items in the /dictionary object/.
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual OdUInt32 numEntries() const = 0;
 
  /** \details
    Returns a new interator that can be used to traverse through items of the /dictionary object/.
 
    \param iterType [in]  Type of iterator.
 
    \remarks
    The iterator type can be one of the following:
 
    <table>
    Name                      Description
    OdRx::kDictCollated       Traverses the entries in the order they were added to the dictionary.
    OdRx::kDictSorted         Traverses the entries in alphabetical order by key value.
    </table>
 
    \sa
    <link dictionary_sample.html, Example of Working with a Dictionary>
 
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
 
    <link dictionary_iterating.html, Iterating through Items of a Dictionary>
 
    <link iterator_concept.html, Concept of Iterators>
  */
  virtual OdRxDictionaryIteratorPtr newIterator(
    OdRx::DictIterType iterType = OdRx::kDictCollated) = 0;
 
  /** \details
    Returns true if and only if keywords of the /dictionary object/ are case-sensitive, 
    or false if keywords are case-insensitive.
    
    \sa
    <link dictionary_functionality.html, Functionality of Dictionaries>
  */
  virtual bool isCaseSensitive() const = 0;
};
 
/** \details
  The /typified smart pointer/ for the /dictionary object/. This template class is a specialization 
   of the OdSmartPtr class for OdRxDictionary object.
*/
typedef OdSmartPtr<OdRxDictionary> OdRxDictionaryPtr;
 
 
/** \details
   Returns the /raw pointer/ to the <link dictionaty_root_runtime.html, Root Run-Time Dictionary>.
*/
FIRSTDLL_EXPORT OdRxDictionary* odrxSysRegistry();
 
 
/** \details
   Returns the /smart pointer/ to the <link rtti_class_dictionary.html, Dictionary of Registered Classes>.
 
    \sa
    <link rtti_concept.html, Concept of RTTI Technology>
 
    <link rtti_class_registering.html, Registering and Unregistering of Classes>
*/
FIRSTDLL_EXPORT OdRxDictionaryPtr odrxClassDictionary();
 
 
/** \details
   Returns the /smart pointer/ to the /Dictionary of Registered Services/.
*/
FIRSTDLL_EXPORT OdRxDictionaryPtr odrxServiceDictionary();
 
 
/** \details
   Creates a new /dictionary object/ that can be modified only from a /single thread/ and
   returns the /smart pointer/ to it.
*/
FIRSTDLL_EXPORT OdRxDictionaryPtr odrxCreateRxDictionary();
 
 
/** \details
   Creates a new /dictionary object/ that can be modified from /multiple threads/ and
   returns the /smart pointer/ to it.
*/
FIRSTDLL_EXPORT OdRxDictionaryPtr odrxCreateSyncRxDictionary();
 
 
#include "TD_PackPop.h"
 
#endif // _RXDICTIONARY_INC_