]> git.saurik.com Git - apple/xnu.git/blobdiff - libkern/c++/OSCollectionIterator.cpp
xnu-7195.50.7.100.1.tar.gz
[apple/xnu.git] / libkern / c++ / OSCollectionIterator.cpp
index 93a2433e60ab554b3f3bda6caf8624834f481796..dbbe7fc447583afe59c894c8a0e8f6c6a8240ff6 100644 (file)
  */
 /* IOArray.h created by rsulack on Thu 11-Sep-1997 */
 
-#include <libkern/c++/OSCollectionIterator.h>
-#include <libkern/c++/OSCollection.h>
+#define IOKIT_ENABLE_SHARED_PTR
+
 #include <libkern/c++/OSArray.h>
+#include <libkern/c++/OSCollection.h>
+#include <libkern/c++/OSCollectionIterator.h>
 #include <libkern/c++/OSLib.h>
+#include <libkern/c++/OSSharedPtr.h>
 
 #define super OSIterator
 
@@ -43,23 +46,21 @@ OSCollectionIterator::initWithCollection(const OSCollection *inColl)
                return false;
        }
 
-       inColl->retain();
-       collection = inColl;
-       collIterator = 0;
+       collection.reset(inColl, OSRetain);
+       collIterator = NULL;
        initialUpdateStamp = 0;
        valid = false;
 
        return true;
 }
 
-OSCollectionIterator *
+OSSharedPtr<OSCollectionIterator>
 OSCollectionIterator::withCollection(const OSCollection *inColl)
 {
-       OSCollectionIterator *me = new OSCollectionIterator;
+       OSSharedPtr<OSCollectionIterator> me = OSMakeShared<OSCollectionIterator>();
 
        if (me && !me->initWithCollection(inColl)) {
-               me->release();
-               return 0;
+               return nullptr;
        }
 
        return me;
@@ -71,13 +72,10 @@ OSCollectionIterator::free()
        if (collIterator) {
                kfree(collIterator, collection->iteratorSize());
                OSCONTAINER_ACCUMSIZE(-((size_t) collection->iteratorSize()));
-               collIterator = 0;
+               collIterator = NULL;
        }
 
-       if (collection) {
-               collection->release();
-               collection = 0;
-       }
+       collection.reset();
 
        super::free();
 }
@@ -128,9 +126,9 @@ OSCollectionIterator::getNextObject()
        bool retVal;
 
        if (!isValid()) {
-               return 0;
+               return NULL;
        }
 
        retVal = collection->getNextObjectForIterator(collIterator, &retObj);
-       return (retVal)? retObj : 0;
+       return (retVal)? retObj : NULL;
 }