blocxx

StringStream.cpp

Go to the documentation of this file.
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