File: sci_sort.sci

package info (click to toggle)
scilab 5.2.2-9
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 334,832 kB
  • ctags: 52,586
  • sloc: xml: 526,945; ansic: 223,590; fortran: 163,080; java: 56,934; cpp: 33,840; tcl: 27,936; sh: 20,397; makefile: 9,908; ml: 9,451; perl: 1,323; cs: 614; lisp: 30
file content (138 lines) | stat: -rw-r--r-- 3,421 bytes parent folder | download | duplicates (2)
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