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