]> git.saurik.com Git - apple/xnu.git/blobdiff - libkern/c++/OSCollection.cpp
xnu-792.tar.gz
[apple/xnu.git] / libkern / c++ / OSCollection.cpp
index 6a958424a9a77436e3e32f693dfed3a80826c499..ff54175ee8978e6cced0be831063789e09d7ffe5 100644 (file)
  */
 /* IOArray.h created by rsulack on Thu 11-Sep-1997 */
 
+#include <libkern/OSDebug.h>
+
 #include <libkern/c++/OSCollection.h>
-#include <libkern/c++/OSArray.h>
+#include <libkern/c++/OSDictionary.h>
+
+#include <IOKit/IOKitDebug.h>
 
 #define super OSObject
 
 OSDefineMetaClassAndAbstractStructors(OSCollection, OSObject)
-OSMetaClassDefineReservedUnused(OSCollection, 0);
-OSMetaClassDefineReservedUnused(OSCollection, 1);
+
+
+OSMetaClassDefineReservedUsed(OSCollection, 0);
+OSMetaClassDefineReservedUsed(OSCollection, 1);
 OSMetaClassDefineReservedUnused(OSCollection, 2);
 OSMetaClassDefineReservedUnused(OSCollection, 3);
 OSMetaClassDefineReservedUnused(OSCollection, 4);
@@ -45,3 +51,40 @@ bool OSCollection::init()
 
     return true;
 }
+
+void OSCollection::haveUpdated()
+{
+    if ( (gIOKitDebug & kOSLogRegistryMods) && (fOptions & kImmutable) )
+       OSReportWithBacktrace("Trying to change a collection in the registry");
+
+    updateStamp++;
+}
+
+unsigned OSCollection::setOptions(unsigned options, unsigned mask, void *)
+{
+    unsigned old = fOptions;
+
+    if (mask)
+       fOptions = (old & ~mask) | (options & mask);
+
+    return old;
+}
+
+OSCollection *  OSCollection::copyCollection(OSDictionary *cycleDict)
+{
+    if (cycleDict) {
+       OSObject *obj = cycleDict->getObject((const OSSymbol *) this);
+       if (obj)
+           obj->retain();
+
+       return reinterpret_cast<OSCollection *>(obj);
+    }
+    else {
+       // If we are here it means that there is a collection subclass that
+       // hasn't overridden the copyCollection method.  In which case just
+       // return a reference to ourselves.  
+       // Hopefully this collection will not be inserted into the registry
+       retain();
+       return this;
+    }
+}