Skip to content

Untitled.cpp - Panier d'achats avec Set-OR #2

Description

@MartyLake
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);
  }
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions