]> git.saurik.com Git - apple/icu.git/blame - icuSources/common/charstr.h
ICU-8.11.4.tar.gz
[apple/icu.git] / icuSources / common / charstr.h
CommitLineData
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
27U_NAMESPACE_BEGIN
28
29class U_COMMON_API CharString : public UMemory {
30public:
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
44private:
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
57inline 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 69inline 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
79inline CharString::~CharString() {
80 if (ptr != buf) {
81 uprv_free(ptr);
82 }
83}
84
85U_NAMESPACE_END
86
374ca955 87#endif
b75a7d8f 88//eof