-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
using namespace std;
static int getUniqueIdentifier();
class PanierDAchats;
class Commande {
public:
explicit Commande(function<void(PanierDAchats *)> methode)
: methode(methode) {}
void executer(PanierDAchats *panierCible) { panierCible->methode(); }
private:
function<void()> methode
};
class PanierDAchats {
public:
void ajouter(int ISBN, int nombreDExemplaires);
void supprimer(int ISBN, int nombreDExemplaires);
void mettreAJour(Commande commande) { this }
private:
// tuple est composé du ISBN, nombre de liver et identifiant unique.
vector<tuple<int, int, int>> etat;
void supprimer(int ISBN);
// méthodes réseau
void envoyerMiseAJour(Commande commande);
void envoyerMiseAourEtAttendreSynchronisation(Commande commande);
};
PanierDAchats::ajouter(int ISBN, int nombreDExemplaires) {
etat.push_back(make_tuple(ISBN, nombreDExemplaires, getUniqueIdentifier()));
envoyerMiseAJour(
Commande(bind(PanierDAchats::ajouter, ISBN, nombreDExemplaires)));
}
PanierDAchats::supprimer(int ISBN, int nombreDExemplaires) {
auto ancienNombreDExmplaires = 0;
for (element : etat) {
if (get<0>(element) == ISBN) {
++ancienNombreDExmplaires;
}
}
auto nouveauNombreDExemplaires = ancienNombreDExmplaires - nombreDExemplaires;
assert(nouveauNombreDExemplaires >= 0);
supprimer(ISBN);
envoyerMiseAourEtAttendreSynchronisation(
Commande(bind(PanierDAchats::ajouter, ISBN)));
if (nouveauNombreDExemplaires == 0) {
return;
}
// nouveauNombreDExemplaires > 0
ajouter(ISBN, nouveauNombreDExemplaires);
envoyerMiseAJour(
Commande(bind(PanierDAchats::ajouter, ISBN, nouveauNombreDExemplaires))
}
PanierDAchats::supprimer(int ISBN) {
auto isbnMatches =
[ISBN](tuple<int, int, int> element) { return get<1>(element) == ISBN; };
auto it = find_if(etat.begin(), etat.end(), isbnMatches);
while (it != etat.end()) {
etat.remove(it);
it = find_if(etat.begin(), etat.end(), isbnMatches);
}
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels