123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- // © 2019 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- #ifndef __RESTRACE_H__
- #define __RESTRACE_H__
- #include "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__
|