diff options
author | Steve Block <steveblock@google.com> | 2011-05-06 11:45:16 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2011-05-12 13:44:10 +0100 |
commit | cad810f21b803229eb11403f9209855525a25d57 (patch) | |
tree | 29a6fd0279be608e0fe9ffe9841f722f0f4e4269 /WebCore/platform/DeprecatedPtrListImpl.cpp | |
parent | 121b0cf4517156d0ac5111caf9830c51b69bae8f (diff) | |
download | external_webkit-cad810f21b803229eb11403f9209855525a25d57.zip external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.gz external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.bz2 |
Merge WebKit at r75315: Initial merge by git.
Change-Id: I570314b346ce101c935ed22a626b48c2af266b84
Diffstat (limited to 'WebCore/platform/DeprecatedPtrListImpl.cpp')
-rw-r--r-- | WebCore/platform/DeprecatedPtrListImpl.cpp | 515 |
1 files changed, 0 insertions, 515 deletions
diff --git a/WebCore/platform/DeprecatedPtrListImpl.cpp b/WebCore/platform/DeprecatedPtrListImpl.cpp deleted file mode 100644 index 96fd513..0000000 --- a/WebCore/platform/DeprecatedPtrListImpl.cpp +++ /dev/null @@ -1,515 +0,0 @@ -/* - * Copyright (C) 2003, 2006 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 "config.h" -#include "DeprecatedPtrListImpl.h" - -#include <cstddef> -#include <algorithm> -#include <wtf/Assertions.h> -#include <wtf/Noncopyable.h> - -namespace WebCore { - -class DeprecatedListNode : public Noncopyable -{ -public: - DeprecatedListNode(void *d) : data(d), next(0), prev(0) { } - - void *data; - DeprecatedListNode *next; - DeprecatedListNode *prev; -}; - - -static DeprecatedListNode *copyList(DeprecatedListNode *l, DeprecatedListNode *&tail) -{ - DeprecatedListNode *node = l; - DeprecatedListNode *copyHead = 0; - DeprecatedListNode *last = 0; - - while (node != 0) { - DeprecatedListNode *copy = new DeprecatedListNode(node->data); - if (last != 0) { - last->next = copy; - } else { - copyHead = copy; - } - - copy->prev = last; - - last = copy; - node = node->next; - } - - tail = last; - return copyHead; -} - - -DeprecatedPtrListImpl::DeprecatedPtrListImpl(void (*deleteFunc)(void *)) : - head(0), - tail(0), - cur(0), - nodeCount(0), - deleteItem(deleteFunc), - iterators(0) -{ -} - -DeprecatedPtrListImpl::DeprecatedPtrListImpl(const DeprecatedPtrListImpl &impl) : - cur(0), - nodeCount(impl.nodeCount), - deleteItem(impl.deleteItem), - iterators(0) -{ - head = copyList(impl.head, tail); -} - -DeprecatedPtrListImpl::~DeprecatedPtrListImpl() -{ - clear(false); - - DeprecatedPtrListImplIterator *next; - for (DeprecatedPtrListImplIterator *it = iterators; it; it = next) { - next = it->next; - it->list = 0; - ASSERT(!it->node); - it->next = 0; - it->prev = 0; - } -} - -void DeprecatedPtrListImpl::clear(bool deleteItems) -{ - DeprecatedListNode *next; - - for (DeprecatedListNode *node = head; node; node = next) { - next = node->next; - if (deleteItems) - deleteItem(node->data); - delete node; - } - - head = 0; - tail = 0; - cur = 0; - nodeCount = 0; - - for (DeprecatedPtrListImplIterator *it = iterators; it; it = it->next) - it->node = 0; -} - -void *DeprecatedPtrListImpl::at(unsigned n) -{ - DeprecatedListNode *node; - if (n >= nodeCount - 1) { - node = tail; - } else { - node = head; - for (unsigned i = 0; i < n && node; i++) { - node = node->next; - } - } - - cur = node; - return node ? node->data : 0; -} - -bool DeprecatedPtrListImpl::insert(unsigned n, const void *item) -{ - if (n > nodeCount) { - return false; - } - - DeprecatedListNode *node = new DeprecatedListNode(const_cast<void*>(item)); - - if (n == 0) { - // inserting at head - node->next = head; - if (head) { - head->prev = node; - } - head = node; - if (tail == 0) { - tail = node; - } - } else if (n == nodeCount) { - // inserting at tail - node->prev = tail; - if (tail) { - tail->next = node; - } - tail = node; - } else { - // general insertion - - // iterate to one node before the insertion point, can't be null - // since we know n > 0 and n < nodeCount - DeprecatedListNode *prevNode = head; - - for (unsigned i = 0; i < n - 1; i++) { - prevNode = prevNode->next; - } - node->prev = prevNode; - node->next = prevNode->next; - if (node->next) { - node->next->prev = node; - } - prevNode->next = node; - } - - nodeCount++; - cur = node; - return true; -} - -bool DeprecatedPtrListImpl::remove(bool shouldDeleteItem) -{ - DeprecatedListNode *node = cur; - if (node == 0) { - return false; - } - - if (node->prev == 0) { - head = node->next; - } else { - node->prev->next = node->next; - } - - if (node->next == 0) { - tail = node->prev; - } else { - node->next->prev = node->prev; - } - - if (node->next) { - cur = node->next; - } else { - cur = node->prev; - } - - for (DeprecatedPtrListImplIterator *it = iterators; it; it = it->next) { - if (it->node == node) { - it->node = cur; - } - } - - if (shouldDeleteItem) { - deleteItem(node->data); - } - delete node; - - nodeCount--; - - return true; -} - -bool DeprecatedPtrListImpl::remove(unsigned n, bool deleteItem) -{ - if (n >= nodeCount) { - return false; - } - - at(n); - return remove(deleteItem); -} - -bool DeprecatedPtrListImpl::removeFirst(bool deleteItem) -{ - return remove(0, deleteItem); -} - -bool DeprecatedPtrListImpl::removeLast(bool deleteItem) -{ - return remove(nodeCount - 1, deleteItem); -} - -bool DeprecatedPtrListImpl::removeRef(const void *item, bool deleteItem) -{ - DeprecatedListNode *node; - - node = head; - - while (node && item != node->data) { - node = node->next; - } - - if (node == 0) { - return false; - } - - cur = node; - - return remove(deleteItem); -} - -void *DeprecatedPtrListImpl::getFirst() const -{ - return head ? head->data : 0; -} - -void *DeprecatedPtrListImpl::getLast() const -{ - return tail ? tail->data : 0; -} - -void *DeprecatedPtrListImpl::getNext() const -{ - return cur && cur->next ? cur->next->data : 0; -} - -void *DeprecatedPtrListImpl::getPrev() const -{ - return cur && cur->prev ? cur->prev->data : 0; -} - -void *DeprecatedPtrListImpl::current() const -{ - if (cur) { - return cur->data; - } else { - return 0; - } -} - -void *DeprecatedPtrListImpl::first() -{ - cur = head; - return current(); -} - -void *DeprecatedPtrListImpl::last() -{ - cur = tail; - return current(); -} - -void *DeprecatedPtrListImpl::next() -{ - if (cur) { - cur = cur->next; - } - return current(); -} - -void *DeprecatedPtrListImpl::prev() -{ - if (cur) { - cur = cur->prev; - } - return current(); -} - -void *DeprecatedPtrListImpl::take(unsigned n) -{ - void *retval = at(n); - remove(false); - return retval; -} - -void *DeprecatedPtrListImpl::take() -{ - void *retval = current(); - remove(false); - return retval; -} - -void DeprecatedPtrListImpl::append(const void *item) -{ - insert(nodeCount, item); -} - -void DeprecatedPtrListImpl::prepend(const void *item) -{ - insert(0, item); -} - -unsigned DeprecatedPtrListImpl::containsRef(const void *item) const -{ - unsigned count = 0; - - for (DeprecatedListNode *node = head; node; node = node->next) { - if (item == node->data) { - ++count; - } - } - - return count; -} - -int DeprecatedPtrListImpl::findRef(const void *item) -{ - DeprecatedListNode *node = head; - int index = 0; - - while (node && item != node->data) { - node = node->next; - index++; - } - - cur = node; - - if (node == 0) { - return -1; - } - - return index; -} - -DeprecatedPtrListImpl &DeprecatedPtrListImpl::assign(const DeprecatedPtrListImpl &impl, bool deleteItems) -{ - clear(deleteItems); - DeprecatedPtrListImpl(impl).swap(*this); - return *this; -} - -void DeprecatedPtrListImpl::addIterator(DeprecatedPtrListImplIterator *iter) const -{ - iter->next = iterators; - iter->prev = 0; - - if (iterators) { - iterators->prev = iter; - } - iterators = iter; -} - -void DeprecatedPtrListImpl::removeIterator(DeprecatedPtrListImplIterator *iter) const -{ - if (iter->prev == 0) { - iterators = iter->next; - } else { - iter->prev->next = iter->next; - } - - if (iter->next) { - iter->next->prev = iter->prev; - } -} - -void DeprecatedPtrListImpl::swap(DeprecatedPtrListImpl &other) -{ - using std::swap; - - ASSERT(iterators == 0); - ASSERT(other.iterators == 0); - - swap(head, other.head); - swap(tail, other.tail); - swap(cur, other.cur); - swap(nodeCount, other.nodeCount); - swap(deleteItem, other.deleteItem); -} - - -DeprecatedPtrListImplIterator::DeprecatedPtrListImplIterator() : - list(0), - node(0) -{ -} - -DeprecatedPtrListImplIterator::DeprecatedPtrListImplIterator(const DeprecatedPtrListImpl &impl) : - list(&impl), - node(impl.head) -{ - impl.addIterator(this); -} - -DeprecatedPtrListImplIterator::~DeprecatedPtrListImplIterator() -{ - if (list) { - list->removeIterator(this); - } -} - -DeprecatedPtrListImplIterator::DeprecatedPtrListImplIterator(const DeprecatedPtrListImplIterator &impl) : - list(impl.list), - node(impl.node) -{ - if (list) { - list->addIterator(this); - } -} - -unsigned DeprecatedPtrListImplIterator::count() const -{ - return list == 0 ? 0 : list->count(); -} - -void *DeprecatedPtrListImplIterator::toFirst() -{ - if (list) { - node = list->head; - } - return current(); -} - -void *DeprecatedPtrListImplIterator::toLast() -{ - if (list) { - node = list->tail; - } - return current(); -} - -void *DeprecatedPtrListImplIterator::current() const -{ - return node == 0 ? 0 : node->data; -} - -void *DeprecatedPtrListImplIterator::operator--() -{ - if (node) { - node = node->prev; - } - return current(); -} - -void *DeprecatedPtrListImplIterator::operator++() -{ - if (node) { - node = node->next; - } - return current(); -} - -DeprecatedPtrListImplIterator &DeprecatedPtrListImplIterator::operator=(const DeprecatedPtrListImplIterator &impl) -{ - if (list) { - list->removeIterator(this); - } - - list = impl.list; - node = impl.node; - - if (list) { - list->addIterator(this); - } - - return *this; -} - -} |