diff options
Diffstat (limited to 'src/list.h')
-rw-r--r-- | src/list.h | 62 |
1 files changed, 57 insertions, 5 deletions
@@ -178,11 +178,11 @@ namespace Bu | |||
178 | 178 | ||
179 | /** | 179 | /** |
180 | * Linked list template container. This class is similar to the stl list | 180 | * Linked list template container. This class is similar to the stl list |
181 | * class except for a few minor changes. First, it doesn't mimic a stack or | 181 | * class except for a few minor changes. First, when const, all |
182 | * queue, use the Stack or Queue clasess for that. Second, when const, all | 182 | * members are only accessable const. Second, erasing a location does not |
183 | * members are only accessable const. Third, erasing a location does not | 183 | * invalidate the iterator used, it simply points to the next valid |
184 | * invalidate the iterator, it simply points to the next valid location, or | 184 | * location, or end() if there are no more. Other iterators pointing to |
185 | * end() if there are no more. | 185 | * the deleted record will, of course, no longer be valid. |
186 | * | 186 | * |
187 | *@param value (typename) The type of data to store in your list | 187 | *@param value (typename) The type of data to store in your list |
188 | *@param valuealloc (typename) Memory Allocator for your value type | 188 | *@param valuealloc (typename) Memory Allocator for your value type |
@@ -506,6 +506,32 @@ namespace Bu | |||
506 | return *this; | 506 | return *this; |
507 | } | 507 | } |
508 | 508 | ||
509 | iterator operator+( int iDelta ) | ||
510 | { | ||
511 | iterator ret( *this ); | ||
512 | for( int j = 0; j < iDelta; j++ ) | ||
513 | { | ||
514 | if( ret.pLink == NULL ) | ||
515 | throw Bu::ExceptionBase( | ||
516 | "Attempt to iterate past begining of list."); | ||
517 | ret.pLink = ret.pLink->pNext; | ||
518 | } | ||
519 | return ret; | ||
520 | } | ||
521 | |||
522 | iterator operator-( int iDelta ) | ||
523 | { | ||
524 | iterator ret( *this ); | ||
525 | for( int j = 0; j < iDelta; j++ ) | ||
526 | { | ||
527 | if( ret.pLink == NULL ) | ||
528 | throw Bu::ExceptionBase( | ||
529 | "Attempt to iterate past begining of list."); | ||
530 | ret.pLink = ret.pLink->pPrev; | ||
531 | } | ||
532 | return ret; | ||
533 | } | ||
534 | |||
509 | operator bool() | 535 | operator bool() |
510 | { | 536 | { |
511 | return pLink != NULL; | 537 | return pLink != NULL; |
@@ -619,6 +645,32 @@ namespace Bu | |||
619 | return *this; | 645 | return *this; |
620 | } | 646 | } |
621 | 647 | ||
648 | const_iterator operator+( int iDelta ) | ||
649 | { | ||
650 | const_iterator ret( *this ); | ||
651 | for( int j = 0; j < iDelta; j++ ) | ||
652 | { | ||
653 | if( ret.pLink == NULL ) | ||
654 | throw Bu::ExceptionBase( | ||
655 | "Attempt to iterate past begining of list."); | ||
656 | ret.pLink = ret.pLink->pNext; | ||
657 | } | ||
658 | return ret; | ||
659 | } | ||
660 | |||
661 | const_iterator operator-( int iDelta ) | ||
662 | { | ||
663 | const_iterator ret( *this ); | ||
664 | for( int j = 0; j < iDelta; j++ ) | ||
665 | { | ||
666 | if( ret.pLink == NULL ) | ||
667 | throw Bu::ExceptionBase( | ||
668 | "Attempt to iterate past begining of list."); | ||
669 | ret.pLink = ret.pLink->pPrev; | ||
670 | } | ||
671 | return ret; | ||
672 | } | ||
673 | |||
622 | const_iterator &operator=( const iterator &oth ) | 674 | const_iterator &operator=( const iterator &oth ) |
623 | { | 675 | { |
624 | pLink = oth.pLink; | 676 | pLink = oth.pLink; |