License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsVersionSort.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 // Internal function
14
15 // Tri un tableau de versions
16
17 function versions_out = atomsVersionSort( versions_in , direction )
18
19     rhs = argn(2);
20
21     // Check number of input arguments
22     // =========================================================================
23
24     if rhs <> 2 then
25         error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"atomsVersionSort",2));
26     end
27
28     // if versions_in == [], no need to continue
29     // =========================================================================
30
31     if versions_in == [] then
32         versions_out = [];
33         return;
34     end
35
36     // Check input parameters type
37     // =========================================================================
38
39     if type(versions_in) <> 10 then
40         error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsVersionSort",1));
41     end
42
43     if type(direction) <> 10 then
44         error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"),"atomsVersionSort",2));
45     end
46
47     // Check input parameters dimension
48     // =========================================================================
49
50     if size(direction,"*") <> 1 then
51         error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"),"atomsVersionSort",2));
52     end
53
54     // Check input parameters value
55     // =========================================================================
56     if and(direction<>["ASC";"DESC"]) then
57         error(msprintf(gettext("%s: Wrong value for input argument #%d: ""ASC"" or ""DESC"" expected.\n"),"atomsVersionSort",2));
58     end
59
60     // Output argument
61     // =========================================================================
62     versions_out = versions_in;
63
64     ASC  = (convstr(direction,"u") == "ASC");
65     DESC = ~ ASC;
66
67     // Now : action
68     // =========================================================================
69
70     for i=1:(size(versions_out,"*")-1)
71         for j=1:(size(versions_out,"*")-1)
72             if ASC & (atomsVersionCompare(versions_out(j),versions_out(j+1)) > 0) then
73                 tmp               = versions_out(j+1);
74                 versions_out(j+1) = versions_out(j);
75                 versions_out(j)   = tmp;
76             elseif DESC & (atomsVersionCompare(versions_out(j),versions_out(j+1)) < 0) then
77                 tmp               = versions_out(j+1);
78                 versions_out(j+1) = versions_out(j);
79                 versions_out(j)   = tmp;
80             end
81         end
82     end
83
84     // Return a colum vector
85     // =========================================================================
86     versions_out = matrix(versions_out,-1,1);
87
88 endfunction