xref: /third_party/lzma/CPP/Common/StringConvert.h (revision 370b324c)
1// Common/StringConvert.h
2
3#ifndef ZIP7_INC_COMMON_STRING_CONVERT_H
4#define ZIP7_INC_COMMON_STRING_CONVERT_H
5
6#include "MyString.h"
7#include "MyWindows.h"
8
9UString MultiByteToUnicodeString(const AString &src, UINT codePage = CP_ACP);
10UString MultiByteToUnicodeString(const char *src, UINT codePage = CP_ACP);
11
12// optimized versions that work faster for ASCII strings
13void MultiByteToUnicodeString2(UString &dest, const AString &src, UINT codePage = CP_ACP);
14// void UnicodeStringToMultiByte2(AString &dest, const UString &s, UINT codePage, char defaultChar, bool &defaultCharWasUsed);
15void UnicodeStringToMultiByte2(AString &dest, const UString &src, UINT codePage);
16
17AString UnicodeStringToMultiByte(const UString &src, UINT codePage, char defaultChar, bool &defaultCharWasUsed);
18AString UnicodeStringToMultiByte(const UString &src, UINT codePage = CP_ACP);
19
20inline const wchar_t* GetUnicodeString(const wchar_t *u)  { return u; }
21inline const UString& GetUnicodeString(const UString &u)  { return u; }
22
23inline UString GetUnicodeString(const AString &a)  { return MultiByteToUnicodeString(a); }
24inline UString GetUnicodeString(const char *a)     { return MultiByteToUnicodeString(a); }
25
26inline UString GetUnicodeString(const AString &a, UINT codePage)
27  { return MultiByteToUnicodeString(a, codePage); }
28inline UString GetUnicodeString(const char *a, UINT codePage)
29  { return MultiByteToUnicodeString(a, codePage); }
30
31inline const wchar_t* GetUnicodeString(const wchar_t *u, UINT) { return u; }
32inline const UString& GetUnicodeString(const UString &u, UINT) { return u; }
33
34inline const char*    GetAnsiString(const char    *a) { return a; }
35inline const AString& GetAnsiString(const AString &a) { return a; }
36
37inline AString GetAnsiString(const wchar_t *u) { return UnicodeStringToMultiByte(UString(u)); }
38inline AString GetAnsiString(const UString &u) { return UnicodeStringToMultiByte(u); }
39
40/*
41inline const char* GetOemString(const char* oem)
42  { return oem; }
43inline const AString& GetOemString(const AString &oem)
44  { return oem; }
45*/
46const char* GetOemString(const char* oem);
47const AString& GetOemString(const AString &oem);
48inline AString GetOemString(const UString &u)
49  { return UnicodeStringToMultiByte(u, CP_OEMCP); }
50
51#ifdef _UNICODE
52  inline const wchar_t* GetSystemString(const wchar_t *u) { return u;}
53  inline const UString& GetSystemString(const UString &u) { return u;}
54  inline const wchar_t* GetSystemString(const wchar_t *u, UINT /* codePage */) { return u;}
55  inline const UString& GetSystemString(const UString &u, UINT /* codePage */) { return u;}
56
57  inline UString GetSystemString(const AString &a, UINT codePage) { return MultiByteToUnicodeString(a, codePage); }
58  inline UString GetSystemString(const char    *a, UINT codePage) { return MultiByteToUnicodeString(a, codePage); }
59  inline UString GetSystemString(const AString &a) { return MultiByteToUnicodeString(a); }
60  inline UString GetSystemString(const char    *a) { return MultiByteToUnicodeString(a); }
61#else
62  inline const char*    GetSystemString(const char    *a) { return a; }
63  inline const AString& GetSystemString(const AString &a) { return a; }
64  inline const char*    GetSystemString(const char    *a, UINT) { return a; }
65  inline const AString& GetSystemString(const AString &a, UINT) { return a; }
66
67  inline AString GetSystemString(const wchar_t *u) { return UnicodeStringToMultiByte(UString(u)); }
68  inline AString GetSystemString(const UString &u) { return UnicodeStringToMultiByte(u); }
69  inline AString GetSystemString(const UString &u, UINT codePage) { return UnicodeStringToMultiByte(u, codePage); }
70
71
72
73  /*
74  inline AString GetSystemString(const wchar_t *u)
75  {
76    UString s;
77    s = u;
78    return UnicodeStringToMultiByte(s);
79  }
80  */
81
82#endif
83
84#ifndef UNDER_CE
85AString SystemStringToOemString(const CSysString &src);
86#endif
87
88
89#ifdef _WIN32
90/* we don't need locale functions in Windows
91   but we can define ENV_HAVE_LOCALE here for debug purposes */
92// #define ENV_HAVE_LOCALE
93#else
94#define ENV_HAVE_LOCALE
95#endif
96
97#ifdef ENV_HAVE_LOCALE
98void MY_SetLocale();
99const char *GetLocale(void);
100#endif
101
102#if !defined(_WIN32) || defined(ENV_HAVE_LOCALE)
103bool IsNativeUTF8();
104#endif
105
106#ifndef _WIN32
107extern bool g_ForceToUTF8;
108#endif
109
110#endif
111