7.2.6 Le push, le pop et le dépile

Tiens, ça me rappel le titre d'un film...

La fonction push ou comment sauvegarder une matrice :

1
2
3
4
5
6
7
8
9
10
11
12
13
bool Matrice4::push(){
	Matrice4 *newCase = new Matrice4;
	// Si l'allocation réussit
	if(newCase != 0){
		// Copie des valeurs dans la nouvelle case
		*newCase = *this;
		// On pointe sur la sauvegarde précédente
		newCase->p_sauvegardePrecedente = p_sauvegardePrecedente;
		// Redéfinition du sommet de la pile
		p_sauvegardePrecedente = newCase;
		return true;
	}else return false;
}

La fonction pop ou comment dégommer la sauvegarde d'une matrice :

1
2
3
4
5
6
7
8
9
10
11
12
13
bool Matrice4::pop(){
	Matrice4 *matriceTmp = p_sauvegardePrecedente;
	// Si la pile existe toujours
	if(matriceTmp != 0){
		// Copie des valeurs depuis la sauvegarde
		*this = *matriceTmp;
		// Redéfinition du sommet de la pile
		p_sauvegardePrecedente = matriceTmp->p_sauvegardePrecedente;
		matriceTmp->p_sauvegardePrecedente = 0;
		delete matriceTmp;
		return true;
	}else return false;
}

La fonction depiler ou comment dégommer toute les sauvegardes d'une matrice :

1
2
3
void Matrice4::depiler(){
	while(pop() != false);
}

Et oui, c'est pour cela qu'on à retourner un paramètre pour dire si la fonction à réussie ou pas.