final NodeSet getRange(long lower, long upper) {
NodeSet getRange(long lower, long upper) {
		final NodeSet getRange(long lower, long upper) {			NodeSet result = new ExtArrayNodeSet((int) (upper - lower) + 1);			int low = 0;			int high = length - 1;			int mid = 0;			NodeProxy p;			// do a binary search to pick some node in the range of valid node ids			while (low <= high) {				mid = (low + high) / 2;				p = array[mid];				if (p.gid >= lower && p.gid <= upper)					break; // found a node, break out				if (p.gid > lower)					high = mid - 1;				else					low = mid + 1;			}			if (low > high)				return result; // no node found			// find the first child node in the range			while (mid > 0 && array[mid - 1].gid >= lower)				--mid;			for (int i = mid; i < length && array[i].gid <= upper; i++) {				result.add(array[i]);			}			return result;		}