+
+ // Optimization for small lists. No need to traverse empty higher levels.
+ assert(MAX_LEVEL > 2);
+ int start_level = 2;
+ while (pred->next[start_level+1] != NULL) {
+ start_level += start_level - 1;
+ if (EXPECT_FALSE(start_level >= MAX_LEVEL)) {
+ start_level = MAX_LEVEL;
+ break;
+ }
+ }
+ if (EXPECT_FALSE(start_level < n)) {
+ start_level = n;
+ }