{
struct seq_range *data, value;
unsigned int count;
+ bool exists = FALSE;
value.seq1 = value.seq2 = seq;
data = array_get_modifiable(array, &count);
- if (count == 0) {
- array_push_back(array, &value);
- return FALSE;
- }
-
/* quick checks */
- if (data[count-1].seq2 < seq) {
+ if (count == 0)
+ array_push_back(array, &value);
+ else if (data[count-1].seq2 < seq) {
if (data[count-1].seq2 == seq-1) {
/* grow last range */
data[count-1].seq2 = seq;
} else {
array_push_back(array, &value);
}
- return FALSE;
- }
- if (data[0].seq1 > seq) {
+ } else if (data[0].seq1 > seq) {
if (data[0].seq1-1 == seq) {
/* grow down first range */
data[0].seq1 = seq;
} else {
array_push_front(array, &value);
}
- return FALSE;
+ } else {
+ exists = seq_range_array_add_slow_path(array, seq);
}
-
- return seq_range_array_add_slow_path(array, seq);
+ return exists;
}
void seq_range_array_add_with_init(ARRAY_TYPE(seq_range) *array,