15f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian/*
25f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
35f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
45f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * This library is free software; you can redistribute it and/or
55f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * modify it under the terms of the GNU Library General Public
65f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * License as published by the Free Software Foundation; either
75f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * version 2 of the License, or (at your option) any later version.
85f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
95f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * This library is distributed in the hope that it will be useful,
105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * but WITHOUT ANY WARRANTY; without even the implied warranty of
115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Library General Public License for more details.
135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * You should have received a copy of the GNU Library General Public License
155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * along with this library; see the file COPYING.LIB.  If not, write to
165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Boston, MA 02110-1301, USA.
185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian */
205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "config.h"
225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "CollectionCache.h"
235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace WebCore {
255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
265f1ab04193ad0130ca8204aadaceae083aca9881Feng QianCollectionCache::CollectionCache()
275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    : version(0)
285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    reset();
305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline void CollectionCache::copyCacheMap(NodeCacheMap& dest, const NodeCacheMap& src)
335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    ASSERT(dest.isEmpty());
355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    NodeCacheMap::const_iterator end = src.end();
365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    for (NodeCacheMap::const_iterator it = src.begin(); it != end; ++it)
375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        dest.add(it->first, new Vector<Element*>(*it->second));
385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
405f1ab04193ad0130ca8204aadaceae083aca9881Feng QianCollectionCache::CollectionCache(const CollectionCache& other)
415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    : version(other.version)
425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    , current(other.current)
435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    , position(other.position)
445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    , length(other.length)
455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    , elementsArrayPosition(other.elementsArrayPosition)
465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    , hasLength(other.hasLength)
475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    , hasNameCache(other.hasNameCache)
485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    copyCacheMap(idCache, other.idCache);
505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    copyCacheMap(nameCache, other.nameCache);
515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid CollectionCache::swap(CollectionCache& other)
545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    std::swap(version, other.version);
565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    std::swap(current, other.current);
575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    std::swap(position, other.position);
585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    std::swap(length, other.length);
595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    std::swap(elementsArrayPosition, other.elementsArrayPosition);
605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    idCache.swap(other.idCache);
625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    nameCache.swap(other.nameCache);
635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    std::swap(hasLength, other.hasLength);
655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    std::swap(hasNameCache, other.hasNameCache);
665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
685f1ab04193ad0130ca8204aadaceae083aca9881Feng QianCollectionCache::~CollectionCache()
695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    deleteAllValues(idCache);
715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    deleteAllValues(nameCache);
725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid CollectionCache::reset()
755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    current = 0;
775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    position = 0;
785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    length = 0;
795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    hasLength = false;
805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    elementsArrayPosition = 0;
815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    deleteAllValues(idCache);
825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    idCache.clear();
835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    deleteAllValues(nameCache);
845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    nameCache.clear();
855f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    hasNameCache = false;
865f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
875f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
88d0825bca7fe65beaee391d30da42e937db621564Steve Block#if !ASSERT_DISABLED
89d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid CollectionCache::checkConsistency()
90d0825bca7fe65beaee391d30da42e937db621564Steve Block{
91d0825bca7fe65beaee391d30da42e937db621564Steve Block    idCache.checkConsistency();
92d0825bca7fe65beaee391d30da42e937db621564Steve Block    nameCache.checkConsistency();
93d0825bca7fe65beaee391d30da42e937db621564Steve Block}
94d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif
95d0825bca7fe65beaee391d30da42e937db621564Steve Block
965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} // namespace WebCore
97