1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab\r
2 // Copyright (C) DIGITEO - 2009 - Allan CORNET\r
3 // Copyrifht (C) 2012 - Scilab Enterprises - Adeline CARNIS\r
4 // \r
5 // This file must be used under the terms of the CeCILL.\r
6 // This source file is licensed as described in the file COPYING, which\r
7 // you should have received as part of this distribution.  The terms\r
8 // are also available at    \r
9 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt\r
10 \r
11 function A = %sp_gsort(A, optsort, directionsort)\r
12     rhs = argn(2);\r
13     select rhs\r
14     case 1\r
15         optsort = 'g';\r
16         directionsort = 'd';\r
17     case 2\r
18         directionsort = 'd';\r
19     end\r
20 \r
21     [ij, v, mn] = spget(A);\r
22 \r
23     if mn(1) <> 1 & mn(2) <> 1 then\r
24         error(999,msprintf(_("%s: Wrong size for input argument #%d: sparse vectors expected.\n"),'gsort',1));\r
25     end\r
26 \r
27     if (strcmp(optsort, 'c')) == 0 | v == [] then\r
28         A = A;\r
29     else\r
30         if mn(2) == 1 then\r
31             dif = mn(1) - length(v);\r
32             v = gsort(v, optsort, directionsort);\r
33             \r
34             last = find(v<0);\r
35             first = find(v>0);\r
36             \r
37             if last == [] & first <> [] then\r
38                 if strcmp(directionsort, 'i')== 0 then\r
39                     ij(:,1) = first(:) + dif;\r
40                 else\r
41                     ij(:,1) = first(:);\r
42                 end\r
43             elseif first == [] & last <> [] then\r
44                 ij(:,1) = last(:) + dif;\r
45             else\r
46                 if strcmp(directionsort, 'i')== 0 then\r
47                     ij(:,1) = [last(:); first(:) + dif];\r
48                 else\r
49                     ij(:,1) = [first(:); last(:) + dif];\r
50                 end\r
51             end\r
52             \r
53         elseif mn(1) == 1 then\r
54             dif = mn(2) - length(v);\r
55             v = gsort(v, optsort, directionsort);\r
56             \r
57             last = find(v<0);\r
58             first = find(v>0);\r
59             \r
60             if last == [] & first <> [] then\r
61                 if strcmp(directionsort, 'i')== 0 then\r
62                     ij(:,2) = first(:) + dif;\r
63                 else\r
64                     ij(:,2) = first(:);\r
65                 end\r
66             elseif first == [] & last <> [] then\r
67                 ij(:,1) = last(:) + dif;\r
68             else\r
69                 if strcmp(directionsort, 'i')== 0 then\r
70                     ij(:,2) = [last(:); first(:) + dif];\r
71                 else\r
72                     ij(:,2) = [first(:); last(:) + dif];\r
73                 end\r
74             end\r
75             \r
76         end\r
77         A = sparse(ij, v, mn)\r
78     end\r
79 \r
80 endfunction\r
81 \r
82 \r
83 \r\r