⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tchar.h

📁 功能非常强的写日志程序
💻 H
字号:
/* * Copyright 2003,2004 The Apache Software Foundation. *  * Licensed 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. */ #ifndef _LOG4CXX_HELPERS_TCHAR_H#define _LOG4CXX_HELPERS_TCHAR_H#include <log4cxx/config.h>#include <string>#include <iostream>#include <sstream>#include <cwchar>#include <algorithm> // min & max#include <stdio.h> // sprintf#include <streambuf> // basic_streambuf#include <log4cxx/helpers/strictmath.h>class Convert{public:	static wchar_t * ansiToUnicode(wchar_t * dst, const char * src)	{		::mbstowcs(dst, src, 512);		return dst;	}	static char * unicodeToAnsi(char * dst, const wchar_t * src)	{		::wcstombs(dst, src, 512);		return dst;	}		static void int64ToString(wchar_t * dst, size_t maxlen, const int64_t& ll)	{#ifdef WIN32		_snwprintf(dst, maxlen, L"%I64d", ll);#else		swprintf(dst, maxlen, L"%lld", ll);#endif	}		static void int64ToString(char * dst, size_t maxlen, const int64_t& ll)	{#ifdef WIN32		_snprintf(dst, maxlen, "%I64d", ll);#else		snprintf(dst, maxlen, "%lld", ll);#endif	}};namespace std {	template<typename _CharT, typename _Traits>		basic_ostream<_CharT, _Traits>&		operator<<(basic_ostream<_CharT, _Traits>& os, const int64_t& ll)	{		_CharT buff[21];		Convert::int64ToString(buff, 20, ll);		os << buff;		return os;	}}#ifdef MUST_UNDEF_T#undef _T#endif#ifdef WIN32#ifndef USES_CONVERSION	#include <malloc.h>	#define USES_CONVERSION void * _dst = _alloca(1024);#endif#else	#include <alloca.h>	#define USES_CONVERSION void * _dst = alloca(1024);#endif#ifndef W2A#define W2A(src) Convert::unicodeToAnsi((char *)_dst, src)#endif#ifndef A2W#define A2W(src) Convert::ansiToUnicode((wchar_t *)_dst, src)#endif#ifdef UNICODE	#include <wctype.h>#ifndef _T	#define _T(x) L ## x#endif#ifndef TCHAR	typedef wchar_t TCHAR;#endif	#define totupper towupper	#define totlower towlower	#define tcout std::wcout	#define tcerr std::wcerr#ifdef WIN32	#define tstrncasecmp _wcsnicmp#else	#define tstrncasecmp wcsncasecmp#endif // WIN32#ifndef T2A	#define T2A(src) W2A(src)#endif#ifndef T2W	#define T2W(src) src#endif#ifndef A2T	#define A2T(src) A2W(src)#endif#ifndef W2T	#define W2T(src) src#endif	#define ttol(s) wcstol(s, 0, 10)	#define itot _itow	#define tcscmp wcscmp#else // Not UNICODE	#include <ctype.h>#ifndef _T	#define _T(x) x#endif	typedef char TCHAR;	#define totupper toupper	#define totlower tolower	#define tcout std::cout	#define tcerr std::cerr#ifdef WIN32	#define tstrncasecmp _strnicmp#else	#define tstrncasecmp strncasecmp#endif // WIN32#ifndef T2A	#define T2A(src) src#endif#ifndef T2W	#define T2W(src) A2W(src)#endif#ifndef A2T	#define A2T(src) src#endif#ifndef W2T	#define W2T(src) W2A(src)#endif	#define ttol atol	#define itot itoa	#define tcscmp strcmp#endif // UNICODE#define _MinInc  size_t(512)#define _MaxInc size_t(100 * 1024)namespace log4cxx{	class stringbuf : public std::basic_streambuf<TCHAR>	{	public:		typedef std::basic_streambuf<TCHAR> base;		typedef base::char_type char_type;		typedef base::traits_type traits_type;		typedef std::allocator<char_type> allocator_type;		typedef traits_type::int_type int_type;		~stringbuf()		{			char_type * b = pbase();			if (b)			{				al.deallocate(b, epptr() - b);			}		}		virtual int_type overflow(			int_type c = stringbuf::traits_type::eof())		{			using namespace std;			if (traits_type::eq_int_type(traits_type::eof(), c))			{				return traits_type::not_eof(c);			}			char_type *b = pbase();			if (b == 0)			{				char_type * p = (char_type *)al.allocate(_MinInc, 0);				setp(p, p + _MinInc);			}			else			{				size_t os = epptr() - b; // taille allou閑				size_t is =					helpers::StrictMath::maximum(					helpers::StrictMath::minimum(					(os * 2), _MaxInc),_MinInc)					+ 1; // incr閙ent d'allocation				char_type *p = (char_type *)al.allocate(os + is, 0);				traits_type::copy(p, b, os);				al.deallocate(b, epptr() - b);				setp(p, p + os + is);				pbump((int)os);			}			*pptr() = c;			pbump(1);			return traits_type::not_eof(c);		}		std::basic_string<char_type> str() const		{			return std::basic_string<char_type>(pbase(), pptr() - pbase());		}		void str(const std::basic_string<char_type>& s)		{			setp(pbase(), epptr());		}		virtual pos_type seekoff(off_type off, std::ios_base::seekdir way,			std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out)		{			pos_type ret = pos_type(off_type(-1));			if (mode == std::ios_base::out)			{				if (way == std::ios_base::beg)				{					setp(pbase(), epptr());					ret = pos_type(off);					pbump(off);				}				else if (way == std::ios_base::end)				{					setp(pbase(), epptr());					ret = pos_type(off + epptr() - pbase());					pbump(off + epptr() - pbase());				}				else if (way == std::ios_base::cur)				{					pbump(off);					ret = pos_type(pptr() - pbase());				}			}			return ret;		}		virtual pos_type seekpos(pos_type pos,			std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out)		{			std::streamoff off = (std::streamoff)pos;			if (pbase() + off > epptr())			{				return pos_type(-1);			}			else			{				setp(pbase(), epptr());				pbump(off);				return pos;			}		}	protected:		allocator_type al;	};	class StringBuffer : public std::basic_ostream<TCHAR>	{	public:		StringBuffer() : std::basic_ostream<TCHAR>(0)			{ this->init(&buffer); }		inline std::basic_string<TCHAR> str() const			{ return buffer.str(); }		inline void str(const std::basic_string<TCHAR>& s)			{ buffer.str(s); }	protected:		stringbuf buffer;	};	typedef std::basic_string<TCHAR> String;	typedef std::basic_ostream<TCHAR> ostream;	typedef std::basic_istream<TCHAR> istream;} #endif //_LOG4CXX_HELPERS_TCHAR_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -