* Deactivate images generation during documentation build since graphics functions...
[scilab.git] / scilab / test / good / %_gsort.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) DIGITEO - 2009 - Allan CORNET
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 function [matrix_sorted, origin_indices] = %_gsort(matrix_to_sort, sort_type, sort_direction)
11
12   if ~isdef('matrix_to_sort') then
13     matrix_to_sort = [];
14     return
15   end
16
17   if type(matrix_to_sort) <> 1 then 
18     error(999,msprintf(_("%s: Wrong type for input argument #%d: A matrix expected.\n"),'gsort',1));
19   end
20
21   if ~isdef('sort_type') then
22     sort_type = 'g';
23   end
24
25   if ~isdef('sort_direction') then
26     sort_direction = 'd';
27   end
28
29   if type(sort_type) <> 10 then 
30     error(999,msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"),'gsort',2));
31   end
32   
33   if type(sort_direction) <> 10 then 
34     error(999,msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"),'gsort',3));
35   end
36   
37   if size(sort_type,'*') <> 1 then
38     error(999,msprintf(_("%s: Wrong size for input argument #%d: A string expected.\n"),'gsort',2));
39   end 
40
41   if size(sort_direction,'*') <> 1 then
42     error(999,msprintf(_("%s: Wrong size for input argument #%d: A string expected.\n"),'gsort',3));
43   end 
44
45   if ~or(sort_type == ['g' 'r' 'c' 'lc' 'lr']) then
46     error(999,msprintf(_("%s: Wrong value for input argument #%d: [''g'' ''r'' ''c'' ''lc'' ''lr''] expected.\n"),'gsort',2));
47   end
48
49   if ~or(sort_direction == ['d' 'i']) then
50     error(999,msprintf(_("%s: Wrong value for input argument #%d: [''d'' ''i''] expected.\n"),'gsort',3));
51   end
52   
53   magnitude_matrix = abs(matrix_to_sort);
54   
55   
56   matrix_sorted = [];
57   origin_indices = [];
58   
59   [magnitude_sorted, origin_indices] = gsort(magnitude_matrix, sort_type, sort_direction);
60
61   if (sort_type == 'g') then
62     dimIn = size(matrix_to_sort);
63     matrix_sorted = matrix(matrix_to_sort(origin_indices), dimIn(1), dimIn(2));
64   end
65
66   if (sort_type == 'r') then
67     nr = size(matrix_to_sort, 'r');
68     nc = size(matrix_to_sort, 'c');
69     matrix_sorted = [];
70     for i = 1:nc ; 
71       matrix_sorted = [matrix_sorted, matrix(matrix_to_sort(origin_indices(:,i),i),nr,1)];
72     end 
73   end
74
75   if (sort_type == 'c') then
76     nr = size(matrix_to_sort, 'r');
77     nc = size(matrix_to_sort, 'c');
78     matrix_sorted = [];
79     for i=1:nr ; 
80       matrix_sorted = [matrix_sorted; matrix(matrix_to_sort(i,origin_indices(i,:)),1,nc)];
81     end 
82   end
83   
84   if (sort_type == 'lr') then
85     matrix_sorted = matrix_to_sort(origin_indices, :);
86   end
87   
88   if (sort_type == 'lc') then
89     matrix_sorted = matrix_to_sort(:, origin_indices);
90   end
91
92 endfunction