MCPcopy Create free account
hub / github.com/KhronosGroup/KTX-Software / DiffIdentifier

Class DiffIdentifier

tools/ktx/command_compare.cpp:90–148  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

88};
89
90struct DiffIdentifier : public DiffBase<std::array<uint8_t, sizeof(KTX_header2::identifier)>> {
91 DiffIdentifier(const std::string_view textHeaderIn, const std::string_view jsonPathIn,
92 const KTX_header2& value1, const KTX_header2& value2)
93 : DiffBase<std::array<uint8_t, sizeof(KTX_header2::identifier)>>(textHeaderIn, jsonPathIn,
94 to_array(value1), to_array(value2)) {
95 }
96
97 virtual std::string value(std::size_t index, OutputFormat format) const override {
98 // Convert identifier for better display.
99 auto identifier = rawValue(index);
100 uint32_t idlen = 0;
101 char u8identifier[30];
102 for (uint32_t i = 0; i < 12 && idlen < sizeof(u8identifier); i++, idlen++) {
103 // Convert the angle brackets to utf-8 for better printing. The
104 // conversion below only works for characters whose msb's are 10.
105 if (identifier[i] == U'\xAB') {
106 u8identifier[idlen++] = '\xc2';
107 u8identifier[idlen] = identifier[i];
108 } else if (identifier[i] == U'\xBB') {
109 u8identifier[idlen++] = '\xc2';
110 u8identifier[idlen] = identifier[i];
111 } else if (identifier[i] < '\x20') {
112 uint32_t nchars;
113 switch (identifier[i]) {
114 case '\n':
115 u8identifier[idlen++] = '\\';
116 u8identifier[idlen] = 'n';
117 break;
118 case '\r':
119 u8identifier[idlen++] = '\\';
120 u8identifier[idlen] = 'r';
121 break;
122 default:
123 nchars = snprintf(&u8identifier[idlen],
124 sizeof(u8identifier) - idlen,
125 format == OutputFormat::text ? "\\x%02X" : "\\u%04X",
126 identifier[i]);
127 idlen += nchars - 1;
128 }
129 } else {
130 u8identifier[idlen] = identifier[i];
131 }
132 }
133 if (format == OutputFormat::text) {
134 return std::string(u8identifier, idlen);
135 } else {
136 return fmt::format("\"{}\"", std::string(u8identifier, idlen));
137 }
138 }
139
140private:
141 static std::array<uint8_t, sizeof(KTX_header2::identifier)> to_array(const KTX_header2& header) {
142 std::array<uint8_t, sizeof(KTX_header2::identifier)> arr{};
143 for (std::size_t i = 0; i < sizeof(KTX_header2::identifier); ++i) {
144 arr[i] = header.identifier[i];
145 }
146 return arr;
147 }

Callers 1

compareHeaderMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected