/// <summary> /// Compare la pile avec un objet tiers. /// </summary> /// <param name="obj">Objet traité.</param> /// <returns>true si les objets sont équivalents, false sinon.</returns> public override bool Equals(object obj) { IContractStack other = obj as IContractStack; if (other == null) { return(false); } return(Enumerable.SequenceEqual(this, other)); }
/// <summary> /// <see cref="IContractGroups{TContract}.Pull(IContractStack, TContract)" /> /// </summary> public void Pull(IContractStack key, TContract value) { if (ContainsKey(key)) { this[key].Remove(value); if (this[key].Count == 0) { Remove(key); } } }
/// <summary> /// <see cref="IContractGroups{TContract}.Push(IContractStack, TContract)" /> /// </summary> public void Push(IContractStack key, TContract value) { if (ContainsKey(key)) { // Ajout à une entrée pré-existante du tampon this[key].Add(value); } else { // Création d'une entrée dans le tampon var group = new ContractGroup <TContract>(value); Add(key, group); } }
/// <summary> /// Constructeur par copie. /// </summary> /// <param name="source">Liste d'origine.</param> public ContractStack(IContractStack source) : base(source) { }
/// <summary> /// Constructeur complémentant une pile pré-existante. /// </summary> /// <param name="parent">Pile parente.</param> /// <param name="current">Classe de groupage courante.</param> public ContractStack(IContractStack parent, IContractGrouper current) : base(parent) { Add(current); }