public static bool HasPsxFreeSpaceOverlap(PatchRange range) { foreach (PatchRange freeSpaceRange in PsxRanges) { if (range.HasOverlap(freeSpaceRange)) { return(true); } } return(false); }
public static bool HasFreeSpaceOverlap(PatchRange range, FreeSpaceMode mode) { foreach (PatchRange freeSpaceRange in GetRanges(mode)) { if (range.HasOverlap(freeSpaceRange)) { return(true); } } return(false); }
private ConflictCheckResult CheckConflicts(List <AsmPatch> patchList) { List <AsmPatch> resultPatchList = new List <AsmPatch>(); Dictionary <AsmPatch, List <PatchRangeConflict> > conflictMap = new Dictionary <AsmPatch, List <PatchRangeConflict> >(); Dictionary <AsmPatch, List <PatchedByteArray> > combinedPatchListMap = new Dictionary <AsmPatch, List <PatchedByteArray> >(); foreach (AsmPatch patch in patchList) { combinedPatchListMap[patch] = patch.GetCombinedPatchList(); } for (int patchIndex = 0; patchIndex < patchList.Count; patchIndex++) { AsmPatch patch = patchList[patchIndex]; List <PatchedByteArray> combinedPatchList = combinedPatchListMap[patch]; foreach (PatchedByteArray patchedByteArray in combinedPatchList) { if (patchedByteArray is InputFilePatch) { continue; } PatchRange range = new PatchRange(patchedByteArray); for (int conflictPatchIndex = patchIndex + 1; conflictPatchIndex < patchList.Count; conflictPatchIndex++) { AsmPatch conflictPatch = patchList[conflictPatchIndex]; List <PatchedByteArray> conflictCombinedPatchList = combinedPatchListMap[conflictPatch]; foreach (PatchedByteArray conflictPatchedByteArray in conflictCombinedPatchList) { if (conflictPatchedByteArray is InputFilePatch) { continue; } //if (patchedByteArray.IsPatchEqual(conflictPatchedByteArray)) if (!patchedByteArray.HasConflict(conflictPatchedByteArray)) { continue; } PatchRange conflictRange = new PatchRange(conflictPatchedByteArray); if (range.HasOverlap(conflictRange)) { bool isInFreeSpace = FreeSpace.IsContainedWithinPsxFreeSpace(range); PatchRangeConflict patchConflict = new PatchRangeConflict(range, conflictPatch, conflictRange, isInFreeSpace); PatchRangeConflict reversePatchConflict = new PatchRangeConflict(conflictRange, patch, range, isInFreeSpace); if (conflictMap.ContainsKey(patch)) { conflictMap[patch].Add(patchConflict); } else { conflictMap.Add(patch, new List <PatchRangeConflict> { patchConflict }); } if (conflictMap.ContainsKey(conflictPatch)) { conflictMap[conflictPatch].Add(reversePatchConflict); } else { conflictMap.Add(conflictPatch, new List <PatchRangeConflict> { reversePatchConflict }); } } } } } if (conflictMap.ContainsKey(patch)) { resultPatchList.Add(patch); } } return(new ConflictCheckResult(resultPatchList, conflictMap)); }