yapf/str.hpp
author KUDr
Mon, 01 Jan 2007 01:43:40 +0000
branchcustombridgeheads
changeset 5619 a2f1d08e2215
parent 5616 0570ae953222
permissions -rw-r--r--
(svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
5616
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
     1
/* $Id$ */
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
     2
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
     3
#ifndef  STR_HPP
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
     4
#define  STR_HPP
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
     5
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
     6
#include <errno.h>
5619
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
     7
#include <stdarg.h>
5616
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
     8
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
     9
#include "blob.hpp"
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    10
#include "strapi.hpp"
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    11
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    12
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    13
// simple string implementation
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    14
template <typename Tchar, bool TcaseInsensitive>
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    15
struct CStrT : public CBlobT<Tchar>
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    16
{
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    17
	typedef CBlobT<Tchar> base;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    18
	typedef CStrApiT<Tchar, TcaseInsensitive> Api;
5619
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    19
	typedef typename base::size_t size_t;
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    20
	typedef typename base::OnTransfer OnTransfer;
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    21
5616
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    22
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    23
	FORCEINLINE CStrT(const Tchar* str = NULL) {AppendStr(str);}
5619
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    24
	FORCEINLINE CStrT(const Tchar* str, size_t num_chars) : base(str, num_chars) {base::FixTail();}
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    25
	FORCEINLINE CStrT(const Tchar* str, const Tchar* end) : base(str, end - str) {base::FixTail();}
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    26
	FORCEINLINE CStrT(const CBlobBaseSimple& src) : base(src) {base::FixTail();}
5616
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    27
	/** Take ownership constructor */
5619
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    28
	FORCEINLINE CStrT(const OnTransfer& ot) : base(ot) {}
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    29
	FORCEINLINE Tchar* GrowSizeNC(size_t count) {Tchar* ret = base::GrowSizeNC(count); base::FixTail(); return ret;}
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    30
	FORCEINLINE void AppendStr(const Tchar* str) {if (str != NULL && str[0] != '\0') base::Append(str, (size_t)Api::StrLen(str)); base::FixTail();}
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    31
	FORCEINLINE CStrT& operator = (const Tchar* src) {base::Clear(); Append(src); return *this;}
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    32
	FORCEINLINE bool operator < (const CStrT &other) const {return (Api::StrCmp(base::Data(), other.Data()) < 0);}
5616
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    33
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    34
	int FormatL(const Tchar *fmt, va_list args)
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    35
	{
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    36
		size_t addSize = Api::StrLen(fmt);
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    37
		if (addSize < 16) addSize = 16;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    38
		addSize += addSize > 1;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    39
		int ret;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    40
		do {
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    41
			Tchar *buf = MakeFreeSpace(addSize);
5619
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    42
			ret = Api::SPrintFL(buf, base::GetReserve(), fmt, args);
5616
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    43
			addSize *= 2;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    44
		} while(ret < 0 && (errno == ERANGE || errno == 0));
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    45
		if (ret > 0) {
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    46
			GrowSizeNC(ret);
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    47
		} else {
5619
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    48
//			int err = errno;
a2f1d08e2215 (svn r7712) [cbh] - Fix: [YAPF] make those 3 files added in (r7708) compilable by g++
KUDr
parents: 5616
diff changeset
    49
			base::FixTail();
5616
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    50
		}
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    51
		return ret;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    52
	}
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    53
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    54
	int Format(const Tchar *format, ...)
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    55
	{
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    56
		va_list args;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    57
		va_start(args, format);
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    58
		int ret = FormatL(format, args);
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    59
		va_end(args);
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    60
		return ret;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    61
	}
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    62
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    63
};
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    64
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    65
typedef CStrT<char   , false> CStrA;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    66
typedef CStrT<char   , true > CStrCiA;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    67
typedef CStrT<wchar_t, false> CStrW;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    68
typedef CStrT<wchar_t, true > CStrCiW;
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    69
0570ae953222 (svn r7708) [cbh] - Fix: [YAPF] added some YAPF debug messages, added string support used for new debugging stuff, resolved few cbh related issues
KUDr
parents:
diff changeset
    70
#endif /* STR_HPP */