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