if (is->length == 0) {
if (pos) *pos = 0;
return 0;
+ } else {
+ /* Check for the case where we know we cannot find the value,
+ * but do know the insert position. */
+ if (value > INTSET_GET(is,is->length-1)) {
+ if (pos) *pos = is->length;
+ return 0;
+ } else if (value < INTSET_GET(is,0)) {
+ if (pos) *pos = 0;
+ return 0;
+ }
}
while(max >= min) {
is = intsetUpgrade(is,valenc,1,offset);
pos = (value < 0) ? 0 : is->length;
} else {
- if (is->length == 0) {
- pos = 0;
- } else {
- /* Check for the case where we know the insert position */
- if (value > INTSET_GET(is,is->length-1)) {
- pos = is->length;
- } else if (value < INTSET_GET(is,0)) {
- pos = 0;
- } else {
- /* Abort if the value is already present in the set */
- if (intsetSearch(is,value,&pos)) {
- if (success) *success = 0;
- return is;
- }
- }
+ /* Abort if the value is already present in the set.
+ * This call will populate "pos" with the right position to insert
+ * the value when it cannot be found. */
+ if (intsetSearch(is,value,&pos)) {
+ if (success) *success = 0;
+ return is;
}
is = intsetResize(is,is->length+1);