/// <summary> /// Precalculate a union/intersection. /// </summary> /// <param name="unionTemp"> /// Set to recieve the union/intersection result. /// </param> /// <param name="i"> /// Size of first set. /// </param> /// <param name="j"> /// Index of first set. /// </param> /// <param name="k"> /// Size of second set. /// </param> /// <param name="l"> /// Index of second set. /// </param> private void PrecalcAUnionIntersect(Set unionTemp, int i, int j, int k, int l) { unionTemp.TakeRealUnion(elements[i][j], elements[k][l]); int index = elements[unionTemp.Size].BinarySearch(unionTemp); unionsSize[elements[i][j].num, elements[k][l].num] = elements[unionTemp.Size][index].Size; unionsIndex[elements[i][j].num, elements[k][l].num] = index; unionTemp.TakeRealIntersection(elements[i][j], elements[k][l]); index = elements[unionTemp.Size].BinarySearch(unionTemp); intersectionsSize[elements[i][j].num, elements[k][l].num] = elements[unionTemp.Size][index].Size; intersectionsIndex[elements[i][j].num, elements[k][l].num] = index; }