18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02111-1307, USA. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef SpaceSplitString_h 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define SpaceSplitString_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/OwnPtr.h> 25e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include <wtf/PassOwnPtr.h> 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Vector.h> 27f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicString.h> 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch class SpaceSplitStringData { 32ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_NONCOPYABLE(SpaceSplitStringData); WTF_MAKE_FAST_ALLOCATED; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block SpaceSplitStringData(const String& string, bool shouldFoldCase) 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_string(string), m_shouldFoldCase(shouldFoldCase), m_createdVector(false) 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool contains(const AtomicString& string) 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ensureVector(); 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size_t size = m_vector.size(); 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (size_t i = 0; i < size; ++i) { 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_vector[i] == string) 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool containsAll(SpaceSplitStringData&); 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52e14391e94c850b8bd03680c23b38978db68687a8John Reck void add(const AtomicString&); 53e14391e94c850b8bd03680c23b38978db68687a8John Reck void remove(const AtomicString&); 54e14391e94c850b8bd03680c23b38978db68687a8John Reck 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size_t size() { ensureVector(); return m_vector.size(); } 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const AtomicString& operator[](size_t i) { ensureVector(); ASSERT(i < size()); return m_vector[i]; } 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void ensureVector() { if (!m_createdVector) createVector(); } 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void createVector(); 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block typedef Vector<AtomicString, 8> StringVector; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String m_string; 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block StringVector m_vector; 655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool m_shouldFoldCase; 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_createdVector; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block class SpaceSplitString { 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block SpaceSplitString() { } 72e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke SpaceSplitString(const String& string, bool shouldFoldCase) : m_data(adoptPtr(new SpaceSplitStringData(string, shouldFoldCase))) { } 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 74e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke void set(const String& string, bool shouldFoldCase) { m_data = adoptPtr(new SpaceSplitStringData(string, shouldFoldCase)); } 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void clear() { m_data.clear(); } 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool contains(const AtomicString& string) const { return m_data && m_data->contains(string); } 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool containsAll(const SpaceSplitString& names) const { return !names.m_data || (m_data && m_data->containsAll(*names.m_data)); } 79e14391e94c850b8bd03680c23b38978db68687a8John Reck void add(const AtomicString&); 80e14391e94c850b8bd03680c23b38978db68687a8John Reck void remove(const AtomicString&); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size_t size() const { return m_data ? m_data->size() : 0; } 83bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool isNull() const { return !m_data; } 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const AtomicString& operator[](size_t i) const { ASSERT(i < size()); return (*m_data)[i]; } 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block OwnPtr<SpaceSplitStringData> m_data; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif // SpaceSplitString_h 93