module CudfAdd

: sig

Library of additional functions for the CUDF format.

Basic comparison operations for packages

val equal : Cudf.package -> Cudf.package -> bool

Equality test: two CUDF packages are equal if their names and versions are equal.

val compare : Cudf.package -> Cudf.package -> int

Compare function: compares two CUDF packages using standard CUDF comparison operator (i.e. comparing by their name and version).

Specialized data structures for CUDF packages

val hash : Cudf.package -> int

A hash function for CUDF packages, using only their name and version.

val sort : Cudf.package list -> Cudf.package list

Sort function: sorts a CUDF packages list using the standard CUDF comparison operator in ascending order

Data structures:

module Cudf_hashtbl : Hashtbl.S with type key = Cudf.package

Specialized hashtable for CUDF packages.

module Cudf_set : Set.S with type elt = Cudf.package

Specialized set data structure for CUDF packages.

val to_set : Cudf_set.elt list -> Cudf_set.t

Convert a list of CUDF packages to a set of CUDF packages.

Extended function on Cudf data types

val who_provides : Cudf.universe -> Cudf_types.vpkg -> Cudf.package list

Return the list of packages that that respect the given constraint

val resolve_deps : Cudf.universe -> Cudf_types.vpkglist -> Cudf.package list

Return the list of packages satisfying the vpkg list

val who_depends : Cudf.universe -> Cudf.package -> Cudf.package list list

Returns the list of packages that are dependencies of the given package

type ctable = (int, int list Pervasives.ref) ExtLib.Hashtbl.t

A table to associate to each id the list of packages id that are in conflict with it. Reflexive conflicts are made explicit.

val init_conflicts : Cudf.universe -> ctable

Create a ctable from a package universe

val who_conflicts : ctable -> Cudf.universe -> Cudf.package -> Cudf.package list

Return the list of packages in conflict with the given package

val resolve_vpkg_int : Cudf.universe -> Cudf_types.vpkg -> int list

Like who_provides but returns a list of cudf ids

val resolve_vpkgs_int : Cudf.universe -> Cudf_types.vpkglist -> int list

Like resolve_deps but returns a list of cudf ids

Functions to encode and decode strings.

val encode : string -> string

Encode a string.

Replaces all the "not allowed" characters with their ASCII code (in hexadecimal format), prefixed with a '%' sign.

Only "allowed" characters are letters, numbers and these: @/+().-, all the others are replaced.


  • encode "ab" = "ab"
  • encode "|" = "%7c"
  • encode "a|b" = "a%7cb"
val decode : string -> string

Decode a string. Opposite of the encode function.

Replaces all the encoded "not allowed" characters in the string by their original (i.e. not encoded) versions.


  • decode "ab" = "ab"
  • decode "%7c" = "|"
  • decode "a%7cb" = "a|b"

Formatting, printing, converting to string.

val string_of : (Format.formatter -> 'a -> 'b) -> 'a -> string
val pp_version : Format.formatter -> Cudf.package -> unit
val pp_package : Format.formatter -> Cudf.package -> unit
val string_of_version : Cudf.package -> string

return a string containg either the value of the optional field "number" or the cudf version

val string_of_package : Cudf.package -> string

return a string of the form "name ( = version)"

Additional functions on the CUDF data types.

val latest : Cudf.package list -> Cudf.package list

Returns a list of packages containing for each package only the latest version

module StringSet : Set.S with type elt = ExtLib.String.t

Set of strings

val pkgnames : Cudf.universe -> StringSet.t

Returns the set of all names in the given universe

val add_properties : Cudf.preamble -> Cudf_types.typedecl -> Cudf.preamble

Add a new property to the given cudf preamble

val get_property : string -> Cudf.package -> string

return the value of the requested property. emit a warning and raise Not_found if the property does not exists

val is_essential : Cudf.package -> bool

Returns true if the package is essential, that is the cudf package has a extra property named "essential" and its value is "yes"

val realversionmap : Cudf.package list -> (Cudf_types.pkgname * string, Cudf.package) ExtLib.Hashtbl.t

build a hash table that associates (package name, String version) to CUDF packages

val vartoint : Cudf.universe -> Cudf.package -> int

Return the unique cudf id of a package in a universe

val inttovar : Cudf.universe -> int -> Cudf.package

Given a universe and a cudf id returns the corresponding package. Raise Not_found if the id does not correspond to a package.

val cudfop : (string * string) option -> ([>
| `Eq
| `Neq
| `Geq
| `Gt
| `Leq
| `Lt
] * string) option
val pp : (Cudf_types.pkgname * Cudf_types.version -> 'a * Cudf_types.pkgname) -> ?decode:(Cudf_types.pkgname -> string) -> Cudf.package -> string * string * (string * string) list

pp ?decode from_cudf pkg package pretty printer. from_cudf a function that gets a (name,cudfversion) pair and returns a (name,realversion). ?decode a function that decode the package name and version

returns : a pair (name,versiom,property list)

note that if the package has version less then 0, then the version is printed as "nan"

val compute_pool : Cudf.universe -> int list list array * int list array
val add_to_package_list : ('a, 'b list Pervasives.ref) ExtLib.Hashtbl.t -> 'a -> 'b -> unit
val get_package_list : ('a, 'b list Pervasives.ref) ExtLib.Hashtbl.t -> 'a -> 'b list
val normalize_set : int list -> int list

normalize_set l returns the list l without any duplicate element.