xref: /aosp_15_r20/external/icu/icu4c/source/common/uinit.cpp (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /*
4*0e209d39SAndroid Build Coastguard Worker ******************************************************************************
5*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 2001-2015, International Business Machines
6*0e209d39SAndroid Build Coastguard Worker *                Corporation and others. All Rights Reserved.
7*0e209d39SAndroid Build Coastguard Worker ******************************************************************************
8*0e209d39SAndroid Build Coastguard Worker *   file name:  uinit.cpp
9*0e209d39SAndroid Build Coastguard Worker *   encoding:   UTF-8
10*0e209d39SAndroid Build Coastguard Worker *   tab size:   8 (not used)
11*0e209d39SAndroid Build Coastguard Worker *   indentation:4
12*0e209d39SAndroid Build Coastguard Worker *
13*0e209d39SAndroid Build Coastguard Worker *   created on: 2001July05
14*0e209d39SAndroid Build Coastguard Worker *   created by: George Rhoten
15*0e209d39SAndroid Build Coastguard Worker */
16*0e209d39SAndroid Build Coastguard Worker 
17*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
18*0e209d39SAndroid Build Coastguard Worker #include "unicode/icuplug.h"
19*0e209d39SAndroid Build Coastguard Worker #include "unicode/uclean.h"
20*0e209d39SAndroid Build Coastguard Worker #include "cmemory.h"
21*0e209d39SAndroid Build Coastguard Worker #include "icuplugimp.h"
22*0e209d39SAndroid Build Coastguard Worker #include "ucln_cmn.h"
23*0e209d39SAndroid Build Coastguard Worker #include "ucnv_io.h"
24*0e209d39SAndroid Build Coastguard Worker #include "umutex.h"
25*0e209d39SAndroid Build Coastguard Worker #include "utracimp.h"
26*0e209d39SAndroid Build Coastguard Worker 
27*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
28*0e209d39SAndroid Build Coastguard Worker 
29*0e209d39SAndroid Build Coastguard Worker static UInitOnce gICUInitOnce {};
30*0e209d39SAndroid Build Coastguard Worker 
uinit_cleanup()31*0e209d39SAndroid Build Coastguard Worker static UBool U_CALLCONV uinit_cleanup() {
32*0e209d39SAndroid Build Coastguard Worker     gICUInitOnce.reset();
33*0e209d39SAndroid Build Coastguard Worker     return true;
34*0e209d39SAndroid Build Coastguard Worker }
35*0e209d39SAndroid Build Coastguard Worker 
36*0e209d39SAndroid Build Coastguard Worker static void U_CALLCONV
initData(UErrorCode & status)37*0e209d39SAndroid Build Coastguard Worker initData(UErrorCode &status)
38*0e209d39SAndroid Build Coastguard Worker {
39*0e209d39SAndroid Build Coastguard Worker #if UCONFIG_ENABLE_PLUGINS
40*0e209d39SAndroid Build Coastguard Worker     /* initialize plugins */
41*0e209d39SAndroid Build Coastguard Worker     uplug_init(&status);
42*0e209d39SAndroid Build Coastguard Worker #endif
43*0e209d39SAndroid Build Coastguard Worker 
44*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_CONVERSION
45*0e209d39SAndroid Build Coastguard Worker     /*
46*0e209d39SAndroid Build Coastguard Worker      * 2005-may-02
47*0e209d39SAndroid Build Coastguard Worker      *
48*0e209d39SAndroid Build Coastguard Worker      * ICU4C 3.4 (jitterbug 4497) hardcodes the data for Unicode character
49*0e209d39SAndroid Build Coastguard Worker      * properties for APIs that want to be fast.
50*0e209d39SAndroid Build Coastguard Worker      * Therefore, we need not load them here nor check for errors.
51*0e209d39SAndroid Build Coastguard Worker      * Instead, we load the converter alias table to see if any ICU data
52*0e209d39SAndroid Build Coastguard Worker      * is available.
53*0e209d39SAndroid Build Coastguard Worker      * Users should really open the service objects they need and check
54*0e209d39SAndroid Build Coastguard Worker      * for errors there, to make sure that the actual items they need are
55*0e209d39SAndroid Build Coastguard Worker      * available.
56*0e209d39SAndroid Build Coastguard Worker      */
57*0e209d39SAndroid Build Coastguard Worker     ucnv_io_countKnownConverters(&status);
58*0e209d39SAndroid Build Coastguard Worker #endif
59*0e209d39SAndroid Build Coastguard Worker     ucln_common_registerCleanup(UCLN_COMMON_UINIT, uinit_cleanup);
60*0e209d39SAndroid Build Coastguard Worker }
61*0e209d39SAndroid Build Coastguard Worker 
62*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
63*0e209d39SAndroid Build Coastguard Worker 
64*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_USE
65*0e209d39SAndroid Build Coastguard Worker 
66*0e209d39SAndroid Build Coastguard Worker /*
67*0e209d39SAndroid Build Coastguard Worker  * ICU Initialization Function. Need not be called.
68*0e209d39SAndroid Build Coastguard Worker  */
69*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
u_init(UErrorCode * status)70*0e209d39SAndroid Build Coastguard Worker u_init(UErrorCode *status) {
71*0e209d39SAndroid Build Coastguard Worker     UTRACE_ENTRY_OC(UTRACE_U_INIT);
72*0e209d39SAndroid Build Coastguard Worker     umtx_initOnce(gICUInitOnce, &initData, *status);
73*0e209d39SAndroid Build Coastguard Worker     UTRACE_EXIT_STATUS(*status);
74*0e209d39SAndroid Build Coastguard Worker }
75