示例#1
0
/* internal */
bool OSOrderedSet::setObject(unsigned int index, const OSMetaClassBase *anObject)
{
    unsigned int i;
    unsigned int newCount = count + 1;

    if ((index > count) || !anObject)
        return false;

    if (containsObject(anObject))
        return false;

    // do we need more space?
    if (newCount > capacity && newCount > ensureCapacity(newCount))
        return false;

    haveUpdated();
    if (index != count) {
        for (i = count; i > index; i--)
            array[i] = array[i-1];
    }
    array[index].obj = anObject;
//    array[index].pri = pri;
    anObject->taggedRetain(OSTypeID(OSCollection));
    count++;

    return true;
}
示例#2
0
文件: OSSet.cpp 项目: Algozjb/xnu
bool OSSet::isEqualTo(const OSSet *aSet) const
{
    unsigned int count;
    unsigned int i;
    const OSMetaClassBase *obj1;
    const OSMetaClassBase *obj2;

    if ( this == aSet )
        return true;

    count = members->count;
    if ( count != aSet->getCount() )
        return false;

    for ( i = 0; i < count; i++ ) {
        obj1 = aSet->members->getObject(i);
	if (containsObject(obj1))
		continue;
        obj2 = members->getObject(i);
        if ( !obj1 || !obj2 )
                return false;

        if ( !obj1->isEqualTo(obj2) )
            return false;
    }

    return true;
}
示例#3
0
void GenericDataCollection::removeObject(const int id)
{
  if (containsObject(id))
  {
    m_sortedIDs.removeOne(id);
    delete m_objects.take(id);
  }
}
示例#4
0
文件: OSSet.cpp 项目: Algozjb/xnu
bool OSSet::setObject(const OSMetaClassBase *anObject)
{
    if (containsObject(anObject)) {
        return false;
    } else {
        haveUpdated();
        return members->setObject(anObject);
    }
}
示例#5
0
    bool mergeArraysOfObjects(const QJsonArray &arrayFrom, QJsonArray &arrayTo, CompareValuesJson &comparer) {
        LOG_DEBUG << "#";

        int minSize = qMin(arrayTo.size(), arrayFrom.size());

        int i = 0;
        // skip same elements
        while (i < minSize) {
            QJsonObject objectTo = arrayTo[i].toObject();
            QJsonObject objectFrom = arrayFrom[i].toObject();

            if (comparer(objectTo, objectFrom) == 0) {
                i++;
            } else {
                break;
            }
        }

        LOG_DEBUG << i << "same elements skipped";

        int maxIndexOfEqual = i;

        QJsonArray mergedArray = arrayTo;

        int sizeFrom = arrayFrom.size();
        QJsonArray elementsToAdd;

        for (; i < sizeFrom; i++) {
            Q_ASSERT(arrayFrom[i].isObject());
            QJsonObject objectToAdd = arrayFrom[i].toObject();

            bool alreadyExists = containsObject(arrayTo, maxIndexOfEqual, objectToAdd, comparer);
            if (!alreadyExists) {
                elementsToAdd.append(objectToAdd);
            }
        }

        LOG_DEBUG << elementsToAdd.size() << "new elements to be added";

        int sizeMergedAdd = elementsToAdd.size();
        for (int t = 0; t < sizeMergedAdd; t++) {
            mergedArray.append(elementsToAdd[t]);
        }

        arrayTo = mergedArray;

        return true;
    }
示例#6
0
文件: OSSet.cpp 项目: Algozjb/xnu
bool OSSet::merge(const OSArray * array)
{
    const OSMetaClassBase * anObject = 0;
    bool                    result   = true;

    for (int i = 0; (anObject = array->getObject(i)); i++) {

       /* setObject() returns false if the object is already in the set,
        * so we have to check beforehand here with containsObject().
        */
        if (containsObject(anObject)) {
            continue;
        }
        if (!setObject(anObject)) {
            result = false;
        }
    }

    return result;
}