]>
Commit | Line | Data |
---|---|---|
b75a7d8f A |
1 | /* |
2 | ********************************************************************** | |
374ca955 | 3 | * Copyright (c) 2001-2004, International Business Machines |
b75a7d8f A |
4 | * Corporation and others. All Rights Reserved. |
5 | ********************************************************************** | |
6 | * Date Name Description | |
7 | * 11/19/2001 aliu Creation. | |
8 | ********************************************************************** | |
9 | */ | |
10 | ||
374ca955 A |
11 | #ifndef CHARSTRING_H |
12 | #define CHARSTRING_H | |
13 | ||
b75a7d8f A |
14 | #include "unicode/utypes.h" |
15 | #include "unicode/uobject.h" | |
16 | #include "unicode/unistr.h" | |
17 | #include "cmemory.h" | |
18 | ||
19 | //-------------------------------------------------------------------- | |
20 | // class CharString | |
21 | // | |
22 | // This is a tiny wrapper class that is used internally to make a | |
23 | // UnicodeString look like a const char*. It can be allocated on the | |
24 | // stack. It only creates a heap buffer if it needs to. | |
25 | //-------------------------------------------------------------------- | |
26 | ||
27 | U_NAMESPACE_BEGIN | |
28 | ||
29 | class U_COMMON_API CharString : public UMemory { | |
30 | public: | |
374ca955 A |
31 | |
32 | #if !UCONFIG_NO_CONVERSION | |
33 | // Constructor | |
34 | // @param str The unicode string to be converted to char * | |
35 | // @param codepage The char * code page. "" for invariant conversion. | |
36 | // NULL for default code page. | |
73c04bcf | 37 | // inline CharString(const UnicodeString& str, const char *codepage); |
374ca955 A |
38 | #endif |
39 | ||
b75a7d8f A |
40 | inline CharString(const UnicodeString& str); |
41 | inline ~CharString(); | |
42 | inline operator const char*() const { return ptr; } | |
43 | ||
44 | private: | |
45 | char buf[128]; | |
46 | char* ptr; | |
47 | ||
48 | CharString(const CharString &other); // forbid copying of this class | |
49 | CharString &operator=(const CharString &other); // forbid copying of this class | |
50 | }; | |
51 | ||
374ca955 A |
52 | #if !UCONFIG_NO_CONVERSION |
53 | ||
73c04bcf A |
54 | // PLEASE DON'T USE THIS FUNCTION. |
55 | // We don't want the static dependency on conversion or the performance hit that comes from a codepage conversion. | |
56 | /* | |
374ca955 A |
57 | inline CharString::CharString(const UnicodeString& str, const char *codepage) { |
58 | int32_t len; | |
59 | ptr = buf; | |
60 | len = str.extract(0, 0x7FFFFFFF, buf ,sizeof(buf)-1, codepage); | |
61 | if (len >= (int32_t)(sizeof(buf)-1)) { | |
62 | ptr = (char *)uprv_malloc(len+1); | |
63 | str.extract(0, 0x7FFFFFFF, ptr, len+1, codepage); | |
64 | } | |
73c04bcf | 65 | }*/ |
374ca955 A |
66 | |
67 | #endif | |
68 | ||
b75a7d8f | 69 | inline CharString::CharString(const UnicodeString& str) { |
374ca955 A |
70 | int32_t len; |
71 | ptr = buf; | |
72 | len = str.extract(0, 0x7FFFFFFF, buf, (int32_t)(sizeof(buf)-1), US_INV); | |
73 | if (len >= (int32_t)(sizeof(buf)-1)) { | |
74 | ptr = (char *)uprv_malloc(len+1); | |
75 | str.extract(0, 0x7FFFFFFF, ptr, len+1, US_INV); | |
b75a7d8f | 76 | } |
b75a7d8f A |
77 | } |
78 | ||
79 | inline CharString::~CharString() { | |
80 | if (ptr != buf) { | |
81 | uprv_free(ptr); | |
82 | } | |
83 | } | |
84 | ||
85 | U_NAMESPACE_END | |
86 | ||
374ca955 | 87 | #endif |
b75a7d8f | 88 | //eof |