List extraction fixed.
[scilab.git] / scilab / modules / types / sci_gateway / cpp / sci_tlist_or_mlist.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
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-en.txt
10  *
11  */
12
13 #ifndef __SCI_TLIST_OR_MLIST_HXX__
14 #define __SCI_TLIST_OR_MLIST_HXX__
15
16 #include "string.hxx"
17 #include "double.hxx"
18 #include "funcmanager.hxx"
19
20 extern "C"
21 {
22 #include "Scierror.h"
23 #include "sci_malloc.h"
24 #include "localization.h"
25 #include "charEncoding.h"
26 }
27
28 using namespace types;
29
30 template <typename TorMList>
31 Function::ReturnValue sci_tlist_or_mlist(typed_list &in, int _piRetCount, typed_list &out, const wchar_t *_pstrFunName)
32 {
33     TorMList* pRetVal = NULL;
34
35     //check input parameters
36     if (in.size() < 1)
37     {
38         Scierror(999, _("%s: Wrong number of input arguments: At least %d expected.\n"), _pstrFunName , 1);
39         return Function::Error;
40     }
41
42     if (in[0]->isString() == false)
43     {
44         Scierror(999, _("%s: Wrong type for input argument #%d: String expected.\n"), _pstrFunName, 1);
45         return Function::Error;
46     }
47
48     //check uniqueness of fields name
49     String* pS = in[0]->getAs<types::String>();
50
51     //check for rational type
52     if (pS->getSize() > 0 && wcscmp(pS->get(0), L"r") == 0)
53     {
54         Scierror(999, _("%ls: Can not create a %ls with input argument #%d.\n"), _pstrFunName, _pstrFunName, 1);
55         return Function::Error;
56     }
57
58     pRetVal = new TorMList();
59     for (unsigned int i = 0 ; i < in.size() ; i++)
60     {
61         pRetVal->append(in[i]);
62     }
63
64     out.push_back(pRetVal);
65     return Function::OK;
66 }
67
68 #endif /* !__SCI_TLIST_OR_MLIST_HXX__ */