1/*
2 * Copyright 2010-2011, Oliver Tappe, zooey@hirschkaefer.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _ICU_CATEGORY_DATA_H
6#define _ICU_CATEGORY_DATA_H
7
8#include <pthread.h>
9
10#include <unicode/locid.h>
11#include <unicode/unistr.h>
12
13#include <SupportDefs.h>
14
15#include "ICUThreadLocalStorageValue.h"
16
17
18namespace BPrivate {
19namespace Libroot {
20
21
22class ICUCategoryData {
23public:
24								ICUCategoryData(pthread_key_t tlsKey);
25	virtual 					~ICUCategoryData();
26
27	virtual	status_t			SetTo(const U_NAMESPACE_QUALIFIER Locale&
28										locale,
29									const char* posixLocaleName);
30	virtual	status_t			SetToPosix();
31
32			const char*			PosixLocaleName()
33									{ return fPosixLocaleName; }
34
35			const U_NAMESPACE_QUALIFIER Locale&	ICULocale() const;
36
37protected:
38			status_t			_ConvertUnicodeStringToLocaleconvEntry(
39									const U_NAMESPACE_QUALIFIER UnicodeString&
40										string,
41									char* destination, int destinationSize,
42									const char* defaultValue = "");
43
44			status_t			_GetConverter(UConverter*& converterOut);
45
46	static	const uint16		skMaxPosixLocaleNameLen = 128;
47	static	const size_t		skLCBufSize = 16;
48
49			pthread_key_t		fThreadLocalStorageKey;
50			U_NAMESPACE_QUALIFIER Locale	fLocale;
51			char				fPosixLocaleName[skMaxPosixLocaleNameLen];
52			char				fGivenCharset[UCNV_MAX_CONVERTER_NAME_LENGTH];
53
54private:
55 			status_t			_SetupConverter();
56};
57
58
59inline
60const U_NAMESPACE_QUALIFIER Locale&
61ICUCategoryData::ICULocale() const
62{
63	return fLocale;
64}
65
66
67}	// namespace Libroot
68}	// namespace BPrivate
69
70
71#endif	// _ICU_CATEGORY_DATA_H
72