Imported Upstream version 54.1
[platform/upstream/icu.git] / source / i18n / unicode / gender.h
1 /*
2 *******************************************************************************
3 * Copyright (C) 2008-2013, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 *******************************************************************************
6 *
7 *
8 * File GENDER.H
9 *
10 * Modification History:*
11 *   Date        Name        Description
12 *
13 ********************************************************************************
14 */
15
16 #ifndef _GENDER
17 #define _GENDER
18
19 #include "unicode/utypes.h"
20
21 #if !UCONFIG_NO_FORMATTING
22
23 #include "unicode/locid.h"
24 #include "unicode/ugender.h"
25 #include "unicode/uobject.h"
26
27 class GenderInfoTest;
28
29 U_NAMESPACE_BEGIN
30
31 // Forward Declaration
32 void U_CALLCONV GenderInfo_initCache(UErrorCode &status);
33
34 /**
35  * GenderInfo computes the gender of a list as a whole given the gender of
36  * each element.
37  * @stable ICU 50
38  */
39 class U_I18N_API GenderInfo : public UObject {
40 public:
41
42     /**
43      * Provides access to the predefined GenderInfo object for a given
44      * locale.
45      *
46      * @param locale  The locale for which a <code>GenderInfo</code> object is
47      *                returned.
48      * @param status  Output param set to success/failure code on exit, which
49      *                must not indicate a failure before the function call.
50      * @return        The predefined <code>GenderInfo</code> object pointer for
51      *                this locale. The returned object is immutable, so it is
52      *                declared as const. Caller does not own the returned
53      *                pointer, so it must not attempt to free it.
54      * @stable ICU 50
55      */
56     static const GenderInfo* U_EXPORT2 getInstance(const Locale& locale, UErrorCode& status);
57
58     /**
59      * Determines the gender of a list as a whole given the gender of each
60      * of the elements.
61      * 
62      * @param genders the gender of each element in the list.
63      * @param length the length of gender array.
64      * @param status  Output param set to success/failure code on exit, which
65      *                must not indicate a failure before the function call.
66      * @return        the gender of the whole list.
67      * @stable ICU 50
68      */
69     UGender getListGender(const UGender* genders, int32_t length, UErrorCode& status) const;
70
71     /**
72      * Destructor.
73      *
74      * @stable ICU 50
75      */
76     virtual ~GenderInfo();
77
78 private:
79     int32_t _style;
80
81     /**
82      * Copy constructor. One object per locale invariant. Clients
83      * must never copy GenderInfo objects.
84      */
85     GenderInfo(const GenderInfo& other);
86
87     /**
88       * Assignment operator. Not applicable to immutable objects.
89       */
90     GenderInfo& operator=(const GenderInfo&);
91
92     GenderInfo();
93
94     static const GenderInfo* getNeutralInstance();
95
96     static const GenderInfo* getMixedNeutralInstance();
97
98     static const GenderInfo* getMaleTaintsInstance();
99
100     static const GenderInfo* loadInstance(const Locale& locale, UErrorCode& status);
101
102     friend class ::GenderInfoTest;
103     friend void U_CALLCONV GenderInfo_initCache(UErrorCode &status);
104 };
105
106 U_NAMESPACE_END
107
108 #endif /* #if !UCONFIG_NO_FORMATTING */
109
110 #endif // _GENDER
111 //eof