* Bug 16365 fixed: median(m,'r'|'c') was wrong after 5dc990
[scilab.git] / scilab / modules / string / sci_gateway / cpp / sci_isdigit.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2013 - Scilab Enterprises - Cedric Delamarre
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 */
15
16 #include "string_gw.hxx"
17 #include "function.hxx"
18 #include "string.hxx"
19 #include "double.hxx"
20 #include "bool.hxx"
21
22 extern "C"
23 {
24 #include "sci_malloc.h"
25 #include "Scierror.h"
26 #include "localization.h"
27 #include "isdigit.h"
28 }
29
30 types::Function::ReturnValue sci_isdigit(types::typed_list &in, int _iRetCount, types::typed_list &out)
31 {
32     types::String* pStrIn   = NULL;
33     types::Bool* pBOut      = NULL;
34     wchar_t* wcstrIn        = NULL;
35     int iResultSize         = 0;
36
37     if (in.size() != 1)
38     {
39         Scierror(999, _("%s: Wrong number of input arguments: %d expected.\n"), "isdigit", 1);
40         return types::Function::Error;
41     }
42
43     if (_iRetCount > 1)
44     {
45         Scierror(999, _("%s: Wrong number of output arguments: %d expected.\n"), "isdigit", 1);
46         return types::Function::Error;
47     }
48
49     if (in[0]->isString() == false)
50     {
51         Scierror(999, _("%s: Wrong type for input argument #%d: A String expected.\n"), "isdigit", 1);
52         return types::Function::Error;
53     }
54
55     pStrIn = in[0]->getAs<types::String>();
56
57     if (pStrIn->isScalar() == false)
58     {
59         Scierror(999, _("%s: Wrong type for input argument #%d: A scalar String expected.\n"), "isdigit", 1);
60         return types::Function::Error;
61     }
62
63     wcstrIn = pStrIn->get(0);
64     int* pbResult = (int*)IsDigitW(wcstrIn, &iResultSize);
65     if (pbResult == NULL)
66     {
67         out.push_back(types::Double::Empty());
68         return types::Function::OK;
69     }
70
71     pBOut = new types::Bool(1, iResultSize);
72     pBOut->set(pbResult);
73     FREE(pbResult);
74     out.push_back(pBOut);
75
76     return types::Function::OK;
77 }
78 /*-------------------------------------------------------------------------------------*/