MCPcopy Create free account
hub / github.com/beefytech/Beef / MergeChanges

Method MergeChanges

IDEHelper/Backend/BeMCContext.cpp:795–833  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

793}
794
795BeVTrackingList* BeVTrackingContext::MergeChanges(BeVTrackingList* prevDestEntry, BeVTrackingList* mergeFrom)
796{
797 if (prevDestEntry == mergeFrom)
798 return prevDestEntry;
799 if (mergeFrom->mNumChanges == 0)
800 return prevDestEntry;
801
802 SizedArray<int, 2> changes;
803 for (int changeIdx = 0; changeIdx < (int)prevDestEntry->mNumChanges; changeIdx++)
804 changes.push_back(prevDestEntry->GetChange(changeIdx));
805 for (int changeIdx = 0; changeIdx < (int)mergeFrom->mNumChanges; changeIdx++)
806 {
807 // If there isn't already a change (whether and add or a remove) that refers to this same vreg,
808 // then we add this change as well
809 int change = mergeFrom->GetChange(changeIdx);
810 int negChange = -change - 1;
811
812 /*if (((std::find(changes.begin(), changes.end(), change) == changes.end())) &&
813 ((std::find(changes.begin(), changes.end(), negChange) == changes.end())))*/
814 if ((!changes.Contains(change)) && (!changes.Contains(negChange)))
815 {
816 changes.push_back(change);
817 }
818 }
819
820 int newSize = prevDestEntry->mSize;
821 int allocBytes = (int)(sizeof(int) * (2 + newSize + changes.size()));
822 auto newList = (BeVTrackingList*)mAlloc.AllocBytes(allocBytes);
823 mStats.mListBytes += allocBytes;
824 memcpy(&newList->mEntries[0], &prevDestEntry->mEntries[0], newSize * sizeof(int));
825 for (int i = 0; i < (int)changes.size(); i++)
826 {
827 newList->mEntries[newSize + i] = changes[i];
828 }
829 newList->mSize = newSize;
830 newList->mNumChanges = (int)changes.size();
831
832 return newList;
833}
834
835BeVTrackingList * BeVTrackingContext::RemoveChange(BeVTrackingList* prevDestEntry, int idx)
836{

Callers 2

MergeInstFlagsMethod · 0.80
RemoveInstMethod · 0.80

Calls 5

GetChangeMethod · 0.80
push_backMethod · 0.45
ContainsMethod · 0.45
sizeMethod · 0.45
AllocBytesMethod · 0.45

Tested by

no test coverage detected