| 89 | } |
| 90 | |
| 91 | UniqueKey UniqueKey::Append(const UniqueKey& uniqueKey, const uint32_t* data, size_t count) { |
| 92 | if (uniqueKey.empty()) { |
| 93 | return {}; |
| 94 | } |
| 95 | if (count == 0) { |
| 96 | return uniqueKey; |
| 97 | } |
| 98 | auto offset = std::max(uniqueKey.count, static_cast<size_t>(2)); |
| 99 | auto newData = CopyData(data, count, offset); |
| 100 | if (newData == nullptr) { |
| 101 | return uniqueKey; |
| 102 | } |
| 103 | if (uniqueKey.count > 2) { |
| 104 | memcpy(newData + 2, uniqueKey.data + 2, (uniqueKey.count - 2) * sizeof(uint32_t)); |
| 105 | } |
| 106 | auto newCount = count + offset; |
| 107 | auto domain = uniqueKey.uniqueDomain; |
| 108 | newData[1] = domain->uniqueID(); |
| 109 | newData[0] = HashRange(newData + 1, newCount - 1); |
| 110 | domain->addReference(); |
| 111 | return {newData, newCount, domain}; |
| 112 | } |
| 113 | |
| 114 | static uint32_t* MakeDomainData(UniqueDomain* uniqueDomain) { |
| 115 | DEBUG_ASSERT(uniqueDomain != nullptr); |
nothing calls this directly
no test coverage detected