| 575 | |
| 576 | |
| 577 | int |
| 578 | ID::insert(int x) |
| 579 | { |
| 580 | int middle = 0; |
| 581 | int left = 0; |
| 582 | int right = sz-1; |
| 583 | if (sz != 0) { |
| 584 | while (left <= right) { |
| 585 | middle = (left + right)/2; |
| 586 | double dataMiddle = data[middle]; |
| 587 | if (x == dataMiddle) |
| 588 | return 1; // already there |
| 589 | else if (x > dataMiddle) |
| 590 | left = middle + 1; |
| 591 | else |
| 592 | right = middle-1; |
| 593 | } |
| 594 | } |
| 595 | |
| 596 | // we need to enlarge the array .. see if we can do it |
| 597 | // without having to go get more space |
| 598 | |
| 599 | middle = left; |
| 600 | |
| 601 | /* |
| 602 | for (int i=middle; i<sz; i++) |
| 603 | (*this)[i+1] = (*this)[i]; |
| 604 | (*this)[i]=middle; |
| 605 | return middle; |
| 606 | */ |
| 607 | |
| 608 | if (sz < arraySize) { |
| 609 | |
| 610 | int i = sz; |
| 611 | while (i > middle) { |
| 612 | data[i] = data[i-1]; |
| 613 | i--; |
| 614 | } |
| 615 | sz++; |
| 616 | data[i] = x; |
| 617 | return 0; |
| 618 | } else { |
| 619 | int newArraySize = (sz+1) * 2; |
| 620 | int *newData = new (nothrow) int[newArraySize]; |
| 621 | if (newData != 0) { |
| 622 | |
| 623 | // copy the old |
| 624 | for (int ii=0; ii<middle; ii++) |
| 625 | newData[ii] = data[ii]; |
| 626 | newData[middle] = x; |
| 627 | |
| 628 | for (int jj=middle; jj<sz; jj++) |
| 629 | newData[jj+1] = data[jj]; |
| 630 | |
| 631 | sz++; |
| 632 | |
| 633 | if (data != 0 && fromFree == 0) |
| 634 | delete [] data; |
no outgoing calls
no test coverage detected