Use hxx extensions instead of hpp
[scilab.git] / scilab / modules / xml / sci_gateway / cpp / sci_percent_XMLList_size.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - Scilab Enterprises - Calixte DENIZET
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 #include "XMLObject.hxx"
14 #include "XMLList.hxx"
15
16 extern "C"
17 {
18 #include "gw_xml.h"
19 #include "Scierror.h"
20 #include "api_scilab.h"
21 #include "xml_mlist.h"
22 #include "localization.h"
23 #include <string.h>
24 }
25
26 using namespace org_modules_xml;
27
28 /*--------------------------------------------------------------------------*/
29 int sci_percent_XMLList_size(char *fname, unsigned long fname_len)
30 {
31     int id;
32     SciErr err;
33     double d[2] = { 1, 0 };
34     int * addr = 0;
35     XMLList * list;
36     int size;
37     char * option = 0;
38
39     CheckLhs(1, 1);
40     CheckRhs(1, 2);
41
42     err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
43     if (err.iErr)
44     {
45         printError(&err, 0);
46         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
47         return 0;
48     }
49
50     if (!isXMLList(addr, pvApiCtx) && !isXMLSet(addr, pvApiCtx))
51     {
52         Scierror(999, gettext("%s: Wrong type for input argument #%d: XMLList or XMLSet expected.\n"), fname, 1);
53         return 0;
54     }
55
56     id = getXMLObjectId(addr, pvApiCtx);
57     list = XMLObject::getFromId<XMLList>(id);
58     if (!list)
59     {
60         Scierror(999, gettext("%s: XMLList does not exist.\n"), fname);
61         return 0;
62     }
63
64     if (Rhs == 2)
65     {
66         err = getVarAddressFromPosition(pvApiCtx, 2, &addr);
67         if (err.iErr)
68         {
69             printError(&err, 0);
70             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2);
71             return 0;
72         }
73
74         if (!isStringType(pvApiCtx, addr) || !checkVarDimension(pvApiCtx, addr, 1, 1))
75         {
76             Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
77             return 0;
78         }
79         if (getAllocatedSingleString(pvApiCtx, addr, &option) != 0)
80         {
81             Scierror(999, _("%s: No more memory.\n"), fname);
82             return 0;
83         }
84
85         if (strcmp(option, "r") && strcmp(option, "c") && strcmp(option, "*"))
86         {
87             freeAllocatedSingleString(option);
88             Scierror(44, _("%s: Wrong value for input argument #%d: '%s', '%s' or '%s' expected.\n"), fname, 2, "r", "c", "*");
89             return 0;
90         }
91     }
92
93     size = (int)list->getSize();
94     if (Rhs == 1)
95     {
96         d[1] = size;
97         if (size == 0)
98         {
99             d[0] = 0;
100         }
101         err = createMatrixOfDouble(pvApiCtx, Rhs + 1, 1, 2, d);
102     }
103     else
104     {
105         if (option[0] == 'r')
106         {
107             if (size == 0)
108             {
109                 d[0] = 0;
110             }
111         }
112         else
113         {
114             d[0] = size;
115         }
116         freeAllocatedSingleString(option);
117         err = createMatrixOfDouble(pvApiCtx, Rhs + 1, 1, 1, d);
118     }
119
120     if (err.iErr)
121     {
122         printError(&err, 0);
123         Scierror(999, _("%s: Memory allocation error.\n"), fname);
124         return 0;
125     }
126
127     LhsVar(1) = Rhs + 1;
128     PutLhsVar();
129     return 0;
130 }
131
132 /*--------------------------------------------------------------------------*/