1 // © 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 /**
22  * \file
23  * \brief C++ API: GenderInfo computes the gender of a list.
24  */
25 
26 #include "unicode/utypes.h"
27 
28 #if U_SHOW_CPLUSPLUS_API
29 
30 #if !UCONFIG_NO_FORMATTING
31 
32 #include "unicode/locid.h"
33 #include "unicode/ugender.h"
34 #include "unicode/uobject.h"
35 
36 class GenderInfoTest;
37 
38 U_NAMESPACE_BEGIN
39 
40 /** \internal Forward Declaration  */
41 void U_CALLCONV GenderInfo_initCache(UErrorCode &status);
42 
43 /**
44  * GenderInfo computes the gender of a list as a whole given the gender of
45  * each element.
46  * @stable ICU 50
47  */
48 class U_I18N_API GenderInfo : public UObject {
49 public:
50 
51     /**
52      * Provides access to the predefined GenderInfo object for a given
53      * locale.
54      *
55      * @param locale  The locale for which a <code>GenderInfo</code> object is
56      *                returned.
57      * @param status  Output param set to success/failure code on exit, which
58      *                must not indicate a failure before the function call.
59      * @return        The predefined <code>GenderInfo</code> object pointer for
60      *                this locale. The returned object is immutable, so it is
61      *                declared as const. Caller does not own the returned
62      *                pointer, so it must not attempt to free it.
63      * @stable ICU 50
64      */
65     static const GenderInfo* U_EXPORT2 getInstance(const Locale& locale, UErrorCode& status);
66 
67     /**
68      * Determines the gender of a list as a whole given the gender of each
69      * of the elements.
70      *
71      * @param genders the gender of each element in the list.
72      * @param length the length of gender array.
73      * @param status  Output param set to success/failure code on exit, which
74      *                must not indicate a failure before the function call.
75      * @return        the gender of the whole list.
76      * @stable ICU 50
77      */
78     UGender getListGender(const UGender* genders, int32_t length, UErrorCode& status) const;
79 
80     /**
81      * Destructor.
82      *
83      * @stable ICU 50
84      */
85     virtual ~GenderInfo();
86 
87 private:
88     int32_t _style;
89 
90     /**
91      * Copy constructor. One object per locale invariant. Clients
92      * must never copy GenderInfo objects.
93      */
94     GenderInfo(const GenderInfo& other);
95 
96     /**
97       * Assignment operator. Not applicable to immutable objects.
98       */
99     GenderInfo& operator=(const GenderInfo&);
100 
101     GenderInfo();
102 
103     static const GenderInfo* getNeutralInstance();
104 
105     static const GenderInfo* getMixedNeutralInstance();
106 
107     static const GenderInfo* getMaleTaintsInstance();
108 
109     static const GenderInfo* loadInstance(const Locale& locale, UErrorCode& status);
110 
111     friend class ::GenderInfoTest;
112     friend void U_CALLCONV GenderInfo_initCache(UErrorCode &status);
113 };
114 
115 U_NAMESPACE_END
116 
117 #endif /* #if !UCONFIG_NO_FORMATTING */
118 
119 #endif /* U_SHOW_CPLUSPLUS_API */
120 
121 #endif // _GENDER
122 //eof
123