xref: /xnu-11417.121.6/libkern/libkern/c++/OSSet.h (revision a1e26a70f38d1d7daa7b49b258e2f8538ad81650)
1*a1e26a70SApple OSS Distributions /*
2*a1e26a70SApple OSS Distributions  * Copyright (c) 2019 Apple Inc. All rights reserved.
3*a1e26a70SApple OSS Distributions  *
4*a1e26a70SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*a1e26a70SApple OSS Distributions  *
6*a1e26a70SApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*a1e26a70SApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*a1e26a70SApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*a1e26a70SApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*a1e26a70SApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*a1e26a70SApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*a1e26a70SApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*a1e26a70SApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*a1e26a70SApple OSS Distributions  *
15*a1e26a70SApple OSS Distributions  * Please obtain a copy of the License at
16*a1e26a70SApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*a1e26a70SApple OSS Distributions  *
18*a1e26a70SApple OSS Distributions  * The Original Code and all software distributed under the License are
19*a1e26a70SApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*a1e26a70SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*a1e26a70SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*a1e26a70SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*a1e26a70SApple OSS Distributions  * Please see the License for the specific language governing rights and
24*a1e26a70SApple OSS Distributions  * limitations under the License.
25*a1e26a70SApple OSS Distributions  *
26*a1e26a70SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*a1e26a70SApple OSS Distributions  */
28*a1e26a70SApple OSS Distributions /* IOSet.h created by rsulack on Thu 11-Jun-1998 */
29*a1e26a70SApple OSS Distributions /* IOSet.h converted to C++ by gvdl on Fri 1998-10-30 */
30*a1e26a70SApple OSS Distributions 
31*a1e26a70SApple OSS Distributions #ifndef _OS_OSSET_H
32*a1e26a70SApple OSS Distributions #define _OS_OSSET_H
33*a1e26a70SApple OSS Distributions 
34*a1e26a70SApple OSS Distributions #include <libkern/c++/OSCollection.h>
35*a1e26a70SApple OSS Distributions #include <libkern/c++/OSPtr.h>
36*a1e26a70SApple OSS Distributions 
37*a1e26a70SApple OSS Distributions class OSArray;
38*a1e26a70SApple OSS Distributions class OSSet;
39*a1e26a70SApple OSS Distributions 
40*a1e26a70SApple OSS Distributions typedef OSSet* OSSetPtr;
41*a1e26a70SApple OSS Distributions typedef OSArray* OSArrayPtr;
42*a1e26a70SApple OSS Distributions 
43*a1e26a70SApple OSS Distributions /*!
44*a1e26a70SApple OSS Distributions  * @header
45*a1e26a70SApple OSS Distributions  *
46*a1e26a70SApple OSS Distributions  * @abstract
47*a1e26a70SApple OSS Distributions  * This header declares the OSSet collection class.
48*a1e26a70SApple OSS Distributions  */
49*a1e26a70SApple OSS Distributions 
50*a1e26a70SApple OSS Distributions 
51*a1e26a70SApple OSS Distributions /*!
52*a1e26a70SApple OSS Distributions  * @class OSSet
53*a1e26a70SApple OSS Distributions  *
54*a1e26a70SApple OSS Distributions  * @abstract
55*a1e26a70SApple OSS Distributions  * OSSet provides an unordered set store of objects.
56*a1e26a70SApple OSS Distributions  *
57*a1e26a70SApple OSS Distributions  * @discussion
58*a1e26a70SApple OSS Distributions  * OSSet is a container for Libkern C++ objects
59*a1e26a70SApple OSS Distributions  * (those derived from
60*a1e26a70SApple OSS Distributions  * @link //apple_ref/doc/class/OSMetaClassBase OSMetaClassBase@/link,
61*a1e26a70SApple OSS Distributions  * in particular @link //apple_ref/doc/class/OSObject OSObject@/link).
62*a1e26a70SApple OSS Distributions  * Storage and access follow basic set logic: you can add or remove an object,
63*a1e26a70SApple OSS Distributions  * and test whether the set contains a particular object.
64*a1e26a70SApple OSS Distributions  * A given object is only stored in the set once,
65*a1e26a70SApple OSS Distributions  * and there is no ordering of objects in the set.
66*a1e26a70SApple OSS Distributions  * A subclass @link //apple_ref/doc/class/OSOrderedSet OSOrderedSet@/link,
67*a1e26a70SApple OSS Distributions  * provides for ordered set logic.
68*a1e26a70SApple OSS Distributions  *
69*a1e26a70SApple OSS Distributions  * As with all Libkern collection classes,
70*a1e26a70SApple OSS Distributions  * OSSet retains objects added to it,
71*a1e26a70SApple OSS Distributions  * and releases objects removed from it.
72*a1e26a70SApple OSS Distributions  * An OSSet also grows as necessary to accommodate new objects,
73*a1e26a70SApple OSS Distributions  * <i>unlike</i> Core Foundation collections (it does not, however, shrink).
74*a1e26a70SApple OSS Distributions  *
75*a1e26a70SApple OSS Distributions  * <b>Use Restrictions</b>
76*a1e26a70SApple OSS Distributions  *
77*a1e26a70SApple OSS Distributions  * With very few exceptions in the I/O Kit, all Libkern-based C++
78*a1e26a70SApple OSS Distributions  * classes, functions, and macros are <b>unsafe</b>
79*a1e26a70SApple OSS Distributions  * to use in a primary interrupt context.
80*a1e26a70SApple OSS Distributions  * Consult the I/O Kit documentation related to primary interrupts
81*a1e26a70SApple OSS Distributions  * for more information.
82*a1e26a70SApple OSS Distributions  *
83*a1e26a70SApple OSS Distributions  * OSSet provides no concurrency protection;
84*a1e26a70SApple OSS Distributions  * it's up to the usage context to provide any protection necessary.
85*a1e26a70SApple OSS Distributions  * Some portions of the I/O Kit, such as
86*a1e26a70SApple OSS Distributions  * @link //apple_ref/doc/class/IORegistryEntry IORegistryEntry@/link,
87*a1e26a70SApple OSS Distributions  * handle synchronization via defined member functions for setting
88*a1e26a70SApple OSS Distributions  * properties.
89*a1e26a70SApple OSS Distributions  */
90*a1e26a70SApple OSS Distributions class OSSet : public OSCollection
91*a1e26a70SApple OSS Distributions {
92*a1e26a70SApple OSS Distributions 	friend class OSSerialize;
93*a1e26a70SApple OSS Distributions 
94*a1e26a70SApple OSS Distributions 	OSDeclareDefaultStructors(OSSet);
95*a1e26a70SApple OSS Distributions 
96*a1e26a70SApple OSS Distributions #if APPLE_KEXT_ALIGN_CONTAINERS
97*a1e26a70SApple OSS Distributions 
98*a1e26a70SApple OSS Distributions private:
99*a1e26a70SApple OSS Distributions 	OSPtr<OSArray> members;
100*a1e26a70SApple OSS Distributions 
101*a1e26a70SApple OSS Distributions #else /* APPLE_KEXT_ALIGN_CONTAINERS */
102*a1e26a70SApple OSS Distributions 
103*a1e26a70SApple OSS Distributions private:
104*a1e26a70SApple OSS Distributions 	OSPtr<OSArray> members;
105*a1e26a70SApple OSS Distributions 
106*a1e26a70SApple OSS Distributions protected:
107*a1e26a70SApple OSS Distributions 	struct ExpansionData { };
108*a1e26a70SApple OSS Distributions 
109*a1e26a70SApple OSS Distributions /* Reserved for future use.  (Internal use only)  */
110*a1e26a70SApple OSS Distributions 	ExpansionData * reserved;
111*a1e26a70SApple OSS Distributions 
112*a1e26a70SApple OSS Distributions #endif /* APPLE_KEXT_ALIGN_CONTAINERS */
113*a1e26a70SApple OSS Distributions 
114*a1e26a70SApple OSS Distributions /*
115*a1e26a70SApple OSS Distributions  * OSCollectionIterator interfaces.
116*a1e26a70SApple OSS Distributions  */
117*a1e26a70SApple OSS Distributions 	virtual unsigned int iteratorSize() const APPLE_KEXT_OVERRIDE;
118*a1e26a70SApple OSS Distributions 	virtual bool initIterator(void * iterator) const APPLE_KEXT_OVERRIDE;
119*a1e26a70SApple OSS Distributions 	virtual bool getNextObjectForIterator(void * iterator, OSObject ** ret) const APPLE_KEXT_OVERRIDE;
120*a1e26a70SApple OSS Distributions 
121*a1e26a70SApple OSS Distributions public:
122*a1e26a70SApple OSS Distributions 
123*a1e26a70SApple OSS Distributions 
124*a1e26a70SApple OSS Distributions /*!
125*a1e26a70SApple OSS Distributions  * @function withCapacity
126*a1e26a70SApple OSS Distributions  *
127*a1e26a70SApple OSS Distributions  * @abstract
128*a1e26a70SApple OSS Distributions  * Creates and initializes an empty OSSet.
129*a1e26a70SApple OSS Distributions  *
130*a1e26a70SApple OSS Distributions  * @param   capacity The initial storage capacity of the new set object.
131*a1e26a70SApple OSS Distributions  *
132*a1e26a70SApple OSS Distributions  * @result
133*a1e26a70SApple OSS Distributions  * An empty instance of OSSet
134*a1e26a70SApple OSS Distributions  *         with a retain count of 1;
135*a1e26a70SApple OSS Distributions  * <code>NULL</code> on failure.
136*a1e26a70SApple OSS Distributions  *
137*a1e26a70SApple OSS Distributions  * @discussion
138*a1e26a70SApple OSS Distributions  * <code>capacity</code> must be nonzero.
139*a1e26a70SApple OSS Distributions  * The new OSSet will grow as needed to accommodate more key/object pairs
140*a1e26a70SApple OSS Distributions  * (<i>unlike</i> @link //apple_ref/doc/uid/20001503 CFMutableSet@/link,
141*a1e26a70SApple OSS Distributions  * for which the initial capacity is a hard limit).
142*a1e26a70SApple OSS Distributions  */
143*a1e26a70SApple OSS Distributions 	static OSPtr<OSSet> withCapacity(unsigned int capacity);
144*a1e26a70SApple OSS Distributions 
145*a1e26a70SApple OSS Distributions 
146*a1e26a70SApple OSS Distributions /*!
147*a1e26a70SApple OSS Distributions  * @function withObjects
148*a1e26a70SApple OSS Distributions  *
149*a1e26a70SApple OSS Distributions  * @abstract
150*a1e26a70SApple OSS Distributions  * Creates and initializes an OSSet
151*a1e26a70SApple OSS Distributions  * populated with objects provided.
152*a1e26a70SApple OSS Distributions  *
153*a1e26a70SApple OSS Distributions  * @param objects   A C array of OSMetaClassBase-derived objects.
154*a1e26a70SApple OSS Distributions  * @param count     The number of objects to be placed into the set.
155*a1e26a70SApple OSS Distributions  * @param capacity  The initial storage capacity of the new set object.
156*a1e26a70SApple OSS Distributions  *                  If 0, <code>count</code> is used; otherwise this value
157*a1e26a70SApple OSS Distributions  *                  must be greater than or equal to <code>count</code>.
158*a1e26a70SApple OSS Distributions  *
159*a1e26a70SApple OSS Distributions  * @result
160*a1e26a70SApple OSS Distributions  * An instance of OSSet
161*a1e26a70SApple OSS Distributions  * containing the objects provided,
162*a1e26a70SApple OSS Distributions  * with a retain count of 1;
163*a1e26a70SApple OSS Distributions  * <code>NULL</code> on failure.
164*a1e26a70SApple OSS Distributions  *
165*a1e26a70SApple OSS Distributions  * @discussion
166*a1e26a70SApple OSS Distributions  * <code>objects</code> must be non-<code>NULL</code>,
167*a1e26a70SApple OSS Distributions  * and <code>count</code> must be nonzero.
168*a1e26a70SApple OSS Distributions  * If <code>capacity</code> is nonzero,
169*a1e26a70SApple OSS Distributions  * it must be greater than or equal to <code>count</code>.
170*a1e26a70SApple OSS Distributions  * The new OSSet will grow as needed to accommodate more objects
171*a1e26a70SApple OSS Distributions  * (<i>unlike</i> @link //apple_ref/doc/uid/20001503 CFMutableSet@/link,
172*a1e26a70SApple OSS Distributions  * for which the initial capacity is a hard limit).
173*a1e26a70SApple OSS Distributions  *
174*a1e26a70SApple OSS Distributions  * The objects in <code>objects</code> are retained for storage in the new set,
175*a1e26a70SApple OSS Distributions  * not copied.
176*a1e26a70SApple OSS Distributions  */
177*a1e26a70SApple OSS Distributions 	static OSPtr<OSSet> withObjects(
178*a1e26a70SApple OSS Distributions 		const OSObject * objects[],
179*a1e26a70SApple OSS Distributions 		unsigned int     count,
180*a1e26a70SApple OSS Distributions 		unsigned int     capacity = 0);
181*a1e26a70SApple OSS Distributions 
182*a1e26a70SApple OSS Distributions 
183*a1e26a70SApple OSS Distributions /*!
184*a1e26a70SApple OSS Distributions  * @function withArray
185*a1e26a70SApple OSS Distributions  *
186*a1e26a70SApple OSS Distributions  * @abstract
187*a1e26a70SApple OSS Distributions  * Creates and initializes an OSSet
188*a1e26a70SApple OSS Distributions  * populated with the contents of an OSArray.
189*a1e26a70SApple OSS Distributions  *
190*a1e26a70SApple OSS Distributions  * @param array     An array whose objects will be stored in the new OSSet.
191*a1e26a70SApple OSS Distributions  * @param capacity  The initial storage capacity of the new set object.
192*a1e26a70SApple OSS Distributions  *                  If 0, the capacity is set to the number of objects
193*a1e26a70SApple OSS Distributions  *                  in <code>array</code>;
194*a1e26a70SApple OSS Distributions  *                  otherwise <code>capacity</code> must be greater than or equal to
195*a1e26a70SApple OSS Distributions  *                  the number of objects in <code>array</code>.
196*a1e26a70SApple OSS Distributions  * @result
197*a1e26a70SApple OSS Distributions  * An instance of OSSet containing
198*a1e26a70SApple OSS Distributions  * the objects of <code>array</code>,
199*a1e26a70SApple OSS Distributions  * with a retain count of 1;
200*a1e26a70SApple OSS Distributions  * <code>NULL</code> on failure.
201*a1e26a70SApple OSS Distributions  *
202*a1e26a70SApple OSS Distributions  * @discussion
203*a1e26a70SApple OSS Distributions  * Each distinct object in <code>array</code> is added to the new set.
204*a1e26a70SApple OSS Distributions  *
205*a1e26a70SApple OSS Distributions  * <code>array</code> must be non-<code>NULL</code>.
206*a1e26a70SApple OSS Distributions  * If <code>capacity</code> is nonzero,
207*a1e26a70SApple OSS Distributions  * it must be greater than or equal to <code>count</code>.
208*a1e26a70SApple OSS Distributions  * The new OSSet will grow as needed to accommodate more key-object pairs
209*a1e26a70SApple OSS Distributions  * (<i>unlike</i> @link //apple_ref/doc/uid/20001503 CFMutableSet@/link,
210*a1e26a70SApple OSS Distributions  * for which the initial capacity is a hard limit).
211*a1e26a70SApple OSS Distributions  *
212*a1e26a70SApple OSS Distributions  * The objects in <code>array</code> are retained for storage in the new set,
213*a1e26a70SApple OSS Distributions  * not copied.
214*a1e26a70SApple OSS Distributions  */
215*a1e26a70SApple OSS Distributions 	static OSPtr<OSSet> withArray(
216*a1e26a70SApple OSS Distributions 		const OSArray * array,
217*a1e26a70SApple OSS Distributions 		unsigned int    capacity = 0);
218*a1e26a70SApple OSS Distributions 
219*a1e26a70SApple OSS Distributions 
220*a1e26a70SApple OSS Distributions /*!
221*a1e26a70SApple OSS Distributions  * @function withSet
222*a1e26a70SApple OSS Distributions  *
223*a1e26a70SApple OSS Distributions  * @abstract
224*a1e26a70SApple OSS Distributions  * Creates and initializes an OSSet
225*a1e26a70SApple OSS Distributions  * populated with the contents of another OSSet.
226*a1e26a70SApple OSS Distributions  *
227*a1e26a70SApple OSS Distributions  * @param set       An OSSet whose contents will be stored
228*a1e26a70SApple OSS Distributions  *                  in the new instance.
229*a1e26a70SApple OSS Distributions  * @param capacity  The initial storage capacity of the set object.
230*a1e26a70SApple OSS Distributions  *                  If 0, the capacity is set to the number of objects
231*a1e26a70SApple OSS Distributions  *                  in <code>set</code>;
232*a1e26a70SApple OSS Distributions  *                  otherwise <code>capacity</code> must be greater than or equal to
233*a1e26a70SApple OSS Distributions  *                  the number of objects in <code>array</code>.
234*a1e26a70SApple OSS Distributions  * @result
235*a1e26a70SApple OSS Distributions  * An instance of OSArray
236*a1e26a70SApple OSS Distributions  * containing the objects of <code>set</code>,
237*a1e26a70SApple OSS Distributions  * with a retain count of 1;
238*a1e26a70SApple OSS Distributions  * <code>NULL</code> on failure.
239*a1e26a70SApple OSS Distributions  *
240*a1e26a70SApple OSS Distributions  * @discussion
241*a1e26a70SApple OSS Distributions  * <code>set</code> must be non-<code>NULL</code>.
242*a1e26a70SApple OSS Distributions  * If <code>capacity</code> is nonzero,
243*a1e26a70SApple OSS Distributions  * it must be greater than or equal to <code>count</code>.
244*a1e26a70SApple OSS Distributions  * The array will grow as needed to accommodate more key-object pairs
245*a1e26a70SApple OSS Distributions  * (<i>unlike</i> @link //apple_ref/doc/uid/20001503 CFMutableSet@/link,
246*a1e26a70SApple OSS Distributions  * for which the initial capacity is a hard limit).
247*a1e26a70SApple OSS Distributions  *
248*a1e26a70SApple OSS Distributions  * The objects in <code>set</code> are retained for storage in the new set,
249*a1e26a70SApple OSS Distributions  * not copied.
250*a1e26a70SApple OSS Distributions  */
251*a1e26a70SApple OSS Distributions 	static OSPtr<OSSet> withSet(const OSSet * set,
252*a1e26a70SApple OSS Distributions 	    unsigned int capacity = 0);
253*a1e26a70SApple OSS Distributions 
254*a1e26a70SApple OSS Distributions 
255*a1e26a70SApple OSS Distributions /*!
256*a1e26a70SApple OSS Distributions  * @function initWithCapacity
257*a1e26a70SApple OSS Distributions  *
258*a1e26a70SApple OSS Distributions  * @abstract
259*a1e26a70SApple OSS Distributions  * Initializes a new instance of OSSet.
260*a1e26a70SApple OSS Distributions  *
261*a1e26a70SApple OSS Distributions  * @param capacity  The initial storage capacity of the new set object.
262*a1e26a70SApple OSS Distributions  *
263*a1e26a70SApple OSS Distributions  * @result
264*a1e26a70SApple OSS Distributions  * <code>true</code> on success, <code>false</code> on failure.
265*a1e26a70SApple OSS Distributions  *
266*a1e26a70SApple OSS Distributions  * @discussion
267*a1e26a70SApple OSS Distributions  * Not for general use. Use the static instance creation method
268*a1e26a70SApple OSS Distributions  * <code>@link
269*a1e26a70SApple OSS Distributions  * //apple_ref/cpp/clm/OSSet/withCapacity/staticOSSet*\/(unsignedint)
270*a1e26a70SApple OSS Distributions  * withCapacity@/link</code>
271*a1e26a70SApple OSS Distributions  * instead.
272*a1e26a70SApple OSS Distributions  *
273*a1e26a70SApple OSS Distributions  * <code>capacity</code> must be nonzero.
274*a1e26a70SApple OSS Distributions  * The new set will grow as needed to accommodate more key/object pairs
275*a1e26a70SApple OSS Distributions  * (<i>unlike</i> @link //apple_ref/doc/uid/20001503 CFMutableSet@/link,
276*a1e26a70SApple OSS Distributions  * for which the initial capacity is a hard limit).
277*a1e26a70SApple OSS Distributions  */
278*a1e26a70SApple OSS Distributions 	virtual bool initWithCapacity(unsigned int capacity);
279*a1e26a70SApple OSS Distributions 
280*a1e26a70SApple OSS Distributions 
281*a1e26a70SApple OSS Distributions /*!
282*a1e26a70SApple OSS Distributions  * @function initWithObjects
283*a1e26a70SApple OSS Distributions  *
284*a1e26a70SApple OSS Distributions  * @abstract
285*a1e26a70SApple OSS Distributions  * Initializes a new OSSet populated with objects provided.
286*a1e26a70SApple OSS Distributions  *
287*a1e26a70SApple OSS Distributions  * @param objects   A C array of OSObject-derived objects.
288*a1e26a70SApple OSS Distributions  * @param count     The number of objects to be placed into the set.
289*a1e26a70SApple OSS Distributions  * @param capacity  The initial storage capacity of the new set object.
290*a1e26a70SApple OSS Distributions  *                  If 0, <code>count</code> is used; otherwise this value
291*a1e26a70SApple OSS Distributions  *                  must be greater than or equal to <code>count</code>.
292*a1e26a70SApple OSS Distributions  *
293*a1e26a70SApple OSS Distributions  * @result
294*a1e26a70SApple OSS Distributions  * <code>true</code> on success, <code>false</code> on failure.
295*a1e26a70SApple OSS Distributions  *
296*a1e26a70SApple OSS Distributions  * @discussion
297*a1e26a70SApple OSS Distributions  * Not for general use. Use the static instance creation method
298*a1e26a70SApple OSS Distributions  * <code>@link
299*a1e26a70SApple OSS Distributions  * //apple_ref/cpp/clm/OSSet/withObjects/staticOSSet*\/(constOSObject*,unsignedint,unsignedint)
300*a1e26a70SApple OSS Distributions  * withObjects@/link</code>
301*a1e26a70SApple OSS Distributions  * instead.
302*a1e26a70SApple OSS Distributions  *
303*a1e26a70SApple OSS Distributions  * <code>objects</code> must be non-<code>NULL</code>,
304*a1e26a70SApple OSS Distributions  * and <code>count</code> must be nonzero.
305*a1e26a70SApple OSS Distributions  * If <code>capacity</code> is nonzero, it must be greater than or equal to <code>count</code>.
306*a1e26a70SApple OSS Distributions  * The new array will grow as needed to accommodate more key-object pairs
307*a1e26a70SApple OSS Distributions  * (<i>unlike</i> @link //apple_ref/doc/uid/20001503 CFMutableSet@/link,
308*a1e26a70SApple OSS Distributions  * for which the initial capacity is a hard limit).
309*a1e26a70SApple OSS Distributions  *
310*a1e26a70SApple OSS Distributions  * The objects in <code>objects</code> are retained for storage in the new set,
311*a1e26a70SApple OSS Distributions  * not copied.
312*a1e26a70SApple OSS Distributions  */
313*a1e26a70SApple OSS Distributions 	virtual bool initWithObjects(
314*a1e26a70SApple OSS Distributions 		const OSObject * objects[],
315*a1e26a70SApple OSS Distributions 		unsigned int     count,
316*a1e26a70SApple OSS Distributions 		unsigned int     capacity = 0);
317*a1e26a70SApple OSS Distributions 
318*a1e26a70SApple OSS Distributions 
319*a1e26a70SApple OSS Distributions /*!
320*a1e26a70SApple OSS Distributions  * @function initWithArray
321*a1e26a70SApple OSS Distributions  *
322*a1e26a70SApple OSS Distributions  * @abstract Initializes a new OSSet
323*a1e26a70SApple OSS Distributions  *           populated with the contents of an OSArray.
324*a1e26a70SApple OSS Distributions  *
325*a1e26a70SApple OSS Distributions  * @param array     An OSAray whose contents will be placed
326*a1e26a70SApple OSS Distributions  *                  in the new instance.
327*a1e26a70SApple OSS Distributions  * @param capacity  The initial storage capacity of the new set object.
328*a1e26a70SApple OSS Distributions  *                  If 0, the capacity is set
329*a1e26a70SApple OSS Distributions  *                  to the number of objects in <code>array</code>;
330*a1e26a70SApple OSS Distributions  *                  otherwise <code>capacity</code> must be greater than or equal to
331*a1e26a70SApple OSS Distributions  *                  the number of objects in <code>array</code>.
332*a1e26a70SApple OSS Distributions  *
333*a1e26a70SApple OSS Distributions  * @result
334*a1e26a70SApple OSS Distributions  * <code>true</code> on success, <code>false</code> on failure.
335*a1e26a70SApple OSS Distributions  *
336*a1e26a70SApple OSS Distributions  * @discussion
337*a1e26a70SApple OSS Distributions  * Not for general use. Use the static instance creation method
338*a1e26a70SApple OSS Distributions  * <code>@link
339*a1e26a70SApple OSS Distributions  * //apple_ref/cpp/clm/OSSet/withArray/staticOSSet*\/(constOSArray*,unsignedint)
340*a1e26a70SApple OSS Distributions  * withArray@/link</code>
341*a1e26a70SApple OSS Distributions  * instead.
342*a1e26a70SApple OSS Distributions  *
343*a1e26a70SApple OSS Distributions  * <code>array</code> must be non-<code>NULL</code>.
344*a1e26a70SApple OSS Distributions  * If <code>capacity</code> is nonzero,
345*a1e26a70SApple OSS Distributions  * it must be greater than or equal to <code>count</code>.
346*a1e26a70SApple OSS Distributions  * The new array will grow as needed to accommodate more key-object pairs
347*a1e26a70SApple OSS Distributions  * (<i>unlike</i> @link //apple_ref/doc/uid/20001503 CFMutableSet@/link,
348*a1e26a70SApple OSS Distributions  * for which the initial capacity is a hard limit).
349*a1e26a70SApple OSS Distributions  *
350*a1e26a70SApple OSS Distributions  * The objects in <code>array</code> are retained for storage in the new set,
351*a1e26a70SApple OSS Distributions  * not copied.
352*a1e26a70SApple OSS Distributions  */
353*a1e26a70SApple OSS Distributions 	virtual bool initWithArray(
354*a1e26a70SApple OSS Distributions 		const OSArray * array,
355*a1e26a70SApple OSS Distributions 		unsigned int capacity = 0);
356*a1e26a70SApple OSS Distributions 
357*a1e26a70SApple OSS Distributions 
358*a1e26a70SApple OSS Distributions /*!
359*a1e26a70SApple OSS Distributions  * @function initWithSet
360*a1e26a70SApple OSS Distributions  *
361*a1e26a70SApple OSS Distributions  * @abstract
362*a1e26a70SApple OSS Distributions  * Initializes a new OSSet
363*a1e26a70SApple OSS Distributions  * populated with the contents of another OSSet.
364*a1e26a70SApple OSS Distributions  *
365*a1e26a70SApple OSS Distributions  * @param set       A set whose contents will be placed in the new instance.
366*a1e26a70SApple OSS Distributions  * @param capacity  The initial storage capacity of the new set object.
367*a1e26a70SApple OSS Distributions  *                  If 0, the capacity is set
368*a1e26a70SApple OSS Distributions  *                  to the number of objects in <code>set</code>;
369*a1e26a70SApple OSS Distributions  *                  otherwise <code>capacity</code> must be greater than or equal to
370*a1e26a70SApple OSS Distributions  *                  the number of objects in <code>set</code>.
371*a1e26a70SApple OSS Distributions  *
372*a1e26a70SApple OSS Distributions  * @result
373*a1e26a70SApple OSS Distributions  * <code>true</code> on success, <code>false</code> on failure.
374*a1e26a70SApple OSS Distributions  *
375*a1e26a70SApple OSS Distributions  * @discussion
376*a1e26a70SApple OSS Distributions  * Not for general use. Use the static instance creation method
377*a1e26a70SApple OSS Distributions  * <code>@link withSet withSet@/link</code> instead.
378*a1e26a70SApple OSS Distributions  *
379*a1e26a70SApple OSS Distributions  * <code>set</code> must be non-<code>NULL</code>.
380*a1e26a70SApple OSS Distributions  * If <code>capacity</code> is nonzero,
381*a1e26a70SApple OSS Distributions  * it must be greater than or equal to <code>count</code>.
382*a1e26a70SApple OSS Distributions  * The new set will grow as needed to accommodate more key-object pairs
383*a1e26a70SApple OSS Distributions  * (<i>unlike</i> @link //apple_ref/doc/uid/20001503 CFMutableSet@/link,
384*a1e26a70SApple OSS Distributions  * for which the initial capacity is a hard limit).
385*a1e26a70SApple OSS Distributions  *
386*a1e26a70SApple OSS Distributions  * The objects in <code>set</code> are retained for storage in the new set,
387*a1e26a70SApple OSS Distributions  * not copied.
388*a1e26a70SApple OSS Distributions  */
389*a1e26a70SApple OSS Distributions 	virtual bool initWithSet(const OSSet *set,
390*a1e26a70SApple OSS Distributions 	    unsigned int capacity = 0);
391*a1e26a70SApple OSS Distributions 
392*a1e26a70SApple OSS Distributions 
393*a1e26a70SApple OSS Distributions /*!
394*a1e26a70SApple OSS Distributions  * @function free
395*a1e26a70SApple OSS Distributions  *
396*a1e26a70SApple OSS Distributions  * @abstract
397*a1e26a70SApple OSS Distributions  * Deallocates or releases any resources
398*a1e26a70SApple OSS Distributions  * used by the OSSet instance.
399*a1e26a70SApple OSS Distributions  *
400*a1e26a70SApple OSS Distributions  * @discussion
401*a1e26a70SApple OSS Distributions  * This function should not be called directly;
402*a1e26a70SApple OSS Distributions  * use
403*a1e26a70SApple OSS Distributions  * <code>@link
404*a1e26a70SApple OSS Distributions  * //apple_ref/cpp/instm/OSObject/release/virtualvoid/()
405*a1e26a70SApple OSS Distributions  * release@/link</code>
406*a1e26a70SApple OSS Distributions  * instead.
407*a1e26a70SApple OSS Distributions  */
408*a1e26a70SApple OSS Distributions 	virtual void free() APPLE_KEXT_OVERRIDE;
409*a1e26a70SApple OSS Distributions 
410*a1e26a70SApple OSS Distributions 
411*a1e26a70SApple OSS Distributions /*!
412*a1e26a70SApple OSS Distributions  * @function getCount
413*a1e26a70SApple OSS Distributions  *
414*a1e26a70SApple OSS Distributions  * @abstract
415*a1e26a70SApple OSS Distributions  * Returns the current number of objects within the set.
416*a1e26a70SApple OSS Distributions  *
417*a1e26a70SApple OSS Distributions  * @result
418*a1e26a70SApple OSS Distributions  * The current number of objects within the set.
419*a1e26a70SApple OSS Distributions  */
420*a1e26a70SApple OSS Distributions 	virtual unsigned int getCount() const APPLE_KEXT_OVERRIDE;
421*a1e26a70SApple OSS Distributions 
422*a1e26a70SApple OSS Distributions 
423*a1e26a70SApple OSS Distributions /*!
424*a1e26a70SApple OSS Distributions  * @function getCapacity
425*a1e26a70SApple OSS Distributions  *
426*a1e26a70SApple OSS Distributions  * @abstract
427*a1e26a70SApple OSS Distributions  * Returns the number of objects the set
428*a1e26a70SApple OSS Distributions  * can store without reallocating.
429*a1e26a70SApple OSS Distributions  *
430*a1e26a70SApple OSS Distributions  * @result
431*a1e26a70SApple OSS Distributions  * The number objects the set
432*a1e26a70SApple OSS Distributions  * can store without reallocating.
433*a1e26a70SApple OSS Distributions  *
434*a1e26a70SApple OSS Distributions  * @discussion
435*a1e26a70SApple OSS Distributions  * OSSet objects grow when full to accommodate additional objects.
436*a1e26a70SApple OSS Distributions  * See
437*a1e26a70SApple OSS Distributions  * <code>@link
438*a1e26a70SApple OSS Distributions  * //apple_ref/cpp/instm/OSSet/getCapacityIncrement/virtualunsignedint/()
439*a1e26a70SApple OSS Distributions  * getCapacityIncrement@/link</code>
440*a1e26a70SApple OSS Distributions  * and
441*a1e26a70SApple OSS Distributions  * <code>@link
442*a1e26a70SApple OSS Distributions  * //apple_ref/cpp/instm/OSSet/ensureCapacity/virtualunsignedint/(unsignedint)
443*a1e26a70SApple OSS Distributions  * ensureCapacity@/link</code>.
444*a1e26a70SApple OSS Distributions  */
445*a1e26a70SApple OSS Distributions 	virtual unsigned int getCapacity() const APPLE_KEXT_OVERRIDE;
446*a1e26a70SApple OSS Distributions 
447*a1e26a70SApple OSS Distributions 
448*a1e26a70SApple OSS Distributions /*!
449*a1e26a70SApple OSS Distributions  * @function getCapacityIncrement
450*a1e26a70SApple OSS Distributions  *
451*a1e26a70SApple OSS Distributions  * @abstract
452*a1e26a70SApple OSS Distributions  * Returns the storage increment of the set.
453*a1e26a70SApple OSS Distributions  *
454*a1e26a70SApple OSS Distributions  * @result
455*a1e26a70SApple OSS Distributions  * The storage increment of the set.
456*a1e26a70SApple OSS Distributions  *
457*a1e26a70SApple OSS Distributions  * @discussion
458*a1e26a70SApple OSS Distributions  * An OSSet allocates storage for objects in multiples
459*a1e26a70SApple OSS Distributions  * of the capacity increment.
460*a1e26a70SApple OSS Distributions  */
461*a1e26a70SApple OSS Distributions 	virtual unsigned int getCapacityIncrement() const APPLE_KEXT_OVERRIDE;
462*a1e26a70SApple OSS Distributions 
463*a1e26a70SApple OSS Distributions 
464*a1e26a70SApple OSS Distributions /*!
465*a1e26a70SApple OSS Distributions  * @function setCapacityIncrement
466*a1e26a70SApple OSS Distributions  *
467*a1e26a70SApple OSS Distributions  * @abstract
468*a1e26a70SApple OSS Distributions  * Sets the storage increment of the set.
469*a1e26a70SApple OSS Distributions  *
470*a1e26a70SApple OSS Distributions  * @result
471*a1e26a70SApple OSS Distributions  * The new storage increment of the set,
472*a1e26a70SApple OSS Distributions  * which may be different from the number requested.
473*a1e26a70SApple OSS Distributions  *
474*a1e26a70SApple OSS Distributions  * @discussion
475*a1e26a70SApple OSS Distributions  * An OSSet allocates storage for objects in multiples
476*a1e26a70SApple OSS Distributions  * of the capacity increment.
477*a1e26a70SApple OSS Distributions  * Calling this function does not immediately reallocate storage.
478*a1e26a70SApple OSS Distributions  */
479*a1e26a70SApple OSS Distributions 	virtual unsigned int setCapacityIncrement(unsigned increment) APPLE_KEXT_OVERRIDE;
480*a1e26a70SApple OSS Distributions 
481*a1e26a70SApple OSS Distributions 
482*a1e26a70SApple OSS Distributions /*!
483*a1e26a70SApple OSS Distributions  * @function ensureCapacity
484*a1e26a70SApple OSS Distributions  *
485*a1e26a70SApple OSS Distributions  * @abstract
486*a1e26a70SApple OSS Distributions  * Ensures the set has enough space
487*a1e26a70SApple OSS Distributions  * to store the requested number of distinct objects.
488*a1e26a70SApple OSS Distributions  *
489*a1e26a70SApple OSS Distributions  * @param newCapacity  The total number of distinct objects the set
490*a1e26a70SApple OSS Distributions  *                     should be able to store.
491*a1e26a70SApple OSS Distributions  * @result
492*a1e26a70SApple OSS Distributions  * The new capacity of the set,
493*a1e26a70SApple OSS Distributions  * which may be different from the number requested
494*a1e26a70SApple OSS Distributions  * (if smaller, reallocation of storage failed).
495*a1e26a70SApple OSS Distributions  *
496*a1e26a70SApple OSS Distributions  * @discussion
497*a1e26a70SApple OSS Distributions  * This function immediately resizes the set, if necessary,
498*a1e26a70SApple OSS Distributions  * to accommodate at least <code>newCapacity</code> distinct objects.
499*a1e26a70SApple OSS Distributions  * If <code>newCapacity</code> is not greater than the current capacity,
500*a1e26a70SApple OSS Distributions  * or if an allocation error occurs, the original capacity is returned.
501*a1e26a70SApple OSS Distributions  *
502*a1e26a70SApple OSS Distributions  * There is no way to reduce the capacity of an OSSet.
503*a1e26a70SApple OSS Distributions  */
504*a1e26a70SApple OSS Distributions 	virtual unsigned int ensureCapacity(unsigned int newCapacity) APPLE_KEXT_OVERRIDE;
505*a1e26a70SApple OSS Distributions 
506*a1e26a70SApple OSS Distributions 
507*a1e26a70SApple OSS Distributions /*!
508*a1e26a70SApple OSS Distributions  * @function flushCollection
509*a1e26a70SApple OSS Distributions  *
510*a1e26a70SApple OSS Distributions  * @abstract
511*a1e26a70SApple OSS Distributions  * Removes and releases all objects within the set.
512*a1e26a70SApple OSS Distributions  *
513*a1e26a70SApple OSS Distributions  * @discussion
514*a1e26a70SApple OSS Distributions  * The set's capacity (and therefore direct memory consumption)
515*a1e26a70SApple OSS Distributions  * is not reduced by this function.
516*a1e26a70SApple OSS Distributions  */
517*a1e26a70SApple OSS Distributions 	virtual void flushCollection() APPLE_KEXT_OVERRIDE;
518*a1e26a70SApple OSS Distributions 
519*a1e26a70SApple OSS Distributions 
520*a1e26a70SApple OSS Distributions /*!
521*a1e26a70SApple OSS Distributions  * @function setObject
522*a1e26a70SApple OSS Distributions  *
523*a1e26a70SApple OSS Distributions  * @abstract
524*a1e26a70SApple OSS Distributions  * Adds an object to the OSSet if it is not already present.
525*a1e26a70SApple OSS Distributions  *
526*a1e26a70SApple OSS Distributions  * @param anObject  The OSMetaClassBase-derived object to be added to the set.
527*a1e26a70SApple OSS Distributions  *
528*a1e26a70SApple OSS Distributions  * @result
529*a1e26a70SApple OSS Distributions  * <code>true</code> if <code>anObject</code> was successfully
530*a1e26a70SApple OSS Distributions  * added to the set, <code>false</code> otherwise
531*a1e26a70SApple OSS Distributions  * (including if it was already in the set).
532*a1e26a70SApple OSS Distributions  *
533*a1e26a70SApple OSS Distributions  * @discussion
534*a1e26a70SApple OSS Distributions  * The set adds storage to accomodate the new object, if necessary.
535*a1e26a70SApple OSS Distributions  * If successfully added, the object is retained.
536*a1e26a70SApple OSS Distributions  *
537*a1e26a70SApple OSS Distributions  * A <code>false</code> return value can mean either
538*a1e26a70SApple OSS Distributions  * that <code>anObject</code> is already present in the set,
539*a1e26a70SApple OSS Distributions  * or that a memory allocation failure occurred.
540*a1e26a70SApple OSS Distributions  * If you need to know whether the object
541*a1e26a70SApple OSS Distributions  * is already present, use
542*a1e26a70SApple OSS Distributions  * <code>@link containsObject containsObject@/link</code>.
543*a1e26a70SApple OSS Distributions  */
544*a1e26a70SApple OSS Distributions 	virtual bool setObject(const OSMetaClassBase * anObject);
545*a1e26a70SApple OSS Distributions 
546*a1e26a70SApple OSS Distributions 	bool setObject(OSSharedPtr<const OSMetaClassBase> const& anObject);
547*a1e26a70SApple OSS Distributions 
548*a1e26a70SApple OSS Distributions 
549*a1e26a70SApple OSS Distributions /*!
550*a1e26a70SApple OSS Distributions  * @function merge
551*a1e26a70SApple OSS Distributions  *
552*a1e26a70SApple OSS Distributions  * @abstract
553*a1e26a70SApple OSS Distributions  * Adds the contents of an OSArray to the set.
554*a1e26a70SApple OSS Distributions  *
555*a1e26a70SApple OSS Distributions  * @param array  The OSArray object containing the objects to be added.
556*a1e26a70SApple OSS Distributions  *
557*a1e26a70SApple OSS Distributions  * @result
558*a1e26a70SApple OSS Distributions  * <code>true</code> if all objects from <code>array</code>
559*a1e26a70SApple OSS Distributions  * are successfully added the receiver (or were already present),
560*a1e26a70SApple OSS Distributions  * <code>false</code> otherwise.
561*a1e26a70SApple OSS Distributions  *
562*a1e26a70SApple OSS Distributions  * @discussion
563*a1e26a70SApple OSS Distributions  * This functions adds to the receiving set
564*a1e26a70SApple OSS Distributions  * all objects from <code>array</code>
565*a1e26a70SApple OSS Distributions  * that are not already in the receiving set.
566*a1e26a70SApple OSS Distributions  * Objects added to the receiver are retained.
567*a1e26a70SApple OSS Distributions  *
568*a1e26a70SApple OSS Distributions  * In  releases prior to 10.7, this function would return <code>false</code>
569*a1e26a70SApple OSS Distributions  * if an object from <code>array</code> was already present in the set,
570*a1e26a70SApple OSS Distributions  * or if <code>array</code> was empty.
571*a1e26a70SApple OSS Distributions  * This is no longer the case, so this function correctly returns <code>true</code>
572*a1e26a70SApple OSS Distributions  * when the semantic of merging is met.
573*a1e26a70SApple OSS Distributions  */
574*a1e26a70SApple OSS Distributions 	virtual bool merge(const OSArray * array);
575*a1e26a70SApple OSS Distributions 
576*a1e26a70SApple OSS Distributions 
577*a1e26a70SApple OSS Distributions /*!
578*a1e26a70SApple OSS Distributions  * @function merge
579*a1e26a70SApple OSS Distributions  *
580*a1e26a70SApple OSS Distributions  * @abstract
581*a1e26a70SApple OSS Distributions  * Adds the contents of an OSet to the set.
582*a1e26a70SApple OSS Distributions  *
583*a1e26a70SApple OSS Distributions  * @param set    The OSSet object containing the objects to be added.
584*a1e26a70SApple OSS Distributions  *
585*a1e26a70SApple OSS Distributions  * @result
586*a1e26a70SApple OSS Distributions  * <code>true</code> if any object from <code>set</code>
587*a1e26a70SApple OSS Distributions  * are successfully added the receiver (or were already present),
588*a1e26a70SApple OSS Distributions  * <code>false</code> otherwise.
589*a1e26a70SApple OSS Distributions  *
590*a1e26a70SApple OSS Distributions  * @discussion
591*a1e26a70SApple OSS Distributions  * This functions adds to the receiving set
592*a1e26a70SApple OSS Distributions  * all objects from <code>set</code>
593*a1e26a70SApple OSS Distributions  * that are not already in the receiving set.
594*a1e26a70SApple OSS Distributions  * Objects  added to the receiver are retained.
595*a1e26a70SApple OSS Distributions  *
596*a1e26a70SApple OSS Distributions  * In  releases prior to 10.7, this function would return <code>false</code>
597*a1e26a70SApple OSS Distributions  * if an object from <code>set</code> was already present in the set,
598*a1e26a70SApple OSS Distributions  * or if <code>set</code> was empty.
599*a1e26a70SApple OSS Distributions  * This is no longer the case, so this function correctly returns <code>true</code>
600*a1e26a70SApple OSS Distributions  * when the semantic of merging is met.
601*a1e26a70SApple OSS Distributions  */
602*a1e26a70SApple OSS Distributions 	virtual bool merge(const OSSet * set);
603*a1e26a70SApple OSS Distributions 
604*a1e26a70SApple OSS Distributions 
605*a1e26a70SApple OSS Distributions /*!
606*a1e26a70SApple OSS Distributions  * @function removeObject
607*a1e26a70SApple OSS Distributions  *
608*a1e26a70SApple OSS Distributions  * @abstract
609*a1e26a70SApple OSS Distributions  * Removes an object from the set.
610*a1e26a70SApple OSS Distributions  *
611*a1e26a70SApple OSS Distributions  * @param anObject  The OSMetaClassBase-derived object
612*a1e26a70SApple OSS Distributions  *                  to be removed from the set.
613*a1e26a70SApple OSS Distributions  *
614*a1e26a70SApple OSS Distributions  * @discussion
615*a1e26a70SApple OSS Distributions  * The object removed from the set is released.
616*a1e26a70SApple OSS Distributions  */
617*a1e26a70SApple OSS Distributions 	virtual void removeObject(const OSMetaClassBase * anObject);
618*a1e26a70SApple OSS Distributions 
619*a1e26a70SApple OSS Distributions 	void removeObject(OSSharedPtr<const OSMetaClassBase> const& anObject);
620*a1e26a70SApple OSS Distributions 
621*a1e26a70SApple OSS Distributions 
622*a1e26a70SApple OSS Distributions /*!
623*a1e26a70SApple OSS Distributions  * @function containsObject
624*a1e26a70SApple OSS Distributions  *
625*a1e26a70SApple OSS Distributions  * @abstract
626*a1e26a70SApple OSS Distributions  * Checks the set for the presence of an object.
627*a1e26a70SApple OSS Distributions  *
628*a1e26a70SApple OSS Distributions  * @param anObject  The OSMetaClassBase-derived object
629*a1e26a70SApple OSS Distributions  *                  to check for in the set.
630*a1e26a70SApple OSS Distributions  *
631*a1e26a70SApple OSS Distributions  * @result
632*a1e26a70SApple OSS Distributions  * <code>true</code> if <code>anObject</code> is present within the set,
633*a1e26a70SApple OSS Distributions  * <code>false</code> otherwise.
634*a1e26a70SApple OSS Distributions  *
635*a1e26a70SApple OSS Distributions  * @discussion
636*a1e26a70SApple OSS Distributions  * Pointer equality is used.
637*a1e26a70SApple OSS Distributions  * This function returns <code>false</code> if passed <code>NULL</code>.
638*a1e26a70SApple OSS Distributions  */
639*a1e26a70SApple OSS Distributions 	virtual bool containsObject(const OSMetaClassBase * anObject) const;
640*a1e26a70SApple OSS Distributions 
641*a1e26a70SApple OSS Distributions 
642*a1e26a70SApple OSS Distributions /*!
643*a1e26a70SApple OSS Distributions  * @function member
644*a1e26a70SApple OSS Distributions  *
645*a1e26a70SApple OSS Distributions  * @abstract
646*a1e26a70SApple OSS Distributions  * Checks the set for the presence of an object.
647*a1e26a70SApple OSS Distributions  *
648*a1e26a70SApple OSS Distributions  * @param anObject  The OSMetaClassBase-derived object
649*a1e26a70SApple OSS Distributions  *                  to check for in the set.
650*a1e26a70SApple OSS Distributions  *
651*a1e26a70SApple OSS Distributions  * @result
652*a1e26a70SApple OSS Distributions  * <code>true</code> if <code>anObject</code> is present
653*a1e26a70SApple OSS Distributions  * within the set, <code>false</code> otherwise.
654*a1e26a70SApple OSS Distributions  *
655*a1e26a70SApple OSS Distributions  * @discussion
656*a1e26a70SApple OSS Distributions  * Pointer equality is used. This function returns <code>false</code>
657*a1e26a70SApple OSS Distributions  * if passed <code>NULL</code>.
658*a1e26a70SApple OSS Distributions  *
659*a1e26a70SApple OSS Distributions  * <code>@link containsObject containsObject@/link</code>
660*a1e26a70SApple OSS Distributions  * checks for <code>NULL</code> first,
661*a1e26a70SApple OSS Distributions  * and is therefore more efficient than this function.
662*a1e26a70SApple OSS Distributions  */
663*a1e26a70SApple OSS Distributions 	virtual bool member(const OSMetaClassBase * anObject) const;
664*a1e26a70SApple OSS Distributions 
665*a1e26a70SApple OSS Distributions 
666*a1e26a70SApple OSS Distributions /*!
667*a1e26a70SApple OSS Distributions  * @function getAnyObject
668*a1e26a70SApple OSS Distributions  *
669*a1e26a70SApple OSS Distributions  * @abstract
670*a1e26a70SApple OSS Distributions  * Returns an arbitrary (not random) object from the set.
671*a1e26a70SApple OSS Distributions  *
672*a1e26a70SApple OSS Distributions  * @result
673*a1e26a70SApple OSS Distributions  * An arbitrary (not random) object
674*a1e26a70SApple OSS Distributions  * if one exists within the set.
675*a1e26a70SApple OSS Distributions  *
676*a1e26a70SApple OSS Distributions  * @discussion
677*a1e26a70SApple OSS Distributions  * The returned object will be released if removed from the set;
678*a1e26a70SApple OSS Distributions  * if you plan to store the reference, you should call
679*a1e26a70SApple OSS Distributions  * <code>@link
680*a1e26a70SApple OSS Distributions  * //apple_ref/cpp/instm/OSObject/retain/virtualvoid/()
681*a1e26a70SApple OSS Distributions  * retain@/link</code>
682*a1e26a70SApple OSS Distributions  * on that object.
683*a1e26a70SApple OSS Distributions  */
684*a1e26a70SApple OSS Distributions 	virtual OSObject * getAnyObject() const;
685*a1e26a70SApple OSS Distributions 
686*a1e26a70SApple OSS Distributions 
687*a1e26a70SApple OSS Distributions /*!
688*a1e26a70SApple OSS Distributions  * @function isEqualTo
689*a1e26a70SApple OSS Distributions  *
690*a1e26a70SApple OSS Distributions  * @abstract
691*a1e26a70SApple OSS Distributions  * Tests the equality of two OSSet objects.
692*a1e26a70SApple OSS Distributions  *
693*a1e26a70SApple OSS Distributions  * @param aSet  The set object being compared against the receiver.
694*a1e26a70SApple OSS Distributions  * @result
695*a1e26a70SApple OSS Distributions  * <code>true</code> if the two sets are equivalent,
696*a1e26a70SApple OSS Distributions  * <code>false</code> otherwise.
697*a1e26a70SApple OSS Distributions  *
698*a1e26a70SApple OSS Distributions  * @discussion
699*a1e26a70SApple OSS Distributions  * Two OSSet objects are considered equal if they have same count
700*a1e26a70SApple OSS Distributions  * and the same object pointer values.
701*a1e26a70SApple OSS Distributions  */
702*a1e26a70SApple OSS Distributions 	virtual bool isEqualTo(const OSSet * aSet) const;
703*a1e26a70SApple OSS Distributions 
704*a1e26a70SApple OSS Distributions 
705*a1e26a70SApple OSS Distributions /*!
706*a1e26a70SApple OSS Distributions  * @function isEqualTo
707*a1e26a70SApple OSS Distributions  *
708*a1e26a70SApple OSS Distributions  * @abstract
709*a1e26a70SApple OSS Distributions  * Tests the equality of an OSSet against an arbitrary object.
710*a1e26a70SApple OSS Distributions  *
711*a1e26a70SApple OSS Distributions  * @param anObject  The object being compared against the receiver.
712*a1e26a70SApple OSS Distributions  * @result
713*a1e26a70SApple OSS Distributions  * <code>true</code> if the two objects are equivalent,
714*a1e26a70SApple OSS Distributions  * <code>false</code> otherwise.
715*a1e26a70SApple OSS Distributions  *
716*a1e26a70SApple OSS Distributions  * @discussion
717*a1e26a70SApple OSS Distributions  * An OSSet object is considered equal to another object if the other object
718*a1e26a70SApple OSS Distributions  * is derived from OSSet and compares equal as a set.
719*a1e26a70SApple OSS Distributions  */
720*a1e26a70SApple OSS Distributions 	virtual bool isEqualTo(const OSMetaClassBase * anObject) const APPLE_KEXT_OVERRIDE;
721*a1e26a70SApple OSS Distributions 
722*a1e26a70SApple OSS Distributions 
723*a1e26a70SApple OSS Distributions /*!
724*a1e26a70SApple OSS Distributions  * @function serialize
725*a1e26a70SApple OSS Distributions  *
726*a1e26a70SApple OSS Distributions  * @abstract
727*a1e26a70SApple OSS Distributions  * Archives the receiver into the provided
728*a1e26a70SApple OSS Distributions  * @link //apple_ref/doc/class/OSSerialize OSSerialize@/link object.
729*a1e26a70SApple OSS Distributions  *
730*a1e26a70SApple OSS Distributions  * @param serializer The OSSerialize object.
731*a1e26a70SApple OSS Distributions  *
732*a1e26a70SApple OSS Distributions  * @result
733*a1e26a70SApple OSS Distributions  * <code>true</code> if serialization succeeds, <code>false</code> if not.
734*a1e26a70SApple OSS Distributions  */
735*a1e26a70SApple OSS Distributions 	virtual bool serialize(OSSerialize * serializer) const APPLE_KEXT_OVERRIDE;
736*a1e26a70SApple OSS Distributions 
737*a1e26a70SApple OSS Distributions 
738*a1e26a70SApple OSS Distributions /*!
739*a1e26a70SApple OSS Distributions  * @function setOptions
740*a1e26a70SApple OSS Distributions  *
741*a1e26a70SApple OSS Distributions  * @abstract
742*a1e26a70SApple OSS Distributions  * Recursively sets option bits in the set
743*a1e26a70SApple OSS Distributions  * and all child collections.
744*a1e26a70SApple OSS Distributions  *
745*a1e26a70SApple OSS Distributions  * @param options  A bitfield whose values turn the options on (1) or off (0).
746*a1e26a70SApple OSS Distributions  * @param mask     A mask indicating which bits
747*a1e26a70SApple OSS Distributions  *                 in <code>options</code> to change.
748*a1e26a70SApple OSS Distributions  *                 Pass 0 to get the whole current options bitfield
749*a1e26a70SApple OSS Distributions  *                 without changing any settings.
750*a1e26a70SApple OSS Distributions  * @param context  Unused.
751*a1e26a70SApple OSS Distributions  *
752*a1e26a70SApple OSS Distributions  * @result
753*a1e26a70SApple OSS Distributions  * The options bitfield as it was before the set operation.
754*a1e26a70SApple OSS Distributions  *
755*a1e26a70SApple OSS Distributions  * @discussion
756*a1e26a70SApple OSS Distributions  * Kernel extensions should not call this function.
757*a1e26a70SApple OSS Distributions  *
758*a1e26a70SApple OSS Distributions  * Child collections' options are changed only if the receiving set's
759*a1e26a70SApple OSS Distributions  * options actually change.
760*a1e26a70SApple OSS Distributions  */
761*a1e26a70SApple OSS Distributions 	virtual unsigned setOptions(unsigned options, unsigned mask, void * context = NULL) APPLE_KEXT_OVERRIDE;
762*a1e26a70SApple OSS Distributions 
763*a1e26a70SApple OSS Distributions 
764*a1e26a70SApple OSS Distributions /*!
765*a1e26a70SApple OSS Distributions  * @function copyCollection
766*a1e26a70SApple OSS Distributions  *
767*a1e26a70SApple OSS Distributions  * @abstract
768*a1e26a70SApple OSS Distributions  * Creates a deep copy of this set and its child collections.
769*a1e26a70SApple OSS Distributions  *
770*a1e26a70SApple OSS Distributions  * @param cycleDict  A dictionary of all of the collections
771*a1e26a70SApple OSS Distributions  *                   that have been copied so far,
772*a1e26a70SApple OSS Distributions  *                   which is used to track circular references.
773*a1e26a70SApple OSS Distributions  *                   To start the copy at the top level,
774*a1e26a70SApple OSS Distributions  *                   pass <code>NULL</code>.
775*a1e26a70SApple OSS Distributions  *
776*a1e26a70SApple OSS Distributions  * @result
777*a1e26a70SApple OSS Distributions  * The newly copied set, with a retain count of 1,
778*a1e26a70SApple OSS Distributions  * or <code>NULL</code> if there is insufficient memory to do the copy.
779*a1e26a70SApple OSS Distributions  *
780*a1e26a70SApple OSS Distributions  * @discussion
781*a1e26a70SApple OSS Distributions  * The receiving set, and any collections it contains,
782*a1e26a70SApple OSS Distributions  * recursively, are copied.
783*a1e26a70SApple OSS Distributions  * Objects that are not derived from OSCollection are retained
784*a1e26a70SApple OSS Distributions  * rather than copied.
785*a1e26a70SApple OSS Distributions  */
786*a1e26a70SApple OSS Distributions 	OSPtr<OSCollection>  copyCollection(OSDictionary *cycleDict = NULL) APPLE_KEXT_OVERRIDE;
787*a1e26a70SApple OSS Distributions 
788*a1e26a70SApple OSS Distributions 	OSMetaClassDeclareReservedUnused(OSSet, 0);
789*a1e26a70SApple OSS Distributions 	OSMetaClassDeclareReservedUnused(OSSet, 1);
790*a1e26a70SApple OSS Distributions 	OSMetaClassDeclareReservedUnused(OSSet, 2);
791*a1e26a70SApple OSS Distributions 	OSMetaClassDeclareReservedUnused(OSSet, 3);
792*a1e26a70SApple OSS Distributions 	OSMetaClassDeclareReservedUnused(OSSet, 4);
793*a1e26a70SApple OSS Distributions 	OSMetaClassDeclareReservedUnused(OSSet, 5);
794*a1e26a70SApple OSS Distributions 	OSMetaClassDeclareReservedUnused(OSSet, 6);
795*a1e26a70SApple OSS Distributions 	OSMetaClassDeclareReservedUnused(OSSet, 7);
796*a1e26a70SApple OSS Distributions };
797*a1e26a70SApple OSS Distributions 
798*a1e26a70SApple OSS Distributions #endif /* !_OS_OSSET_H */
799