Loading...
--- xnu/xnu-792/libkern/c++/OSArray.cpp
+++ xnu/xnu-201.42.3/libkern/c++/OSArray.cpp
@@ -24,7 +24,6 @@
#include <libkern/c++/OSArray.h>
-#include <libkern/c++/OSDictionary.h>
#include <libkern/c++/OSSerialize.h>
#include <libkern/c++/OSLib.h>
@@ -49,9 +48,6 @@
#define ACCUMSIZE(s)
#endif
-#define EXT_CAST(obj) \
- reinterpret_cast<OSObject *>(const_cast<OSMetaClassBase *>(obj))
-
bool OSArray::initWithCapacity(unsigned int inCapacity)
{
int size;
@@ -71,23 +67,23 @@
bzero(array, size);
ACCUMSIZE(size);
- return true;
+ return this;
}
bool OSArray::initWithObjects(const OSObject *objects[],
unsigned int theCount,
- unsigned int theCapacity)
-{
- unsigned int initCapacity;
+ unsigned int theCapacity = 0)
+{
+ unsigned int capacity;
if (!theCapacity)
- initCapacity = theCount;
+ capacity = theCount;
else if (theCount > theCapacity)
return false;
else
- initCapacity = theCapacity;
-
- if (!objects || !initWithCapacity(initCapacity))
+ capacity = theCapacity;
+
+ if (!objects || !initWithCapacity(capacity))
return false;
for ( unsigned int i = 0; i < theCount; i++ ) {
@@ -97,14 +93,14 @@
return false;
array[count++] = newObject;
- newObject->taggedRetain(OSTypeID(OSCollection));
+ newObject->retain();
}
return true;
}
bool OSArray::initWithArray(const OSArray *anArray,
- unsigned int theCapacity)
+ unsigned int theCapacity = 0)
{
if ( !anArray )
return false;
@@ -118,7 +114,7 @@
OSArray *me = new OSArray;
if (me && !me->initWithCapacity(capacity)) {
- me->release();
+ me->free();
return 0;
}
@@ -127,12 +123,12 @@
OSArray *OSArray::withObjects(const OSObject *objects[],
unsigned int count,
- unsigned int capacity)
+ unsigned int capacity = 0)
{
OSArray *me = new OSArray;
if (me && !me->initWithObjects(objects, count, capacity)) {
- me->release();
+ me->free();
return 0;
}
@@ -140,12 +136,12 @@
}
OSArray *OSArray::withArray(const OSArray *array,
- unsigned int capacity)
+ unsigned int capacity = 0)
{
OSArray *me = new OSArray;
if (me && !me->initWithArray(array, capacity)) {
- me->release();
+ me->free();
return 0;
}
@@ -154,13 +150,10 @@
void OSArray::free()
{
- // Clear immutability - assumes the container is doing the right thing
- (void) super::setOptions(0, kImmutable);
-
flushCollection();
if (array) {
- kfree(array, sizeof(const OSMetaClassBase *) * capacity);
+ kfree((vm_offset_t)array, sizeof(const OSMetaClassBase *) * capacity);
ACCUMSIZE( -(sizeof(const OSMetaClassBase *) * capacity) );
}
@@ -199,7 +192,7 @@
bcopy(array, newArray, oldSize);
bzero(&newArray[capacity], newSize - oldSize);
- kfree(array, oldSize);
+ kfree((vm_offset_t)array, oldSize);
array = newArray;
capacity = newCapacity;
}
@@ -213,7 +206,7 @@
haveUpdated();
for (i = 0; i < count; i++)
- array[i]->taggedRelease(OSTypeID(OSCollection));
+ array[i]->release();
count = 0;
}
@@ -240,7 +233,7 @@
array[i] = array[i-1];
}
array[index] = anObject;
- anObject->taggedRetain(OSTypeID(OSCollection));
+ anObject->retain();
count++;
return true;
@@ -263,7 +256,7 @@
const OSMetaClassBase *newObject = otherArray->getObject(i);
array[count++] = newObject;
- newObject->taggedRetain(OSTypeID(OSCollection));
+ newObject->retain();
}
return true;
@@ -280,9 +273,9 @@
haveUpdated();
oldObject = array[index];
array[index] = anObject;
- anObject->taggedRetain(OSTypeID(OSCollection));
-
- oldObject->taggedRelease(OSTypeID(OSCollection));
+ anObject->retain();
+
+ oldObject->release();
}
void OSArray::removeObject(unsigned int index)
@@ -300,7 +293,7 @@
for (i = index; i < count; i++)
array[i] = array[i+1];
- oldObject->taggedRelease(OSTypeID(OSCollection));
+ oldObject->release();
}
bool OSArray::isEqualTo(const OSArray *anArray) const
@@ -337,7 +330,7 @@
if (index >= count)
return 0;
else
- return (OSObject *) (const_cast<OSMetaClassBase *>(array[index]));
+ return (OSObject *) array[index];
}
OSObject *OSArray::getLastObject() const
@@ -345,7 +338,7 @@
if (count == 0)
return 0;
else
- return ( OSObject *) (const_cast<OSMetaClassBase *>(array[count - 1]));
+ return (OSObject *) array[count - 1];
}
unsigned int OSArray::getNextIndexOfObject(const OSMetaClassBase * anObject,
@@ -377,7 +370,7 @@
unsigned int index = (*iteratorP)++;
if (index < count) {
- *ret = (OSObject *)(const_cast<OSMetaClassBase *> (array[index]));
+ *ret = (OSObject *) array[index];
return true;
}
else {
@@ -398,74 +391,3 @@
return s->addXMLEndTag("array");
}
-
-unsigned OSArray::setOptions(unsigned options, unsigned mask, void *)
-{
- unsigned old = super::setOptions(options, mask);
- if ((old ^ options) & mask) {
-
- // Value changed need to recurse over all of the child collections
- for ( unsigned i = 0; i < count; i++ ) {
- OSCollection *coll = OSDynamicCast(OSCollection, array[i]);
- if (coll)
- coll->setOptions(options, mask);
- }
- }
-
- return old;
-}
-
-OSCollection * OSArray::copyCollection(OSDictionary *cycleDict)
-{
- bool allocDict = !cycleDict;
- OSCollection *ret = 0;
- OSArray *newArray = 0;
-
- if (allocDict) {
- cycleDict = OSDictionary::withCapacity(16);
- if (!cycleDict)
- return 0;
- }
-
- do {
- // Check for a cycle
- ret = super::copyCollection(cycleDict);
- if (ret)
- continue;
-
- newArray = OSArray::withArray(this);
- if (!newArray)
- continue;
-
- // Insert object into cycle Dictionary
- cycleDict->setObject((const OSSymbol *) this, newArray);
-
- for (unsigned int i = 0; i < count; i++) {
- OSCollection *coll =
- OSDynamicCast(OSCollection, EXT_CAST(newArray->array[i]));
-
- if (coll) {
- OSCollection *newColl = coll->copyCollection(cycleDict);
- if (!newColl)
- goto abortCopy;
-
- newArray->replaceObject(i, newColl);
- newColl->release();
- };
- };
-
- ret = newArray;
- newArray = 0;
-
- } while (false);
-
-abortCopy:
- if (newArray)
- newArray->release();
-
- if (allocDict)
- cycleDict->release();
-
- return ret;
-}
-