author | KUDr |
Sun, 31 Dec 2006 21:13:40 +0000 | |
branch | custombridgeheads |
changeset 5616 | 0570ae953222 |
child 5619 | a2f1d08e2215 |
permissions | -rw-r--r-- |
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> |
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
|
7 |
|
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 |
#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
|
9 |
#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
|
10 |
|
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 |
// 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
|
13 |
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
|
14 |
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
|
15 |
{ |
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 |
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
|
17 |
typedef CStrApiT<Tchar, TcaseInsensitive> Api; |
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 |
|
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
|
19 |
FORCEINLINE CStrT(const Tchar* str = NULL) {AppendStr(str);} |
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
|
20 |
FORCEINLINE CStrT(const Tchar* str, size_t num_chars) : base(str, num_chars) {FixTail();} |
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
|
21 |
FORCEINLINE CStrT(const Tchar* str, const Tchar* end) : base(str, end - str) {FixTail();} |
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 |
FORCEINLINE CStrT(const CBlobBaseSimple& src) : base(src) {FixTail();} |
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 |
/** Take ownership constructor */ |
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
|
24 |
FORCEINLINE CStrT(OnTransfer& ot) : base(ot) {} |
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
|
25 |
FORCEINLINE Titem* GrowSizeNC(size_t count) {Titem* ret = base::GrowSizeNC(count); FixTail(); 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
|
26 |
FORCEINLINE void AppendStr(const Tchar* str) {if (str != NULL && str[0] != '\0') base::Append(str, (size_t)Api::StrLen(str)); FixTail();} |
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 |
FORCEINLINE CStrT& operator = (const Tchar* src) {Clear(); Append(src); return *this;} |
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
|
28 |
FORCEINLINE bool operator < (const CStrT &other) const {return (Api::StrCmp(Data(), other.Data()) < 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
|
29 |
|
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
|
30 |
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
|
31 |
{ |
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
|
32 |
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
|
33 |
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
|
34 |
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
|
35 |
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
|
36 |
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
|
37 |
Tchar *buf = MakeFreeSpace(addSize); |
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 |
ret = Api::SPrintFL(buf, GetReserve(), fmt, 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
|
39 |
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
|
40 |
} 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
|
41 |
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
|
42 |
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
|
43 |
} else { |
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 |
int err = errno; |
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 |
FixTail(); |
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 |
} |
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 |
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
|
48 |
} |
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
|
49 |
|
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 |
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
|
51 |
{ |
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 |
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
|
53 |
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
|
54 |
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
|
55 |
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
|
56 |
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
|
57 |
} |
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 |
|
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 |
}; |
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 |
|
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 |
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
|
62 |
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
|
63 |
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
|
64 |
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
|
65 |
|
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 |
#endif /* STR_HPP */ |