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
114