// Filename: stringStream.I // Created by: drose (03Jul07) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved // // All use of this software is subject to the terms of the Panda 3d // Software license. You should have received a copy of this license // along with this source code; you will also find a current copy of // the license at http://etc.cmu.edu/panda3d/docs/license/ . // // To contact the maintainers of this program write to // panda3d-general@lists.sourceforge.net . // //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// // Function: StringStream::Constructor // Access: Published // Description: //////////////////////////////////////////////////////////////////// INLINE StringStream:: StringStream() : iostream(&_buf) { } //////////////////////////////////////////////////////////////////// // Function: StringStream::Constructor // Access: Published // Description: This version of the constructor preloads the buffer // with the indicated data. //////////////////////////////////////////////////////////////////// INLINE StringStream:: StringStream(const string &source) : iostream(&_buf) { set_data(source); } //////////////////////////////////////////////////////////////////// // Function: StringStream::clear_data // Access: Published // Description: Empties the buffer. //////////////////////////////////////////////////////////////////// INLINE void StringStream:: clear_data() { _buf.clear(); } //////////////////////////////////////////////////////////////////// // Function: StringStream::get_data_size // Access: Published // Description: Returns the number of characters available to be read // from the data stream. //////////////////////////////////////////////////////////////////// INLINE size_t StringStream:: get_data_size() { flush(); return _buf.get_data().size(); } //////////////////////////////////////////////////////////////////// // Function: StringStream::get_data // Access: Published // Description: Returns the contents of the data stream as a string. //////////////////////////////////////////////////////////////////// INLINE string StringStream:: get_data() { flush(); const pvector &data = _buf.get_data(); if (!data.empty()) { return string((char *)&data[0], data.size()); } return string(); } //////////////////////////////////////////////////////////////////// // Function: StringStream::set_data // Access: Published // Description: Replaces the contents of the data stream. This // implicitly reseeks to 0. //////////////////////////////////////////////////////////////////// INLINE void StringStream:: set_data(const string &data) { _buf.clear(); if (!data.empty()) { pvector pv; pv.insert(pv.end(), (const unsigned char *)&data[0], (const unsigned char *)&data[0] + data.size()); _buf.swap_data(pv); } } //////////////////////////////////////////////////////////////////// // Function: StringStream::swap_data // Access: Published // Description: Swaps the indicated buffer for the contents of the // internal buffer. //////////////////////////////////////////////////////////////////// INLINE void StringStream:: swap_data(pvector &data) { flush(); _buf.swap_data(data); }