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