blocxx
|
00001 /******************************************************************************* 00002 * Copyright (C) 2005, Vintela, Inc. All rights reserved. 00003 * Copyright (C) 2006, Novell, Inc. All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * 00008 * * Redistributions of source code must retain the above copyright notice, 00009 * this list of conditions and the following disclaimer. 00010 * * Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * * Neither the name of 00014 * Vintela, Inc., 00015 * nor Novell, Inc., 00016 * nor the names of its contributors or employees may be used to 00017 * endorse or promote products derived from this software without 00018 * specific prior written permission. 00019 * 00020 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00021 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00022 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00023 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 00024 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00025 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00026 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00027 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00028 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00029 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00030 * POSSIBILITY OF SUCH DAMAGE. 00031 *******************************************************************************/ 00032 00033 00039 #include "blocxx/BLOCXX_config.h" 00040 #include "blocxx/StringStream.hpp" 00041 00042 namespace BLOCXX_NAMESPACE 00043 { 00044 00046 OStringStreamBuf::OStringStreamBuf(size_t size) 00047 : BaseStreamBuffer(BaseStreamBuffer::E_OUT, size), m_buf(size) 00048 { 00049 } 00051 OStringStreamBuf::~OStringStreamBuf() 00052 { 00053 } 00055 String OStringStreamBuf::toString() const 00056 { 00057 return m_buf.toString(); 00058 } 00060 String OStringStreamBuf::releaseString() 00061 { 00062 return m_buf.releaseString(); 00063 } 00065 size_t OStringStreamBuf::length() const 00066 { 00067 return m_buf.length(); 00068 } 00070 const char* OStringStreamBuf::c_str() const 00071 { 00072 return m_buf.c_str(); 00073 } 00075 void OStringStreamBuf::reset() 00076 { 00077 m_buf.reset(); 00078 } 00080 int OStringStreamBuf::buffer_to_device(const char *c, int n) 00081 { 00082 m_buf.append(c, n); 00083 return 0; 00084 } 00086 OStringStreamBase::OStringStreamBase(size_t sz) 00087 : m_buf(sz) 00088 { 00089 } 00091 OStringStream::OStringStream(size_t size) 00092 : OStringStreamBase(size) 00093 , std::basic_ostream<char, std::char_traits<char> >(&m_buf) 00094 { 00095 } 00097 OStringStream::~OStringStream() 00098 { 00099 } 00101 OStringStream::OStringStream(const OStringStream& ostr) 00102 #if !defined(__GNUC__) || __GNUC__ > 2 00103 : std::basic_ios<char>() 00104 #else 00105 : std::ios() // gcc 2.95.x broken library. 00106 #endif 00107 , OStringStreamBase(ostr.length()) 00108 , std::basic_ostream<char, std::char_traits<char> >(&m_buf) 00109 { 00110 *this << ostr.toString(); 00111 } 00113 OStringStream& OStringStream::operator=(const OStringStream& ostr) 00114 { 00115 if ( &ostr != this ) 00116 { 00117 this->reset(); 00118 *this << ostr.toString(); 00119 } 00120 return *this; 00121 } 00122 00123 00125 String OStringStream::toString() const 00126 { 00127 m_buf.sync(); 00128 return m_buf.toString(); 00129 } 00131 String OStringStream::releaseString() 00132 { 00133 m_buf.sync(); 00134 return m_buf.releaseString(); 00135 } 00137 size_t OStringStream::length() const 00138 { 00139 m_buf.sync(); 00140 return m_buf.length(); 00141 } 00143 const char* OStringStream::c_str() const 00144 { 00145 m_buf.sync(); 00146 return m_buf.c_str(); 00147 } 00149 void OStringStream::reset() 00150 { 00151 m_buf.reset(); 00152 } 00154 IStringStream::IStringStream(const String& s) 00155 : IStringStreamBase(s) 00156 , std::istream(&m_buf) 00157 { 00158 } 00160 IStringStream::~IStringStream() 00161 { 00162 } 00163 00164 } // end namespace BLOCXX_NAMESPACE 00165