148 lines
3.4 KiB
C++
148 lines
3.4 KiB
C++
|
// © 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__
|