MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / compareElements

Function compareElements

src/OpenLoco/src/GameSaveCompare.cpp:564–670  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

562 }
563
564 bool compareElements(const std::vector<S5::TileElement>& tileElements1, const std::vector<S5::TileElement>& tileElements2, bool displayAllDivergences)
565 {
566 long divergentBytesTotal = 0;
567 std::vector<S5::TileElement> smaller = tileElements1;
568 std::vector<S5::TileElement> larger = tileElements2;
569 if (tileElements1.size() > tileElements2.size())
570 {
571 smaller = tileElements2;
572 larger = tileElements1;
573 }
574
575 if (tileElements1.size() != tileElements2.size())
576 {
577 Logging::info("The TileElements sizes are different.");
578 Logging::info("Size of TileElements1 = {}", tileElements1.size());
579 Logging::info("Size of TileElements2 = {}", tileElements2.size());
580 }
581
582 int elementCount = 0;
583 auto iterator1 = tileElements1.begin();
584 auto iterator2 = tileElements2.begin();
585 for (auto y = 0; y < 384; ++y)
586 {
587 for (auto x = 0; x < 384; ++x)
588 {
589 auto allElementsOnTile = [](auto& iter) {
590 std::vector<S5::TileElement> ts;
591 do
592 {
593 ts.push_back(*iter);
594 } while (!iter++->isLast());
595 return ts;
596 };
597 const auto t1s = allElementsOnTile(iterator1);
598 const auto t2s = allElementsOnTile(iterator2);
599 auto i = 0U;
600 auto limit = std::min(t1s.size(), t2s.size());
601 for (; i < limit; ++i)
602 {
603 if (!bitWiseEqual(t1s[i], t2s[i]))
604 {
605 if (divergentBytesTotal == 0)
606 {
607 Logging::info("DIVERGENCE");
608 }
609 if (divergentBytesTotal == 0 || displayAllDivergences)
610 {
611 Logging::info("TILE ELEMENT[{}] TYPE[{}] x:{}, y:{}", elementCount, (t1s[i].type & 0x3C) >> 2, x, y);
612 }
613 divergentBytesTotal = bitWiseLogDivergence("Elements[" + std::to_string(elementCount) + "] x:" + std::to_string(x) + ", y:" + std::to_string(y), t1s[i], t2s[i], displayAllDivergences, divergentBytesTotal);
614 }
615 elementCount++;
616 }
617
618 for (; i < t1s.size(); ++i)
619 {
620 if (divergentBytesTotal == 0)
621 {

Callers 1

compareGameStatesFunction · 0.85

Calls 8

infoFunction · 0.85
bitWiseEqualFunction · 0.85
bitWiseLogDivergenceFunction · 0.85
getBytesSpanFunction · 0.85
push_backMethod · 0.80
sizeMethod · 0.45
beginMethod · 0.45
isLastMethod · 0.45

Tested by

no test coverage detected