* Bug #7649 fixed: isempty() on struct(), {} or list(,) returned %F
[scilab.git] / scilab / modules / elementary_functions / macros / isempty.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 1998 - INRIA
3 // Copyright (C) DIGITEO - 2011-2012 - Allan CORNET
4 // Copyright (C) 2016 - Samuel GOUGEON
5 //
6 // Copyright (C) 2012 - 2016 - Scilab Enterprises
7 //
8 // This file is hereby licensed under the terms of the GNU GPL v2.0,
9 // pursuant to article 5.3.4 of the CeCILL v.2.1.
10 // This file was originally licensed under the terms of the CeCILL v2.1,
11 // and continues to be available under such terms.
12 // For more information, see the COPYING file which you should have received
13 // along with this program.
14
15 function answ = isempty(m)
16
17     rhs = argn(2);
18     if rhs <> 1 then
19         msg = gettext("%s: Wrong number of input argument(s): %d expected.\n")
20         error(msprintf(msg, "isempty", 1))
21     end
22
23     m_type = type(m);
24
25     if( (m_type >= 11) & (m_type <= 13) | (m_type >= 128) ) then
26         msg = gettext("%s: Wrong type for input argument #%d.\n")
27         error(msprintf(msg, "isempty", 1))
28     end
29
30     select m_type
31     case 1
32         answ = m == [];
33     case 10
34         // matrix of character string
35         answ = ( max(length(m)) == 0 );
36
37     case 15
38         // list
39         answ = %t;
40         for i = 1:size(m),
41             answ = answ & (type(m(i))==0 || isempty(m(i)))
42             if ~answ
43                 break
44             end
45         end;
46
47     case 16
48         // typed list
49         if typeof(m) == "rational" then
50             answ = size(m, "*") == 0;
51         else
52             answ = %t;
53             for i = 2:size(m,"*")
54                 answ = answ & (type(m(i))==0 || isempty(m(i)))
55                 if ~answ
56                     break
57                 end
58             end
59         end
60
61     case 17
62         // mlist
63         answ = %t
64         if typeof(m)=="ce"      // array of cells
65             if size(m,"*")==1
66                 answ = answ & isempty(m{1})
67             else
68                 n = size(m,"*")
69                 for i = 1:n
70                     answ = answ & isempty(m(i))
71                     if ~answ
72                         break
73                     end
74                 end
75             end
76
77         elseif typeof(m)=="st"    // array of structures
78             fn = fieldnames(m)
79             if size(m, "*")>0 && fn~=[]
80                 for f = fn(:)'
81                     answ = answ & isempty(m(f))
82                     if ~answ
83                         break
84                     end
85                 end
86             end
87         else                    // other types of mlist
88             answ = %f
89         end
90
91     else
92         if type(m)~=0
93             answ = size(m,"*")==0
94         else
95             answ = %t
96         end
97     end
98
99 endfunction