344dcb225cfe609549bde4eaef4d3afadea3c9e6
[scilab.git] / scilab / modules / elementary_functions / macros / flipdim.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA - Farid BELAHCENE
3 // Copyright (C) DIGITEO - 2011 - Allan CORNET
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10
11 function y = flipdim(x, dim)
12
13     // FLIPDIM function
14     // Given x, a scalar/vector/matix of reals and an integer dim, this function flips the x components  along the dimension number dim (x and y have the same size).
15     // -Inputs :
16     //  x : a scalar/vector/array of reals
17     //  dim : a positive integer
18     // -Output :
19     //  y : a scalar/vector/array of reals
20     //
21     // F.Belahcene
22
23     rhs = argn(2);
24     if rhs <> 2 then
25         error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"flipdim", 2));
26     end
27
28     if size(dim,"*")<>1 then
29         error(msprintf(gettext("%s: Wrong size for input argument #%d: A positive integer expected.\n"),"flipdim",2));
30     elseif type(dim)<>8 & (type(dim)<>1 | dim<1) then
31         error(msprintf(gettext("%s: Wrong type for input argument #%d: A positive integer expected.\n"),"flipdim",2));
32     end
33
34     if ndims(x)==2 & type(x)<>1 then
35         error(msprintf(gettext("%s: Wrong value for input argument #%d: Real matrix expected.\n"),"flipdim",1));
36     elseif ndims(x)>2 & type(x.entries)<>1
37         error(msprintf(gettext("%s: Wrong value for input argument #%d: Real matrix expected.\n"),"flipdim",1));
38     end
39
40     dim = floor(dim);
41
42     if dim > ndims(x)
43         y = x;
44         return
45     end
46
47     l = list();
48     for k = 1:dim - 1
49         l(k) = eye();
50     end
51     l(dim) = $:-1:1
52     for k = dim + 1:ndims(x)
53         l(k) = eye();
54     end
55
56     y = x(l(:));
57
58 endfunction