1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution. The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
function [tree]=sci_sort(tree)
// M2SCI function
// Conversion function for Matlab sort()
// Input: tree = Matlab funcall tree
// Ouput: tree = Scilab equivalent for tree
// Emulation function: mtlb_sort()
// B = sort(A) or [B,IND] = sort(A)
if rhs==1 then
A = getrhs(tree)
tree.lhs(1).dims=A.dims
tree.lhs(1).type=A.type
if or(A.vtype==[String,Unknown]) then
tree.name="mtlb_sort"
elseif A.vtype==Boolean then
tree.name="gsort"
if is_a_vector(A) then
A = Funcall("bool2s",1,Rhs_tlist(A),list())
tree.rhs=Rhs_tlist(A,"g","i")
elseif not_a_vector(A) then
A = Funcall("bool2s",1,Rhs_tlist(A),list())
tree.rhs=Rhs_tlist(A,"r","i")
else
tree.name="mtlb_sort"
end
else
tree.name="gsort"
if is_a_vector(A) then
tree.rhs=Rhs_tlist(A,"g","i")
elseif not_a_vector(A) then
tree.rhs=Rhs_tlist(A,"r","i")
else
tree.name="mtlb_sort"
end
end
if lhs==2 then
tree.lhs(2).dims=A.dims
tree.lhs(2).type=Type(Double,Real)
end
// B = sort(A,dim) or [B,IND] = sort(A,dim)
elseif rhs==2
[A,dim] = getrhs(tree)
dim = convert2double(dim)
tree.rhs=Rhs_tlist(A,dim)
tree.lhs(1).dims=A.dims
tree.lhs(1).type=A.type
if size(A.dims)>2 then
set_infos(gettext("Scilab sort() and gsort() do not work with multidimensional arrays"))
else
name="gsort"
if typeof(dim)=="cste" then
if dim.value==1 then
dim=Cste("r")
elseif dim.value==2 then
dim=Cste("c")
else
name="mtlb_sort"
end
else
name="mtlb_sort"
end
if or(A.vtype==[String,Unknown]) then
name="mtlb_sort"
elseif A.vtype==Boolean then
A = Funcall("bool2s",1,Rhs_tlist(A),list())
tree.rhs=Rhs_tlist(A,dim,"i")
else
tree.rhs=Rhs_tlist(A,dim,"i")
end
tree.name=name
if lhs==2 then
tree.lhs(2).dims=A.dims
tree.lhs(2).type=Type(Double,Real)
end
end
elseif rhs==3
[A,dim,txt] = getrhs(tree)
dim = convert2double(dim)
tree.rhs=Rhs_tlist(A,dim,txt)
tree.lhs(1).dims=A.dims
tree.lhs(1).type=A.type
if size(A.dims)>2 then
set_infos(gettext("Scilab sort() and gsort() do not work with multidimensional arrays"))
else
name="gsort"
if typeof(dim)=="cste" then
if dim.value==1 then
dim=Cste("r")
elseif dim.value==2 then
dim=Cste("c")
else
name="mtlb_sort"
end
else
name="mtlb_sort"
end
if or(A.vtype==[String,Unknown]) then
name="mtlb_sort"
elseif A.vtype==Boolean then
A = Funcall("bool2s",1,Rhs_tlist(A),list())
tree.rhs(1)=A
end
if txt.vtype==String & txt.value=="ascend"
tree.rhs=Rhs_tlist(A,dim,"i")
elseif txt.vtype==String & txt.value=="descend"
tree.rhs=Rhs_tlist(A,dim,"d")
else
name="mtlb_sort"
end
tree.name=name
if lhs==2 then
tree.lhs(2).dims=A.dims
tree.lhs(2).type=Type(Double,Real)
end
end
end
endfunction
|