// Copyright (c) 2005-2007, Mihai Preda class Region { void setNoInfo(int inilen) { noInfo = true; len = inilen; //min1 = max1 = min2 = max2 = 0; } void setExact(int inilen) { noInfo = false; exact = true; len = min1 = max1 = min2 = max2 = inilen; } void set(int inilen, int size, int intervals[]) { noInfo = false; exact = false; len = inilen; if (size == 0) { theSize = 0; min1 = len - 3; max1 = len + 3; min2 = len - 1; max2 = len + 1; return; } if (size > 12) { size = 12; } theSize = size; int l; min1 = intervals[0]; max1 = intervals[0]; if (size < 5) { for (int i = 1; i < size; ++i) { l = intervals[i]; if (l < min1) { min1 = l; } else if (l > max1) { max1 = l; } } min2 = min1; max2 = max1; } else { min2 = Profile.MAX_INTERVAL; max2 = Profile.MIN_INTERVAL; int v; for (int i = 1; i < size; ++i) { v = l = intervals[i]; if (l < min1) { v = min1; min1 = l; } else if (l > max1) { v = max1; max1 = l; } if (v < min2) { min2 = v; } if (v > max2) { max2 = v; } } } if (size >= 7) { unsure = 0; } else if (size >= 3) { unsure = 1; } else { unsure = 2; } min1 -= unsure; max1 += unsure; if (len < min1 || len > max1) { noInfo = true; } } int len; int min1, max1; int min2, max2; boolean noInfo, exact; int theSize, unsure; }