18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ContentData.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CounterContent.h"
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "StringImpl.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "StyleImage.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ContentData::clear()
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    deleteContent();
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ContentData* n = m_next;
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_next = 0;
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Reverse the list so we can delete without recursing.
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ContentData* last = 0;
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ContentData* c;
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    while ((c = n)) {
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        n = c->m_next;
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        c->m_next = last;
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        last = c;
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (c = last; c; c = n) {
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        n = c->m_next;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        c->m_next = 0;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        delete c;
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianbool ContentData::dataEquivalent(const ContentData& other) const
548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{
558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    if (type() != other.type())
568f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        return false;
578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    switch (type()) {
598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        case CONTENT_NONE:
608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            return true;
618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            break;
628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        case CONTENT_TEXT:
638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            return equal(text(), other.text());
648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            break;
658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        case CONTENT_OBJECT:
668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            return StyleImage::imagesEquivalent(image(), other.image());
678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            break;
688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        case CONTENT_COUNTER:
698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            return *counter() == *other.counter();
708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            break;
718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    ASSERT_NOT_REACHED();
748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    return false;
758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}
768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianvoid ContentData::deleteContent()
788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{
798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    switch (m_type) {
808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        case CONTENT_NONE:
818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            break;
828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        case CONTENT_OBJECT:
838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            m_content.m_image->deref();
848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            break;
858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        case CONTENT_TEXT:
868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            m_content.m_text->deref();
878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            break;
888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        case CONTENT_COUNTER:
898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            delete m_content.m_counter;
908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            break;
918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    m_type = CONTENT_NONE;
948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}
958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
97