⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kwqarrayimpl.cpp

📁 khtml在gtk上的移植版本
💻 CPP
字号:
/* * Copyright (C) 2003 Apple Computer, Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */#include "KWQArrayImpl.h"#include <new>#include <string.h>#define	MIN(a,b) (((a)<(b))?(a):(b))using std::nothrow;KWQArrayImpl::KWQArrayPrivate::KWQArrayPrivate(size_t pItemSize, size_t pNumItems) :     numItems(pNumItems),     itemSize(pItemSize),     data(pNumItems > 0 ? new char[itemSize * numItems] : NULL),     refCount(0){}KWQArrayImpl::KWQArrayPrivate::~KWQArrayPrivate(){    delete[] data;}KWQArrayImpl::KWQArrayImpl(size_t itemSize, size_t numItems) :     d(new KWQArrayPrivate(itemSize, numItems)){}KWQArrayImpl::KWQArrayImpl(const KWQArrayImpl &a) :     d(a.d){}KWQArrayImpl::~KWQArrayImpl(){}KWQArrayImpl &KWQArrayImpl::operator=(const KWQArrayImpl &a){    d = a.d;    return *this;}void *KWQArrayImpl::data() const{    return d->data;}uint KWQArrayImpl::size() const{    return d->numItems;}bool KWQArrayImpl::resize(size_t newSize){    if (newSize != d->numItems) {        char *newData;        	if (newSize != 0) {	    newData = new (nothrow) char[newSize * d->itemSize];	    if (newData == NULL) {	        return false;	    }	} else {	    newData = NULL;	}	memcpy(newData, d->data, MIN(newSize, d->numItems) * d->itemSize);        delete[] d->data;	d->data = newData;	d->numItems = newSize;    }    return true;}void KWQArrayImpl::duplicate(const void *data, size_t newSize){    if (data == NULL) {	newSize = 0;    }    if (d->refCount > 1) {        d = KWQRefPtr<KWQArrayPrivate>(new KWQArrayPrivate(d->itemSize, newSize));    }    if (d->numItems != newSize) {	resize(newSize);    }#if KWIQ        if (d->data == data)	return;    memmove(d->data, data, newSize * d->itemSize);#else    memcpy(d->data, data, newSize * d->itemSize);#endif}bool KWQArrayImpl::fill(const void *item, int numItems){    if (numItems == -1) {        numItems = d->numItems;    }    if ((unsigned)numItems != d->numItems) {        if (!resize(numItems)) {	    return false;	}    }    for (int i = 0; i < numItems; i++) {        memcpy(&d->data[i * d->itemSize], item, d->itemSize);    }    return true;}bool KWQArrayImpl::operator==(const KWQArrayImpl &a) const{    return d->numItems == a.d->numItems && d->itemSize == d->itemSize        && (d->data == a.d->data || memcmp(d->data, a.d->data, d->itemSize*d->numItems) == 0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -