diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2009-04-17 05:22:20 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2009-04-17 05:22:20 +0000 |
| commit | 3b880d8aca618f2a288826543bc8ac51ccd0bee7 (patch) | |
| tree | df0f14cf14f8eec7f75d4e65a35ba510fa23ef7f | |
| parent | 44057a75ef001bfd1919e2169ec3f7f355d14c20 (diff) | |
| download | libbu++-3b880d8aca618f2a288826543bc8ac51ccd0bee7.tar.gz libbu++-3b880d8aca618f2a288826543bc8ac51ccd0bee7.tar.bz2 libbu++-3b880d8aca618f2a288826543bc8ac51ccd0bee7.tar.xz libbu++-3b880d8aca618f2a288826543bc8ac51ccd0bee7.zip | |
More updates to the Bu::List::iterator and Bu::List::const_iterator, assignemnt
now works correctly, and they don't worry about which list they're assosiated
with. Better errors too.
Diffstat (limited to '')
| -rw-r--r-- | src/list.h | 100 |
1 files changed, 36 insertions, 64 deletions
| @@ -288,30 +288,20 @@ namespace Bu | |||
| 288 | friend class List<value, cmpfunc, valuealloc, linkalloc>; | 288 | friend class List<value, cmpfunc, valuealloc, linkalloc>; |
| 289 | private: | 289 | private: |
| 290 | Link *pLink; | 290 | Link *pLink; |
| 291 | MyType *pList; | ||
| 292 | bool bOffFront; | ||
| 293 | iterator( MyType *pList ) : | ||
| 294 | pLink( NULL ), | ||
| 295 | pList( pList ) | ||
| 296 | { | ||
| 297 | } | ||
| 298 | 291 | ||
| 299 | iterator( Link *pLink, MyType *pList ) : | 292 | iterator( Link *pLink ) : |
| 300 | pLink( pLink ), | 293 | pLink( pLink ) |
| 301 | pList( pList ) | ||
| 302 | { | 294 | { |
| 303 | } | 295 | } |
| 304 | 296 | ||
| 305 | public: | 297 | public: |
| 306 | iterator() : | 298 | iterator() : |
| 307 | pLink( NULL ), | 299 | pLink( NULL ) |
| 308 | pList( NULL ) | ||
| 309 | { | 300 | { |
| 310 | } | 301 | } |
| 311 | 302 | ||
| 312 | iterator( const iterator &i ) : | 303 | iterator( const iterator &i ) : |
| 313 | pLink( i.pLink ), | 304 | pLink( i.pLink ) |
| 314 | pList( i.pList ) | ||
| 315 | { | 305 | { |
| 316 | } | 306 | } |
| 317 | 307 | ||
| @@ -376,40 +366,36 @@ namespace Bu | |||
| 376 | iterator &operator++() | 366 | iterator &operator++() |
| 377 | { | 367 | { |
| 378 | if( pLink == NULL ) | 368 | if( pLink == NULL ) |
| 379 | pLink = (bOffFront)?(pList->pFirst):(NULL); | 369 | throw Bu::ExceptionBase( |
| 380 | else | 370 | "Attempt to iterate past end of list."); |
| 381 | pLink = pLink->pNext; | 371 | pLink = pLink->pNext; |
| 382 | bOffFront = false; | ||
| 383 | return *this; | 372 | return *this; |
| 384 | } | 373 | } |
| 385 | 374 | ||
| 386 | iterator &operator--() | 375 | iterator &operator--() |
| 387 | { | 376 | { |
| 388 | if( pLink == NULL ) | 377 | if( pLink == NULL ) |
| 389 | pLink = (bOffFront)?(NULL):(pList->pLast); | 378 | throw Bu::ExceptionBase( |
| 390 | else | 379 | "Attempt to iterate past begining of list."); |
| 391 | pLink = pLink->pPrev; | 380 | pLink = pLink->pPrev; |
| 392 | bOffFront = true; | ||
| 393 | return *this; | 381 | return *this; |
| 394 | } | 382 | } |
| 395 | 383 | ||
| 396 | iterator &operator++( int ) | 384 | iterator &operator++( int ) |
| 397 | { | 385 | { |
| 398 | if( pLink == NULL ) | 386 | if( pLink == NULL ) |
| 399 | pLink = (bOffFront)?(pList->pFirst):(NULL); | 387 | throw Bu::ExceptionBase( |
| 400 | else | 388 | "Attempt to iterate past end of list."); |
| 401 | pLink = pLink->pNext; | 389 | pLink = pLink->pNext; |
| 402 | bOffFront = false; | ||
| 403 | return *this; | 390 | return *this; |
| 404 | } | 391 | } |
| 405 | 392 | ||
| 406 | iterator &operator--( int ) | 393 | iterator &operator--( int ) |
| 407 | { | 394 | { |
| 408 | if( pLink == NULL ) | 395 | if( pLink == NULL ) |
| 409 | pLink = (bOffFront)?(NULL):(pList->pLast); | 396 | throw Bu::ExceptionBase( |
| 410 | else | 397 | "Attempt to iterate past begining of list."); |
| 411 | pLink = pLink->pPrev; | 398 | pLink = pLink->pPrev; |
| 412 | bOffFront = true; | ||
| 413 | return *this; | 399 | return *this; |
| 414 | } | 400 | } |
| 415 | 401 | ||
| @@ -443,30 +429,20 @@ namespace Bu | |||
| 443 | friend class List<value, cmpfunc, valuealloc, linkalloc>; | 429 | friend class List<value, cmpfunc, valuealloc, linkalloc>; |
| 444 | private: | 430 | private: |
| 445 | Link *pLink; | 431 | Link *pLink; |
| 446 | const MyType *pList; | ||
| 447 | bool bOffFront; | ||
| 448 | const_iterator( const MyType *pList ) : | ||
| 449 | pLink( NULL ), | ||
| 450 | pList( pList ) | ||
| 451 | { | ||
| 452 | } | ||
| 453 | 432 | ||
| 454 | const_iterator( Link *pLink, const MyType *pList ) : | 433 | const_iterator( Link *pLink ) : |
| 455 | pLink( pLink ), | 434 | pLink( pLink ) |
| 456 | pList( pList ) | ||
| 457 | { | 435 | { |
| 458 | } | 436 | } |
| 459 | 437 | ||
| 460 | public: | 438 | public: |
| 461 | const_iterator() : | 439 | const_iterator() : |
| 462 | pLink( NULL ), | 440 | pLink( NULL ) |
| 463 | pList( NULL ) | ||
| 464 | { | 441 | { |
| 465 | } | 442 | } |
| 466 | 443 | ||
| 467 | const_iterator( const iterator &i ) : | 444 | const_iterator( const iterator &i ) : |
| 468 | pLink( i.pLink ), | 445 | pLink( i.pLink ) |
| 469 | pList( i.pList ) | ||
| 470 | { | 446 | { |
| 471 | } | 447 | } |
| 472 | 448 | ||
| @@ -503,40 +479,36 @@ namespace Bu | |||
| 503 | const_iterator &operator++() | 479 | const_iterator &operator++() |
| 504 | { | 480 | { |
| 505 | if( pLink == NULL ) | 481 | if( pLink == NULL ) |
| 506 | pLink = (bOffFront)?(pList->pFirst):(NULL); | 482 | throw Bu::ExceptionBase( |
| 507 | else | 483 | "Attempt to iterate past end of list."); |
| 508 | pLink = pLink->pNext; | 484 | pLink = pLink->pNext; |
| 509 | bOffFront = false; | ||
| 510 | return *this; | 485 | return *this; |
| 511 | } | 486 | } |
| 512 | 487 | ||
| 513 | const_iterator &operator--() | 488 | const_iterator &operator--() |
| 514 | { | 489 | { |
| 515 | if( pLink == NULL ) | 490 | if( pLink == NULL ) |
| 516 | pLink = (bOffFront)?(NULL):(pList->pLast); | 491 | throw Bu::ExceptionBase( |
| 517 | else | 492 | "Attempt to iterate past begining of list."); |
| 518 | pLink = pLink->pPrev; | 493 | pLink = pLink->pPrev; |
| 519 | bOffFront = true; | ||
| 520 | return *this; | 494 | return *this; |
| 521 | } | 495 | } |
| 522 | 496 | ||
| 523 | const_iterator &operator++( int ) | 497 | const_iterator &operator++( int ) |
| 524 | { | 498 | { |
| 525 | if( pLink == NULL ) | 499 | if( pLink == NULL ) |
| 526 | pLink = (bOffFront)?(pList->pFirst):(NULL); | 500 | throw Bu::ExceptionBase( |
| 527 | else | 501 | "Attempt to iterate past end of list."); |
| 528 | pLink = pLink->pNext; | 502 | pLink = pLink->pNext; |
| 529 | bOffFront = false; | ||
| 530 | return *this; | 503 | return *this; |
| 531 | } | 504 | } |
| 532 | 505 | ||
| 533 | const_iterator &operator--( int ) | 506 | const_iterator &operator--( int ) |
| 534 | { | 507 | { |
| 535 | if( pLink == NULL ) | 508 | if( pLink == NULL ) |
| 536 | pLink = (bOffFront)?(NULL):(pList->pLast); | 509 | throw Bu::ExceptionBase( |
| 537 | else | 510 | "Attempt to iterate past begining of list."); |
| 538 | pLink = pLink->pPrev; | 511 | pLink = pLink->pPrev; |
| 539 | bOffFront = true; | ||
| 540 | return *this; | 512 | return *this; |
| 541 | } | 513 | } |
| 542 | 514 | ||
| @@ -569,7 +541,7 @@ namespace Bu | |||
| 569 | */ | 541 | */ |
| 570 | iterator begin() | 542 | iterator begin() |
| 571 | { | 543 | { |
| 572 | return iterator( pFirst, this ); | 544 | return iterator( pFirst ); |
| 573 | } | 545 | } |
| 574 | 546 | ||
| 575 | /** | 547 | /** |
| @@ -578,7 +550,7 @@ namespace Bu | |||
| 578 | */ | 550 | */ |
| 579 | const_iterator begin() const | 551 | const_iterator begin() const |
| 580 | { | 552 | { |
| 581 | return const_iterator( pFirst, this ); | 553 | return const_iterator( pFirst ); |
| 582 | } | 554 | } |
| 583 | 555 | ||
| 584 | /** | 556 | /** |
| @@ -588,7 +560,7 @@ namespace Bu | |||
| 588 | */ | 560 | */ |
| 589 | const iterator end() | 561 | const iterator end() |
| 590 | { | 562 | { |
| 591 | return iterator( NULL, this ); | 563 | return iterator( NULL ); |
| 592 | } | 564 | } |
| 593 | 565 | ||
| 594 | /** | 566 | /** |
| @@ -598,7 +570,7 @@ namespace Bu | |||
| 598 | */ | 570 | */ |
| 599 | const const_iterator end() const | 571 | const const_iterator end() const |
| 600 | { | 572 | { |
| 601 | return const_iterator( NULL, this ); | 573 | return const_iterator( NULL ); |
| 602 | } | 574 | } |
| 603 | 575 | ||
| 604 | /** | 576 | /** |
