91edf2af746b8d5a134f73bfe765dba76f0f5e7a
[scilab.git] / scilab / modules / elementary_functions / macros / vectorfind.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) 2010 - DIGITEO - Vincent COUVERT
4 //
5 // Copyright (C) 2012 - 2016 - Scilab Enterprises
6 //
7 // This file is hereby licensed under the terms of the GNU GPL v2.0,
8 // pursuant to article 5.3.4 of the CeCILL v.2.1.
9 // This file was originally licensed under the terms of the CeCILL v2.1,
10 // and continues to be available under such terms.
11 // For more information, see the COPYING file which you should have received
12 // along with this program.
13
14 function ind=vectorfind(m,v,job)
15
16     rhs = argn(2);
17
18     // Check number of inputs, at least 2 needed
19     if rhs < 2 then
20         error(msprintf(gettext("%s: Wrong number of input arguments: %d or %d expected.\n"), "vectorfind", 2, 3));
21     end
22
23     // Set default value for job if not given
24     if rhs == 2 then
25         job = "r";
26     end
27
28     // Check that m and v have the same type
29     if typeof(m) <> typeof(v) then
30         error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same type expected.\n"), "vectorfind", 1, 2));
31     end
32
33     if min(size(v))<>1 then
34         error(msprintf(gettext("%s: Wrong size for input argument #%d: Vector expected.\n"),"vectorfind",2));
35     end
36
37     if convstr(part(job,1))=="r" then
38         if size(v,"*")<>size(m,2) then
39             error(msprintf(gettext("%s: Wrong size for input arguments: Incompatible sizes.\n"),"vectorfind"));
40         end
41         ind=1:size(m,1)
42         for k=1:size(m,2)
43             ind=ind(find(m(ind,k)==v(k)));
44             if ind==[] then
45                 break
46             end
47         end
48     elseif convstr(part(job,1))=="c" then
49         if size(v,"*")<>size(m,1) then
50             error(msprintf(gettext("%s: Wrong size for input arguments: Incompatible sizes.\n"),"vectorfind"));
51         end
52         ind=1:size(m,2)
53         for k=1:size(m,1)
54             ind=ind(find(m(k,ind)==v(k)))
55             if ind==[] then
56                 break
57             end
58         end
59     else
60         error(msprintf(gettext("%s: Wrong value for input argument #%d: ''%s'' or ''%s'' expected.\n"),"vectorfind",3,"r[ow]","c[olumn]"));
61     end
62 endfunction
63