(* Ce module fournit des opérations efficaces sur un ensemble partitionné en un nombre fixe de partitions, mais dont les éléments peuvent être ajoutés ou déplacés d'une partition à une autre. Dans chaque partition les élèments sont ordonnés par leur insertion dans la partition par (create ou move). L'ajout, le déplacement ou la consultation d'un élément d'une partition sont en temps amorti constant. *) type 'a t type 'a elem val make : int -> 'a t array (* make n créer un vecteur de partitions *) val clear : 'a t -> unit (* "clear s" efface la partition s *) val create : 'a t -> 'a -> 'a elem (* "create s e" créer un élément e dans la partition s *) val info : 'a elem -> 'a (* "info e" retourne les informations sur l'élément e *) val eq : 'a elem -> 'a elem -> bool val belong : 'a elem -> 'a t -> bool (* "belong e s" test si e est dans la patition s *) val move : 'a elem -> 'a t -> unit (* "move e s" retire e de sa partition courante et le place en tête de la partition s *) val pick : 'a t -> 'a elem (* "pick s" retire l'élèment en tête de la partition t *) val list : 'a t -> 'a elem list (* "list s" retourne la liste des éléments de la partition s dans l'ordre en temps linéaire *) val pick_lowest : ('a elem -> 'b) -> 'a t -> 'a elem (* "pick_lowest cost" retourne un élément minimal pour la fonction de coût "cost" en temps linéaire pour une fonction de coût en temps constant *) (* opération en temps O(n log n) *) val sort : ('a elem -> 'a elem -> bool) -> 'a t -> unit (* "sort f s" réordonne les éléments dans la partition selon la fonction d'ordre "f" *) (* opération utile pour débugging *) val parent : 'a elem -> 'a t