]> git.saurik.com Git - apple/icu.git/blob - icuSources/common/restrace.h
ICU-66108.tar.gz
[apple/icu.git] / icuSources / common / restrace.h
1 // © 2019 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3
4 #ifndef __RESTRACE_H__
5 #define __RESTRACE_H__
6
7 #include "unicode/utypes.h"
8
9 #if U_ENABLE_TRACING
10
11 struct UResourceBundle;
12
13 U_NAMESPACE_BEGIN
14
15 class CharString;
16
17 /**
18 * Instances of this class store information used to trace reads from resource
19 * bundles when ICU is built with --enable-tracing.
20 *
21 * All arguments of type const UResourceBundle*, const char*, and
22 * const ResourceTracer& are stored as pointers. The caller must retain
23 * ownership for the lifetime of this ResourceTracer.
24 *
25 * Exported as U_COMMON_API for Windows because it is a value field
26 * in other exported types.
27 */
28 class U_COMMON_API ResourceTracer {
29 public:
30 ResourceTracer() :
31 fResB(nullptr),
32 fParent(nullptr),
33 fKey(nullptr),
34 fIndex(-1) {}
35
36 ResourceTracer(const UResourceBundle* resB) :
37 fResB(resB),
38 fParent(nullptr),
39 fKey(nullptr),
40 fIndex(-1) {}
41
42 ResourceTracer(const UResourceBundle* resB, const char* key) :
43 fResB(resB),
44 fParent(nullptr),
45 fKey(key),
46 fIndex(-1) {}
47
48 ResourceTracer(const UResourceBundle* resB, int32_t index) :
49 fResB(resB),
50 fParent(nullptr),
51 fKey(nullptr),
52 fIndex(index) {}
53
54 ResourceTracer(const ResourceTracer& parent, const char* key) :
55 fResB(nullptr),
56 fParent(&parent),
57 fKey(key),
58 fIndex(-1) {}
59
60 ResourceTracer(const ResourceTracer& parent, int32_t index) :
61 fResB(nullptr),
62 fParent(&parent),
63 fKey(nullptr),
64 fIndex(index) {}
65
66 ~ResourceTracer();
67
68 void trace(const char* type) const;
69 void traceOpen() const;
70
71 /**
72 * Calls trace() if the resB or parent provided to the constructor was
73 * non-null; otherwise, does nothing.
74 */
75 void maybeTrace(const char* type) const {
76 if (fResB || fParent) {
77 trace(type);
78 }
79 }
80
81 private:
82 const UResourceBundle* fResB;
83 const ResourceTracer* fParent;
84 const char* fKey;
85 int32_t fIndex;
86
87 CharString& getFilePath(CharString& output, UErrorCode& status) const;
88
89 CharString& getResPath(CharString& output, UErrorCode& status) const;
90 };
91
92 /**
93 * This class provides methods to trace data file reads when ICU is built
94 * with --enable-tracing.
95 */
96 class FileTracer {
97 public:
98 static void traceOpen(const char* path, const char* type, const char* name);
99
100 private:
101 static void traceOpenDataFile(const char* path, const char* type, const char* name);
102 static void traceOpenResFile(const char* path, const char* name);
103 };
104
105 U_NAMESPACE_END
106
107 #else // U_ENABLE_TRACING
108
109 U_NAMESPACE_BEGIN
110
111 /**
112 * Default trivial implementation when --enable-tracing is not used.
113 */
114 class U_COMMON_API ResourceTracer {
115 public:
116 ResourceTracer() {}
117
118 ResourceTracer(const void*) {}
119
120 ResourceTracer(const void*, const char*) {}
121
122 ResourceTracer(const void*, int32_t) {}
123
124 ResourceTracer(const ResourceTracer&, const char*) {}
125
126 ResourceTracer(const ResourceTracer&, int32_t) {}
127
128 void trace(const char*) const {}
129
130 void traceOpen() const {}
131
132 void maybeTrace(const char*) const {}
133 };
134
135 /**
136 * Default trivial implementation when --enable-tracing is not used.
137 */
138 class FileTracer {
139 public:
140 static void traceOpen(const char*, const char*, const char*) {}
141 };
142
143 U_NAMESPACE_END
144
145 #endif // U_ENABLE_TRACING
146
147 #endif //__RESTRACE_H__