1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| Iterator & operator+=(size_t count){
/* l'utilisateur est un imbécile distrait : il n'y a aucun sens à avoir un code it+= -1 */
assert(count>=0 && " only positive value are accepted");
/* l'utilisateur est un imbécile distrait : il n'y a aucun sens à avoir un code it+= 0 */
assert(count > 0 && "no sens to use it+=0");
/* nous pourrions même aller plus loin et obliger l'utilisateur à utiliser l'incrémentation
* quand il veut passer au suivant
assert(count >1 && "why don't y make use of the ++ operator?");
*/
/* on va travailler sur une copie par sécurité */
Iterator copy{*this};
for(int c=0; c<count;++c){
/* l'utilisateur est un imbécile distrait, qui peut vouloir passer au 10 eme élément suivant alors qu'il n'y en a que 9 */
assert(copy.courant && "No more next element");
++copy;
}
/* si on arrive ici, copy correspond à un élément valide (ou, au pire, à l'élément renvoyé par end() ) */
courant = copy.courant;
return *this;
}
/* Le principe reste exactement le même pour l'opérateur -=... à ceci près qu'on décrémente l'itérateur au lieu de l'incrémenter
* Les même causes ayant les mêmes effet, je ne m'amuserai pas à copier les commentaires :D
*/
terator & operator+=(size_t count){
assert(count>=0 && " only positive value are accepted");
assert(count > 0 && "no sens to use it-=0");
/*
assert(count >1 && "why don't y make use of the -- operator?");
*/
Iterator copy{*this};
for(int c=0; c<count;++c){
assert(copy.courant && "No more previous element");
--copy;
}
courant = copy.courant;
return *this;
} |
Partager