Loading...
--- xnu/xnu-792/libkern/c++/OSArray.cpp
+++ xnu/xnu-344.21.74/libkern/c++/OSArray.cpp
@@ -3,19 +3,22 @@
*
* @APPLE_LICENSE_HEADER_START@
*
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
*
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
@@ -24,7 +27,6 @@
#include <libkern/c++/OSArray.h>
-#include <libkern/c++/OSDictionary.h>
#include <libkern/c++/OSSerialize.h>
#include <libkern/c++/OSLib.h>
@@ -49,9 +51,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 +70,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 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++ ) {
@@ -154,13 +153,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 +195,7 @@
bcopy(array, newArray, oldSize);
bzero(&newArray[capacity], newSize - oldSize);
- kfree(array, oldSize);
+ kfree((vm_offset_t)array, oldSize);
array = newArray;
capacity = newCapacity;
}
@@ -337,7 +333,7 @@
if (index >= count)
return 0;
else
- return (OSObject *) (const_cast<OSMetaClassBase *>(array[index]));
+ return (OSObject *) array[index];
}
OSObject *OSArray::getLastObject() const
@@ -345,7 +341,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 +373,7 @@
unsigned int index = (*iteratorP)++;
if (index < count) {
- *ret = (OSObject *)(const_cast<OSMetaClassBase *> (array[index]));
+ *ret = (OSObject *) array[index];
return true;
}
else {
@@ -398,74 +394,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;
-}
-