1 /* 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20 #ifndef SVGPathByteStream_h 21 #define SVGPathByteStream_h 22 23 #include "wtf/Noncopyable.h" 24 #include "wtf/PassOwnPtr.h" 25 #include "wtf/Vector.h" 26 27 namespace blink { 28 29 template<typename DataType> 30 union ByteType { 31 DataType value; 32 unsigned char bytes[sizeof(DataType)]; 33 }; 34 35 class SVGPathByteStream { 36 WTF_MAKE_FAST_ALLOCATED; 37 public: create()38 static PassOwnPtr<SVGPathByteStream> create() 39 { 40 return adoptPtr(new SVGPathByteStream); 41 } 42 copy()43 PassOwnPtr<SVGPathByteStream> copy() const 44 { 45 return adoptPtr(new SVGPathByteStream(m_data)); 46 } 47 48 typedef Vector<unsigned char> Data; 49 typedef Data::const_iterator DataIterator; 50 begin()51 DataIterator begin() const { return m_data.begin(); } end()52 DataIterator end() const { return m_data.end(); } append(unsigned char byte)53 void append(unsigned char byte) { m_data.append(byte); } append(SVGPathByteStream * other)54 void append(SVGPathByteStream* other) { m_data.appendVector(other->m_data); } clear()55 void clear() { m_data.clear(); } reserveInitialCapacity(size_t size)56 void reserveInitialCapacity(size_t size) { m_data.reserveInitialCapacity(size); } shrinkToFit()57 void shrinkToFit() { m_data.shrinkToFit(); } isEmpty()58 bool isEmpty() const { return m_data.isEmpty(); } size()59 unsigned size() const { return m_data.size(); } 60 61 private: SVGPathByteStream()62 SVGPathByteStream() { } SVGPathByteStream(const Data & data)63 SVGPathByteStream(const Data& data) 64 : m_data(data) 65 { 66 } 67 68 Data m_data; 69 }; 70 71 } // namespace blink 72 73 #endif // SVGPathByteStream_h 74