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