<?php
namespace nur\sery\wip\php\access;

/**
 * Interface IAccess: abstraction d'un accès complet à une valeur
 */
interface IAccess extends IGetter, ISetter, IDeleter {
  /** incrémenter la valeur */
  function inc(): int;

  /** décrémenter la valeur */
  function dec(bool $allowNegative=false): int;

  /**
   * fusionner le tableau $values dans la destination, qui est transformée en
   * tableau d'abord si nécessaire
   */
  function merge(?array $values): void;

  /**
   * ajouter la valeur à la destination, qui est transformée en tableau d'abord
   * si nécessaire
   *
   * la valeur est ajoutée avec la clé $key le cas échéant, ou à la fin du
   * tableau si $key===null
   */
  function append($value, $key=null): void;
}