### 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 : ?asc:bool -> 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 : Stdlib.Hashtbl.S with type key = Cudf.package`

Specialized hashtable for CUDF packages.

`module Cudf_set : Stdlib.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 Stdlib.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.

Examples:

- `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.

Examples:

- `decode "ab" = "ab"`
- `decode "%7c" = "|"`
- `decode "a%7cb" = "a|b"`

### Additional functions on the CUDF data types.

`val latest : ?n:int -> Cudf.package list -> Cudf.package list`

Returns a list of packages containing for each package `n` most recent version (default the latest version)

`module StringSet : Stdlib.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 exist

`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 pkgtoint : Cudf.universe -> Cudf.package -> int`

Return the unique cudf id of a package in a universe

`val inttopkg : 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 compute_pool : Cudf.universe -> int list list array * int list array`
`val add_to_package_list : ('a, 'b list Stdlib.ref) ExtLib.Hashtbl.t -> 'a -> 'b -> unit`
`val get_package_list : ('a, 'b list Stdlib.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.

`val is_nan_version : int -> bool`

Check if a CUDF version is nan

`val nan_version : int`

Version constant for impossible constraint

### Formatting, printing, converting to string.

`val string_of : (Stdlib.Format.formatter -> 'a -> 'b) -> 'a -> string`
`val pp_version : Stdlib.Format.formatter -> Cudf.package -> unit`
`val pp_package : Stdlib.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)"

`type pp = Cudf.package -> string * string option * string * (string * (string * bool)) list`
`val pp : ((Cudf_types.pkgname * Cudf_types.version) -> string * string option * string) -> ?fields:string list -> ?decode:(Cudf_types.pkgname -> string) -> pp`

`pp ?decode from_cudf pkg` package pretty printer. `from_cudf` a function that gets a (name,cudfversion) pair and returns a (name,realversion). `?fields` additional fields to print. `?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 default_pp : pp`

`default_pp` default package printer. Extracts string values from a cudf package : Name, Version, Fields. Where Fields is a list of field name , value pairs . If the version of the package is a negative number, the version version if printed as "nan".

`val pp_vpkg : pp -> Stdlib.Format.formatter -> Cudf_types.vpkg -> unit`

cudf vpkglist printer.

`val pp_vpkglist : pp -> Stdlib.Format.formatter -> Cudf_types.vpkglist -> unit`

cudf vpkglist printer.

`val cone : Cudf.universe -> Cudf.package list -> Cudf.package list`

Compute the depenency cone of a list of packages