De-duplicate fields between XFA_PACKETINFO and PacketRecord
-- Include one inside the other to simplify returning a result.
-- Rename to PacketTableRecord to match kPacketTable naming.
-- Re-order fields to pack more tightly.
Change-Id: I596c02fde91bda614a67b28ba5ba5c8ca2908814
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/84214
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/parser/xfa_basic_data.cpp b/xfa/fxfa/parser/xfa_basic_data.cpp
index 211a396..868b5fe 100644
--- a/xfa/fxfa/parser/xfa_basic_data.cpp
+++ b/xfa/fxfa/parser/xfa_basic_data.cpp
@@ -45,19 +45,17 @@
namespace {
-struct PacketRecord {
- XFA_PacketType packet_type;
+struct PacketTableRecord {
uint32_t hash;
- uint32_t flags;
- const wchar_t* name;
- const wchar_t* uri;
+ XFA_PACKETINFO info;
};
-const PacketRecord kPacketTable[] = {
+const PacketTableRecord kPacketTable[] = {
#undef PCKT____
-#define PCKT____(a, b, c, d, e, f) \
- {XFA_PacketType::c, a, XFA_XDPPACKET_FLAGS_##e | XFA_XDPPACKET_FLAGS_##f, \
- L##b, d},
+#define PCKT____(a, b, c, d, e, f) \
+ {a, \
+ {XFA_PacketType::c, XFA_XDPPACKET_FLAGS_##e | XFA_XDPPACKET_FLAGS_##f, \
+ L##b, d}},
#include "xfa/fxfa/parser/packets.inc"
#undef PCKT____
};
@@ -166,17 +164,16 @@
} // namespace
XFA_PACKETINFO XFA_GetPacketByIndex(XFA_PacketType ePacket) {
- const PacketRecord* pRecord = &kPacketTable[static_cast<uint8_t>(ePacket)];
- return {pRecord->name, pRecord->packet_type, pRecord->uri, pRecord->flags};
+ return kPacketTable[static_cast<uint8_t>(ePacket)].info;
}
Optional<XFA_PACKETINFO> XFA_GetPacketByName(WideStringView wsName) {
uint32_t hash = FX_HashCode_GetW(wsName);
auto* elem = std::lower_bound(
std::begin(kPacketTable), std::end(kPacketTable), hash,
- [](const PacketRecord& a, uint32_t hash) { return a.hash < hash; });
- if (elem != std::end(kPacketTable) && elem->name == wsName)
- return XFA_GetPacketByIndex(elem->packet_type);
+ [](const PacketTableRecord& a, uint32_t hash) { return a.hash < hash; });
+ if (elem != std::end(kPacketTable) && elem->info.name == wsName)
+ return elem->info;
return pdfium::nullopt;
}
diff --git a/xfa/fxfa/parser/xfa_basic_data.h b/xfa/fxfa/parser/xfa_basic_data.h
index 500dfbe..3066908 100644
--- a/xfa/fxfa/parser/xfa_basic_data.h
+++ b/xfa/fxfa/parser/xfa_basic_data.h
@@ -21,10 +21,10 @@
XFA_Attribute eAttribute);
struct XFA_PACKETINFO {
- const wchar_t* name;
XFA_PacketType packet_type;
- const wchar_t* uri;
uint32_t flags;
+ const wchar_t* name;
+ const wchar_t* uri;
};
struct XFA_ATTRIBUTEINFO {