diff --git a/sapfor/experts/Sapfor_2017/_src/PrivateAnalyzer/private_arrays_search.cpp b/sapfor/experts/Sapfor_2017/_src/PrivateAnalyzer/private_arrays_search.cpp index 4686eac..e6cab9e 100644 --- a/sapfor/experts/Sapfor_2017/_src/PrivateAnalyzer/private_arrays_search.cpp +++ b/sapfor/experts/Sapfor_2017/_src/PrivateAnalyzer/private_arrays_search.cpp @@ -249,7 +249,7 @@ vector FindParticularSolution(const ArrayDimension& dim1, const ArrayD return {}; } /* dim1 /\ dim2 */ -ArrayDimension* IntersectDimension(const ArrayDimension& dim1, const ArrayDimension& dim2) +ArrayDimension* DimensionIntersection(const ArrayDimension& dim1, const ArrayDimension& dim2) { vector partSolution = FindParticularSolution(dim1, dim2); if (partSolution.empty()) @@ -281,10 +281,10 @@ ArrayDimension* IntersectDimension(const ArrayDimension& dim1, const ArrayDimens /* dim1 / dim2 */ vector DimensionDifference(const ArrayDimension& dim1, const ArrayDimension& dim2) { - ArrayDimension* intersection = IntersectDimension(dim1, dim2); + ArrayDimension* intersection = DimensionIntersection(dim1, dim2); if (!intersection) { - return {dim1, dim2}; + return {dim1}; } vector result; /* add the part before intersection */ @@ -321,6 +321,24 @@ vector DimensionDifference(const ArrayDimension& dim1, const Arr } +vector DimensionUnion(const ArrayDimension& dim1, const ArrayDimension& dim2) +{ + vector res; + ArrayDimension* inter = DimensionIntersection(dim1, dim2); + if(!inter) + { + return { dim1, dim2 }; + } + res.push_back(*inter); + delete(inter); + vector diff1, diff2; + diff1 = DimensionDifference(dim1, dim2); + diff2 = DimensionDifference(dim2, dim1); + res.insert(res.end(), diff1.begin(), diff1.end()); + res.insert(res.end(), diff2.begin(), diff2.end()); + return res; +} + void FindPrivateArrays(map> &loopGraph, map>& FullIR) { for (const auto& curr_graph_pair: loopGraph)