From c88f4184eaa48efbdc69e76eb3c8a4a206434ad3 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 16 Aug 2025 14:52:24 -0400 Subject: Started writing a data validator Currently, it can check whether identifiers point to non-existent objects, or whether multiple objects share the same identifier. It can also determine whether an identifier is underspecified (e.g. a door doesn't specify a room, or a global connection doesn't specify a map). --- tools/validator/structs.h | 97 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 tools/validator/structs.h (limited to 'tools/validator/structs.h') diff --git a/tools/validator/structs.h b/tools/validator/structs.h new file mode 100644 index 0000000..c3427f4 --- /dev/null +++ b/tools/validator/structs.h @@ -0,0 +1,97 @@ +#ifndef TOOLS_VALIDATOR_STRUCTS_H_ +#define TOOLS_VALIDATOR_STRUCTS_H_ + +#include +#include +#include + +#include "proto/human.pb.h" +#include "util/identifiers.h" + +namespace com::fourisland::lingo2_archipelago { + +struct MalformedIdentifiers { + std::vector paintings; + std::vector panels; + std::vector keyholders; + + bool HasAny() const { + return !paintings.empty() || !panels.empty() || !keyholders.empty(); + } +}; + +struct RoomInfo { + std::vector definitions; + + std::vector doors_referenced_by; + std::vector panels_referenced_by; + std::vector connections_referenced_by; +}; + +struct DoorInfo { + std::vector definitions; + + std::vector connections_referenced_by; + std::vector doors_referenced_by; + std::vector panels_referenced_by; + std::vector paintings_referenced_by; + std::vector ports_referenced_by; + + MalformedIdentifiers malformed_identifiers; +}; + +struct PortInfo { + std::vector definitions; + + std::vector connections_referenced_by; +}; + +struct PaintingInfo { + std::vector definitions; + + std::vector connections_referenced_by; + std::vector doors_referenced_by; +}; + +struct ProxyInfo { + std::vector definitions; + + std::vector connections_referenced_by; + std::vector doors_referenced_by; +}; + +struct PanelInfo { + std::vector definitions; + + std::vector connections_referenced_by; + std::vector doors_referenced_by; + + std::map proxies; +}; + +struct KeyholderInfo { + std::vector definitions; + + std::vector doors_referenced_by; +}; + +using LetterIdentifier = std::tuple; + +struct LetterInfo { + std::vector defined_in; +}; + +struct CollectedInfo { + std::map rooms; + std::map doors; + std::map ports; + std::map paintings; + std::map panels; + std::map + keyholders; + std::map letters; +}; + +} // namespace com::fourisland::lingo2_archipelago + +#endif /* TOOLS_VALIDATOR_STRUCTS_H_ */ -- cgit 1.4.1