aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/icu/common/locbased.h
blob: d7ece27daffa4a56791f1da108d7af23ab73d1ed (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html 
/* 
********************************************************************** 
* Copyright (c) 2004-2014, International Business Machines 
* Corporation and others.  All Rights Reserved. 
********************************************************************** 
* Author: Alan Liu 
* Created: January 16 2004 
* Since: ICU 2.8 
********************************************************************** 
*/ 
#ifndef LOCBASED_H 
#define LOCBASED_H 
 
#include "unicode/locid.h" 
#include "unicode/uobject.h" 
 
/** 
 * Macro to declare a locale LocaleBased wrapper object for the given 
 * object, which must have two members named `validLocale' and 
 * `actualLocale' of size ULOC_FULLNAME_CAPACITY 
 */ 
#define U_LOCALE_BASED(varname, objname) \ 
  LocaleBased varname((objname).validLocale, (objname).actualLocale)
 
U_NAMESPACE_BEGIN 
 
/** 
 * A utility class that unifies the implementation of getLocale() by 
 * various ICU services.  This class is likely to be removed in the 
 * ICU 3.0 time frame in favor of an integrated approach with the 
 * services framework. 
 * @since ICU 2.8 
 */ 
class U_COMMON_API LocaleBased : public UMemory { 
 
 public: 
 
    /** 
     * Construct a LocaleBased wrapper around the two pointers.  These 
     * will be aliased for the lifetime of this object. 
     */ 
    inline LocaleBased(char* validAlias, char* actualAlias); 
 
    /** 
     * Construct a LocaleBased wrapper around the two const pointers. 
     * These will be aliased for the lifetime of this object. 
     */ 
    inline LocaleBased(const char* validAlias, const char* actualAlias); 
 
    /** 
     * Return locale meta-data for the service object wrapped by this 
     * object.  Either the valid or the actual locale may be 
     * retrieved. 
     * @param type either ULOC_VALID_LOCALE or ULOC_ACTUAL_LOCALE 
     * @param status input-output error code 
     * @return the indicated locale 
     */ 
    Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const; 
 
    /** 
     * Return the locale ID for the service object wrapped by this 
     * object.  Either the valid or the actual locale may be 
     * retrieved. 
     * @param type either ULOC_VALID_LOCALE or ULOC_ACTUAL_LOCALE 
     * @param status input-output error code 
     * @return the indicated locale ID 
     */ 
    const char* getLocaleID(ULocDataLocaleType type, UErrorCode& status) const; 
 
    /** 
     * Set the locale meta-data for the service object wrapped by this 
     * object.  If either parameter is zero, it is ignored. 
     * @param valid the ID of the valid locale 
     * @param actual the ID of the actual locale 
     */ 
    void setLocaleIDs(const char* valid, const char* actual); 
 
    /** 
     * Set the locale meta-data for the service object wrapped by this 
     * object. 
     * @param valid the ID of the valid locale 
     * @param actual the ID of the actual locale 
     */ 
    void setLocaleIDs(const Locale& valid, const Locale& actual); 
 
 private: 
 
    char* valid; 
     
    char* actual; 
}; 
 
inline LocaleBased::LocaleBased(char* validAlias, char* actualAlias) : 
    valid(validAlias), actual(actualAlias) { 
} 
 
inline LocaleBased::LocaleBased(const char* validAlias, 
                                const char* actualAlias) : 
    // ugh: cast away const 
    valid((char*)validAlias), actual((char*)actualAlias) { 
} 
 
U_NAMESPACE_END 
 
#endif