int i;
}
/*
<<<<<<< HEAD
* �Q��Range�I�u�W�F�N�g�������������ʂ�Ԃ��B
for(i = 0; i < rangeList.size(); i++) {
newList = sub(rangeList.get(i), r);
* ��������Range�I�u�W�F�N�g�́A�c�܂��͉��͈̔͂������ŁA�אڂ��邢�͏d�Ȃ��Ă��Ȃ���Ȃ�Ȃ��B
*/
public Range merge(Range r) {
return merge(this, r);
}
public static Range merge(Range r1, Range r2) {
assert(r1 != null);
assert(r2 != null);
if(r1.getTop() == r2.getTop() && r1.getBottom() == r2.getBottom()) {
if(isOverlappedOrAdjacent(r1.getLeft(), r1.getRight(), r2.getLeft(), r2.getRight())) {
return new Range(r1.getTop(), Math.min(r1.getLeft(), r2.getLeft()),
r1.getBottom(), Math.max(r1.getRight(), r2.getRight()));
}
}
if(r1.getLeft() == r2.getLeft() && r1.getRight() == r2.getRight()) {
if(isOverlappedOrAdjacent(r1.getTop(), r1.getBottom(), r2.getTop(), r2.getBottom())) {
return new Range(r1.getLeft(), Math.min(r1.getTop(), r2.getTop()),
r1.getRight(), Math.max(r1.getBottom(), r2.getBottom()));
}
}
return null;
}
public static ArrayList merge(ArrayList rangeList, Range r) {
if(rangeList == null) {
rangeList = new ArrayList();
}
if(r != null) {
if(rangeList.size() == 0) {
rangeList.add(r);
}
else {
Range new_r = null;
int i;
for(i = 0; i < rangeList.size(); i++) {
new_r = merge(rangeList.get(i), r);
if(new_r != null) {
break;
}
}
if(new_r != null) {
rangeList.remove(i);
return merge(rangeList, new_r);
}
}
}
return rangeList;
}
/*
* �w�肵��Range�I�u�W�F�N�g�͈̔͂��폜�������ʁiRange�I�u�W�F�N�g�̃��X�g�j��Ԃ��B
* �폜�����̈掟��ŁA��������Range�I�u�W�F�N�g�́A�c�܂��͉��͈̔͂������ŁA�אڂ��邢�͏d�Ȃ��Ă��Ȃ���Ȃ�Ȃ��B
*/
public ArrayList sub(Range r) {
return sub(this, r);
}
public static ArrayList sub(Range r1, Range r2) {
assert(r1 != null);
assert(r2 != null);
ArrayList rslt = new ArrayList();
if(!isOverlapped(r1.getTop(), r1.getBottom(), r2.getTop(), r2.getBottom())) {
rslt.add(r1);
return rslt;
}
if(!isOverlapped(r1.getLeft(), r1.getRight(), r2.getLeft(), r2.getRight())) {
rslt.add(r1);
return rslt;
}
int[] x = new int[6];
int[] y = new int[6];
x[0] = r1.getLeft();
x[1] = r2.getLeft()-1;
x[2] = r2.getLeft();
x[3] = r2.getRight();
x[4] = r2.getRight()+1;
x[5] = r1.getRight();
y[0] = r1.getTop();
y[1] = r2.getTop()-1;
y[2] = r2.getTop();
y[3] = r2.getBottom();
y[4] = r2.getBottom()+1;
y[5] = r1.getBottom();
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(i != 1 || j != 1) {
int left = x[i*2];
int right = x[i*2+1];
int top = y[i*2];
int bottom = y[i*2+1];
if(left <= right && top <= bottom) {
merge(rslt, new Range(top, left, right, bottom));
}
}
}
}
return rslt;
}
public static ArrayList sub(ArrayList rangeList, Range r) {
ArrayList rslt = new ArrayList();
ArrayList newList;
for(int j = 0; j < newList.size(); j++) {
rslt = merge(rslt, newList.get(j));
=======
public boolean isMergeable(Range r) {
if(getTop() == r.getTop() && getBottom() == r.getBottom()) {
if(isIntersected(getLeft(), getRight(), r.getLeft(), r.getRight())) {
return true;
}
}
if(getLeft() == r.getLeft() && getRight() == r.getRight()) {
if(isIntersected(getTop(), getBottom(), r.getTop(), r.getBottom())) {
return true;
}
}
return false;
}
*/
public Range merge(Range r) {
if(getTop() == r.getTop() && getBottom() == r.getBottom()) {
if(isOverlappedOrAdjacent(getLeft(), getRight(), r.getLeft(), r.getRight())) {
return new Range(getTop(), Math.min(getLeft(), r.getLeft()),
getBottom(), Math.max(getRight(), r.getRight()));
}
}
if(getLeft() == r.getLeft() && getRight() == r.getRight()) {
if(isOverlappedOrAdjacent(getTop(), getBottom(), r.getTop(), r.getBottom())) {
return new Range(getLeft(), Math.min(getTop(), r.getTop()),
getRight(), Math.max(getBottom(), r.getBottom()));
}
}
return null;
}
public ArrayList sub(Range r) {
ArrayList rslt = new ArrayList();
if(!isOverlapped(getTop(), getBottom(), r.getTop(), r.getBottom())) {
rslt.add(this);
return rslt;
}
if(!isOverlapped(getLeft(), getRight(), r.getLeft(), r.getRight())) {
rslt.add(this);
return rslt;
}
int[][] lrtb = new int[3][4];
lrtb[0][0] = getLeft();
lrtb[0][1] = r.getLeft()-1;
lrtb[1][0] = r.getLeft();
lrtb[1][1] = r.getRight();
lrtb[2][0] = r.getRight()+1;
lrtb[2][1] = getRight();
lrtb[0][2] = getTop();
lrtb[0][3] = r.getTop()-1;
lrtb[1][2] = r.getTop();
lrtb[1][3] = r.getBottom();
lrtb[2][2] = r.getBottom()+1;
lrtb[2][3] = getBottom();
for(int i = 0; i < 3; i++) {
int left = lrtb[i][0];
int right = lrtb[i][1];
int top = lrtb[i][2];
int bottom = lrtb[i][3];
if(left <= right && top <= bottom) {
rslt.add(new Range(top, left, right, bottom));
>>>>>>> 67a1fb49e2f2fdee75ee75b9c4ddec2fdb6cecfc
}
}
return rslt; |