summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h')
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h30
1 files changed, 26 insertions, 4 deletions
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
index ee1ecf3d05f..07874fdbaa8 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
@@ -23,6 +23,8 @@
#define KEY_SPACE_SIZE 65536
#define RESLIST_MAX_INT_VECTOR 2048
+#include <functional>
+
#include "unicode/utypes.h"
#include "unicode/unistr.h"
#include "unicode/ures.h"
@@ -36,7 +38,9 @@
U_CDECL_BEGIN
+class PathFilter;
class PseudoListResource;
+class ResKeyPath;
struct ResFile {
ResFile()
@@ -212,6 +216,19 @@ struct SResource {
void write(UNewDataMemory *mem, uint32_t *byteOffset);
virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset);
+ /**
+ * Applies the given filter with the given base path to this resource.
+ * Removes child resources rejected by the filter recursively.
+ *
+ * @param bundle Needed in order to access the key for this and child resources.
+ */
+ virtual void applyFilter(const PathFilter& filter, ResKeyPath& path, const SRBRoot* bundle);
+
+ /**
+ * Calls the given function for every key ID present in this tree.
+ */
+ virtual void collectKeys(std::function<void(int32_t)> collector) const;
+
int8_t fType; /* nominal type: fRes (when != 0xffffffff) may use subtype */
UBool fWritten; /* res_write() can exit early */
uint32_t fRes; /* resource item word; RES_BOGUS=0xffffffff if not known yet */
@@ -231,7 +248,10 @@ public:
fCount(0), fFirst(NULL) {}
virtual ~ContainerResource();
- virtual void handlePreflightStrings(SRBRoot *bundle, UHashtable *stringSet, UErrorCode &errorCode);
+ void handlePreflightStrings(SRBRoot *bundle, UHashtable *stringSet, UErrorCode &errorCode) override;
+
+ void collectKeys(std::function<void(int32_t)> collector) const override;
+
protected:
void writeAllRes16(SRBRoot *bundle);
void preWriteAllRes(uint32_t *byteOffset);
@@ -254,9 +274,11 @@ public:
void add(SResource *res, int linenumber, UErrorCode &errorCode);
- virtual void handleWrite16(SRBRoot *bundle);
- virtual void handlePreWrite(uint32_t *byteOffset);
- virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset);
+ void handleWrite16(SRBRoot *bundle) override;
+ void handlePreWrite(uint32_t *byteOffset) override;
+ void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset) override;
+
+ void applyFilter(const PathFilter& filter, ResKeyPath& path, const SRBRoot* bundle) override;
int8_t fTableType; // determined by table_write16() for table_preWrite() & table_write()
SRBRoot *fRoot;