📄 messagebuffer.cpp
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#include <log4cxx/helpers/messagebuffer.h>#include <log4cxx/helpers/transcoder.h>using namespace log4cxx::helpers;CharMessageBuffer::CharMessageBuffer() : stream(0) {}CharMessageBuffer::~CharMessageBuffer() { delete stream;}CharMessageBuffer& CharMessageBuffer::operator<<(const std::basic_string<char>& msg) { if (stream == 0) { buf.append(msg); } else { *stream << msg; } return *this;}CharMessageBuffer& CharMessageBuffer::operator<<(const char* msg) { const char* actualMsg = msg; if (actualMsg == 0) { actualMsg = "null"; } if (stream == 0) { buf.append(actualMsg); } else { *stream << actualMsg; } return *this;}CharMessageBuffer& CharMessageBuffer::operator<<(char* msg) { return operator<<((const char*) msg);}CharMessageBuffer& CharMessageBuffer::operator<<(const char msg) { if (stream == 0) { buf.append(1, msg); } else { buf.assign(1, msg); *stream << buf; } return *this;}CharMessageBuffer::operator std::basic_ostream<char>&() { if (stream == 0) { stream = new std::basic_ostringstream<char>(); if (!buf.empty()) { *stream << buf; } } return *stream;}const std::basic_string<char>& CharMessageBuffer::str(std::basic_ostream<char>&) { buf = stream->str(); return buf;}const std::basic_string<char>& CharMessageBuffer::str(CharMessageBuffer&) { return buf;}bool CharMessageBuffer::hasStream() const { return (stream != 0);}std::ostream& CharMessageBuffer::operator<<(ios_base_manip manip) { std::ostream& s = *this; (*manip)(s); return s;}std::ostream& CharMessageBuffer::operator<<(bool val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(short val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(int val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(unsigned int val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(long val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(unsigned long val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(float val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(double val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(long double val) { return ((std::ostream&) *this).operator<<(val); }std::ostream& CharMessageBuffer::operator<<(void* val) { return ((std::ostream&) *this).operator<<(val); }#if LOG4CXX_WCHAR_T_APIWideMessageBuffer::WideMessageBuffer() : stream(0) {}WideMessageBuffer::~WideMessageBuffer() { delete stream;}WideMessageBuffer& WideMessageBuffer::operator<<(const std::basic_string<wchar_t>& msg) { if (stream == 0) { buf.append(msg); } else { *stream << msg; } return *this;}WideMessageBuffer& WideMessageBuffer::operator<<(const wchar_t* msg) { const wchar_t* actualMsg = msg; if (actualMsg == 0) { actualMsg = L"null"; } if (stream == 0) { buf.append(actualMsg); } else { *stream << actualMsg; } return *this;}WideMessageBuffer& WideMessageBuffer::operator<<(wchar_t* msg) { return operator<<((const wchar_t*) msg);}WideMessageBuffer& WideMessageBuffer::operator<<(const wchar_t msg) { if (stream == 0) { buf.append(1, msg); } else { buf.assign(1, msg); *stream << buf; } return *this;}WideMessageBuffer::operator std::basic_ostream<wchar_t>&() { if (stream == 0) { stream = new std::basic_ostringstream<wchar_t>(); if (!buf.empty()) { *stream << buf; } } return *stream;}const std::basic_string<wchar_t>& WideMessageBuffer::str(std::basic_ostream<wchar_t>&) { buf = stream->str(); return buf;}const std::basic_string<wchar_t>& WideMessageBuffer::str(WideMessageBuffer&) { return buf;}bool WideMessageBuffer::hasStream() const { return (stream != 0);}std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(ios_base_manip manip) { std::basic_ostream<wchar_t>& s = *this; (*manip)(s); return s;}std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(bool val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(short val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(int val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(unsigned int val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(long val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(unsigned long val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(float val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(double val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(long double val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }std::basic_ostream<wchar_t>& WideMessageBuffer::operator<<(void* val) { return ((std::basic_ostream<wchar_t>&) *this).operator<<(val); }MessageBuffer::MessageBuffer() : wbuf(0)#if LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_API , ubuf(0)#endif {}MessageBuffer::~MessageBuffer() { delete wbuf;#if LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_API delete ubuf;#endif }bool MessageBuffer::hasStream() const { bool retval = cbuf.hasStream() || (wbuf != 0 && wbuf->hasStream());#if LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_API retval = retval || (ubuf != 0 && ubuf->hasStream()); #endif return retval;}std::ostream& MessageBuffer::operator<<(ios_base_manip manip) { std::ostream& s = *this; (*manip)(s); return s;}MessageBuffer::operator std::ostream&() { return (std::ostream&) cbuf;}CharMessageBuffer& MessageBuffer::operator<<(const std::string& msg) { return cbuf.operator<<(msg);}CharMessageBuffer& MessageBuffer::operator<<(const char* msg) { return cbuf.operator<<(msg);}CharMessageBuffer& MessageBuffer::operator<<(char* msg) { return cbuf.operator<<((const char*) msg);}CharMessageBuffer& MessageBuffer::operator<<(const char msg) { return cbuf.operator<<(msg);}const std::string& MessageBuffer::str(CharMessageBuffer& buf) { return cbuf.str(buf);}const std::string& MessageBuffer::str(std::ostream& os) { return cbuf.str(os);}WideMessageBuffer& MessageBuffer::operator<<(const std::wstring& msg) { wbuf = new WideMessageBuffer(); return (*wbuf) << msg;}WideMessageBuffer& MessageBuffer::operator<<(const wchar_t* msg) { wbuf = new WideMessageBuffer(); return (*wbuf) << msg;}WideMessageBuffer& MessageBuffer::operator<<(wchar_t* msg) { wbuf = new WideMessageBuffer(); return (*wbuf) << (const wchar_t*) msg;}WideMessageBuffer& MessageBuffer::operator<<(const wchar_t msg) { wbuf = new WideMessageBuffer(); return (*wbuf) << msg;}const std::wstring& MessageBuffer::str(WideMessageBuffer& buf) { return wbuf->str(buf);}const std::wstring& MessageBuffer::str(std::basic_ostream<wchar_t>& os) { return wbuf->str(os);}std::ostream& MessageBuffer::operator<<(bool val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(short val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(int val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(unsigned int val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(long val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(unsigned long val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(float val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(double val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(long double val) { return cbuf.operator<<(val); }std::ostream& MessageBuffer::operator<<(void* val) { return cbuf.operator<<(val); }#endif#if LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_APIUniCharMessageBuffer& MessageBuffer::operator<<(const std::basic_string<log4cxx::UniChar>& msg) { ubuf = new UniCharMessageBuffer(); return (*ubuf) << msg;}UniCharMessageBuffer& MessageBuffer::operator<<(const log4cxx::UniChar* msg) { ubuf = new UniCharMessageBuffer(); return (*ubuf) << msg;}UniCharMessageBuffer& MessageBuffer::operator<<(log4cxx::UniChar* msg) { ubuf = new UniCharMessageBuffer(); return (*ubuf) << (const log4cxx::UniChar*) msg;}UniCharMessageBuffer& MessageBuffer::operator<<(const log4cxx::UniChar msg) { ubuf = new UniCharMessageBuffer(); return (*ubuf) << msg;}const std::basic_string<log4cxx::UniChar>& MessageBuffer::str(UniCharMessageBuffer& buf) { return ubuf->str(buf);}const std::basic_string<log4cxx::UniChar>& MessageBuffer::str(std::basic_ostream<log4cxx::UniChar>& os) { return ubuf->str(os);}UniCharMessageBuffer::UniCharMessageBuffer() : stream(0) {}UniCharMessageBuffer::~UniCharMessageBuffer() { delete stream;}UniCharMessageBuffer& UniCharMessageBuffer::operator<<(const std::basic_string<log4cxx::UniChar>& msg) { if (stream == 0) { buf.append(msg); } else { *stream << buf; } return *this;}UniCharMessageBuffer& UniCharMessageBuffer::operator<<(const log4cxx::UniChar* msg) { const log4cxx::UniChar* actualMsg = msg; static log4cxx::UniChar nullLiteral[] = { 0x6E, 0x75, 0x6C, 0x6C, 0}; if (actualMsg == 0) { actualMsg = nullLiteral; } if (stream == 0) { buf.append(actualMsg); } else { *stream << actualMsg; } return *this;}UniCharMessageBuffer& UniCharMessageBuffer::operator<<(log4cxx::UniChar* msg) { return operator<<((const log4cxx::UniChar*) msg);}UniCharMessageBuffer& UniCharMessageBuffer::operator<<(const log4cxx::UniChar msg) { if (stream == 0) { buf.append(1, msg); } else { *stream << msg; } return *this;}UniCharMessageBuffer::operator UniCharMessageBuffer::uostream&() { if (stream == 0) { stream = new std::basic_ostringstream<UniChar>(); if (!buf.empty()) { *stream << buf; } } return *stream;}const std::basic_string<log4cxx::UniChar>& UniCharMessageBuffer::str(UniCharMessageBuffer::uostream&) { buf = stream->str(); return buf;}const std::basic_string<log4cxx::UniChar>& UniCharMessageBuffer::str(UniCharMessageBuffer&) { return buf;}bool UniCharMessageBuffer::hasStream() const { return (stream != 0);}UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(ios_base_manip manip) { UniCharMessageBuffer::uostream& s = *this; (*manip)(s); return s;}UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(bool val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(short val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(int val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(unsigned int val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(long val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(unsigned long val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(float val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(double val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(long double val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }UniCharMessageBuffer::uostream& UniCharMessageBuffer::operator<<(void* val) { return ((UniCharMessageBuffer::uostream&) *this).operator<<(val); }#endif#if LOG4CXX_CFSTRING_API#include <CoreFoundation/CFString.h>#include <vector>UniCharMessageBuffer& UniCharMessageBuffer::operator<<(const CFStringRef& msg) { const log4cxx::UniChar* chars = CFStringGetCharactersPtr(msg); if (chars != 0) { return operator<<(chars); } else { size_t length = CFStringGetLength(msg); std::vector<log4cxx::UniChar> tmp(length); CFStringGetCharacters(msg, CFRangeMake(0, length), &tmp[0]); if (stream) { std::basic_string<UniChar> s(&tmp[0], tmp.size()); *stream << s; } else { buf.append(&tmp[0], tmp.size()); } } return *this;}UniCharMessageBuffer& MessageBuffer::operator<<(const CFStringRef& msg) { ubuf = new UniCharMessageBuffer(); return (*ubuf) << msg;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -