* Bug #12774 fixed - Fix various typos.
[scilab.git] / scilab / modules / scicos / src / modelica_compiler / squareSparseMatrix.mli
1 (*
2  *  Modelicac
3  *
4  *  Copyright (C) 2005 - 2007 Imagine S.A.
5  *  For more information or commercial use please contact us at www.amesim.com
6  *
7  *  This program is free software; you can redistribute it and/or
8  *  modify it under the terms of the GNU General Public License
9  *  as published by the Free Software Foundation; either version 2
10  *  of the License, or (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  *
21  *)
22
23 (** This module implements a sparse representation of square matrices using
24 list associations. The retrieval of an element takes O(m) where m is the
25 number of elements on the current row that are not equal to the default
26 element (in the sense of the compare function provided by a module
27 furnishing matrix elements). *)
28
29 (* Functorial interface *)
30
31 (** The module type that specifies the interface of a suitable module
32 providing matrix elements. *)
33 module type MatrixElement =
34   sig
35     type t
36     val equal: t -> t -> bool
37   end
38
39 module type S =
40   sig
41     type elt
42     (** the type of the elements of the matrix *)
43     type t
44     (** the type of the sparse matrices        *)
45     val make: int -> elt -> t
46     (** [make size default] creates a square sparse matrix of
47     [size]*[size] elements whose default element is [default]. *)
48     val init: int -> elt -> (int -> int -> elt) -> t
49     (** [init size default f] creates a square sparse matrix of
50     [size]*[size] elements whose default element is [default] and whose
51     initial elements are given by [f] ([f i j] returns the element to be
52     placed at ([i], [j])). *)
53     val size: t -> int * int
54     (** [size mtrx] returns a couple whose first element is the number of
55     rows of [mtrx] and second element the number of columns. In this module
56     the two values are always equal, since matrices are square. *)
57     val get: t -> int -> int -> elt
58     (** [get mtrx i j] returns the element stored into [mtrx] at
59     ([i], [j])). *)
60     val set: t -> int -> int -> elt -> unit
61     (** [set mtrx i j elt] stores [elt] in [mtrx] at ([i], [j])). *)
62     val iter: (elt -> unit) -> t -> unit
63     (** [iter f mtrx] applies [f] in turn to all the elements of [mtrx].
64     Traversal is performed by iterating over the rows starting at 0. *)
65     val iterij: (int -> int -> elt -> unit) -> t -> unit
66     (** [iterij f mtrx] behaves like [iter f mtrx] except that f receives
67     the row index as first argument, the column index as second argument
68     and the current element as third argument. *)
69     val row_iter: int -> (elt -> unit) -> t -> unit
70     (** [row_iter i f mtrx] is a restriction of [iter f mtrx] to row
71     [i]. *)
72     val row_iterj: int -> (int -> elt -> unit) -> t -> unit
73     (** [row_iterj i f mtrx] is a restriction of [iterij f mtrx] to row
74     [i]. *)
75     val row_storage_iterj: int -> (int -> elt -> unit) -> t -> unit
76     (** [row_storage_iterj i f mtrx] is a restriction of
77     [row_iterj i f mtrx] to the elements effectively stored into the matrix,
78     in an unspecified order. Provided for efficiency. *)
79     val update_row_storage: int -> (int -> elt -> elt) -> t -> unit
80     (** [update_row_storage i f mtrx] replaces the elements effectively
81     stored into [mtrx] at row [i] by the results of [f] applyied to the
82     current column index as first argument and the current element as
83     second argument, in an unspecified order. Provided for efficiency. *)
84     val column_iter: int -> (elt -> unit) -> t -> unit
85     (** [column_iter j f mtrx] is a restriction of [iter f mtrx] to
86     column [j]. *)
87     val column_iteri: int -> (int -> elt -> unit) -> t -> unit
88     (** [column_iteri j f mtrx] is a restriction of [iterij f mtrx] to
89     column [j]. *)
90     val column_storage_iteri: int -> (int -> elt -> unit) -> t -> unit
91     (** [column_storage_iteri j f mtrx] is a restriction of
92     [column_iteri j f mtrx] to the elements effectively stored into the
93     matrix, in an unspecified order. Provided for efficiency. *)
94     val update_column_storage: int -> (int -> elt -> elt) -> t -> unit
95     (** [update_column_storage j f mtrx] replaces the elements effectively
96     stored into [mtrx] at column [j] by the results of [f] applyied to the
97     current row index as first argument and the current element as
98     second argument, in an unspecified order. Provided for efficiency. *)
99   end
100
101 module Make (M: MatrixElement): (S with type elt = M.t)