50719851f4c1cac3cb91675f86e7b29b0fe58fe2
[scilab.git] / scilab / modules / core / sci_gateway / cpp / sci_typename.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2010 - DIGITEO - Antoine ELIAS
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 "core_gw.hxx"
17 #include "double.hxx"
18 #include "string.hxx"
19 #include "function.hxx"
20
21 extern "C"
22 {
23 #include "Scierror.h"
24 #include "localization.h"
25 #include "elem_common.h"
26 }
27 /*--------------------------------------------------------------------------*/
28 #define NB_OF_TYPE 18
29 /*--------------------------------------------------------------------------*/
30 types::Function::ReturnValue sci_typename(types::typed_list &in, int _iRetCount, types::typed_list &out)
31 {
32     int iOne = 1;
33     const wchar_t* pstShortTypeName[NB_OF_TYPE] = {L"s", L"p", L"b", L"sp", L"spb", L"msp", L"i", L"h", L"c",
34                                                    L"m", L"mc", L"f", L"l", L"tl", L"ml", L"ptr", L"ip", L"fptr"
35                                                   };
36     double pstShortTypeNum[NB_OF_TYPE] = {1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 128, 129, 130};
37
38     /* Check the number of input argument */
39     if (in.size() != 0)
40     {
41         Scierror(77, _("%s: Wrong number of input arguments: %d expected.\n"), "typename" , 0);
42         return types::Function::Error;
43     }
44
45     /* Check the number of output argument */
46     if (_iRetCount > 2)
47     {
48         Scierror(78, _("%s: Wrong number of output argument(s): %d to %d expected.\n"), "typename", 1, 2);
49         return types::Function::Error;
50     }
51
52     if (in.size() == 0)
53     {
54         // get type number
55         types::Double* pDblOut = new types::Double(NB_OF_TYPE, 1);
56         double* pdblOut = pDblOut->get();
57         int iSize = NB_OF_TYPE;
58         C2F(dcopy)(&iSize, pstShortTypeNum, &iOne, pdblOut, &iOne);
59         out.push_back(pDblOut);
60
61         // get type name
62         types::String* pStrOut = new types::String(NB_OF_TYPE, 1);
63         for (int i = 0; i < NB_OF_TYPE; i++)
64         {
65             pStrOut->set(i, pstShortTypeName[i]);
66         }
67         out.push_back(pStrOut);
68     }
69
70     return types::Function::OK;
71 }
72 /*--------------------------------------------------------------------------*/