198 std::pair<const_iterator,bool>
insert(
const T& item)
200 if (len_ > highwatermark_) {
201 FEI_COUT <<
"error"<<FEI_ENDL;
204 highwatermark_ = alloc_incr_;
205 expand_dataptr(highwatermark_);
207 dataptr_[1] = item+1;
209 return(std::pair<const_iterator,bool>(
const_iterator(
this, item, 0),
true));
214 if (insertPoint < len_) {
251 if (dataptr_[insertPoint] == item) {
252 if (insertPoint%2 == 0) {
254 return(std::pair<const_iterator,bool>(
const_iterator(
this, item, insertPoint),
false));
260 ++dataptr_[insertPoint];
264 if (insertPoint < len_-1) {
265 if (dataptr_[insertPoint] == dataptr_[insertPoint+1]) {
266 dataptr_[insertPoint] = dataptr_[insertPoint+2];
268 int nmove=len_-insertPoint-1;
270 T* dest = dataptr_+insertPoint+1;
272 std::memmove(dest, src, nmove*
sizeof(T));
277 return(std::pair<const_iterator,bool>(
const_iterator(
this, item, insertPoint-1),
true));
282 if (insertPoint%2 == 0) {
283 if (item == dataptr_[insertPoint]-1) {
284 --dataptr_[insertPoint];
285 return(std::pair<const_iterator,bool>(
const_iterator(
this, item, insertPoint),
true));
289 int nmove = len_-insertPoint;
290 if (len_+2 > highwatermark_) {
291 highwatermark_ += alloc_incr_;
292 expand_dataptr(highwatermark_);
296 T* dest = dataptr_+insertPoint+2;
298 std::memmove(dest, src, nmove*
sizeof(T));
300 dataptr_[insertPoint] = item;
301 dataptr_[insertPoint+1] = item+1;
303 return(std::pair<const_iterator,bool>(
const_iterator(
this, item, insertPoint),
true));
307 return(std::pair<const_iterator,bool>(
const_iterator(
this, item, insertPoint-1),
false));
314 if (len_+2 > highwatermark_) {
315 highwatermark_ += alloc_incr_;
316 expand_dataptr(highwatermark_);
319 dataptr_[insertPoint] = item;
320 dataptr_[insertPoint+1] = item+1;
322 return(std::pair<const_iterator,bool>(
const_iterator(
this, item, insertPoint),
true));
329 highwatermark_ = alloc_incr_;
330 expand_dataptr(highwatermark_);
332 dataptr_[1] = item+1;
339 if (insertPoint < len_) {
366 if (insertPoint%2==0) {
367 switch(dataptr_[insertPoint]-item) {
370 --dataptr_[insertPoint];
375 int nmove = len_-insertPoint;
376 if (len_+2 > highwatermark_) {
377 highwatermark_ += alloc_incr_;
378 expand_dataptr(highwatermark_);
382 T* dest = dataptr_+insertPoint+2;
384 std::memmove(dest, src, nmove*
sizeof(T));
386 dataptr_[insertPoint] = item;
387 dataptr_[insertPoint+1] = item+1;
392 if (dataptr_[insertPoint] == item) {
394 ++dataptr_[insertPoint];
397 if (insertPoint < len_-1 &&
398 dataptr_[insertPoint] == dataptr_[insertPoint+1]) {
399 dataptr_[insertPoint] = dataptr_[insertPoint+2];
401 int nmove=len_-insertPoint-1;
403 T* dest = dataptr_+insertPoint+1;
405 std::memmove(dest, src, nmove*
sizeof(T));
417 if (len_+2 > highwatermark_) {
418 highwatermark_ += alloc_incr_;
419 expand_dataptr(highwatermark_);
421 dataptr_[insertPoint] = item;
422 dataptr_[insertPoint+1] = item+1;