where : value returned was inverted.
[scilab.git] / scilab / modules / core / sci_gateway / cpp / sci_where.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2013 - scilab Enterprises - Cedric Delamarre
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 "core_gw.hxx"
14 #include "function.hxx"
15 #include "configvariable.hxx"
16 #include "double.hxx"
17 #include "string.hxx"
18
19 extern "C"
20 {
21 #include "localization.h"
22 #include "Scierror.h"
23 }
24
25 types::Function::ReturnValue sci_where(types::typed_list &in, int _iRetCount, types::typed_list &out)
26 {
27     if (in.size() != 0)
28     {
29         Scierror(77, _("%s: Wrong number of input argument(s): %d expected."), "where", 0);
30         return types::Function::Error;
31     }
32
33     if (_iRetCount != 2)
34     {
35         Scierror(78, _("%s: Wrong number of output argument(s): %d expected."), "where", 2);
36         return types::Function::Error;
37     }
38
39     std::list<std::pair<int, std::wstring> > lWhereAmI = ConfigVariable::getWhere();
40     if (lWhereAmI.size() == 1)
41     {
42         out.push_back(types::Double::Empty());
43         out.push_back(types::Double::Empty());
44         return types::Function::OK;
45     }
46
47     std::list<std::pair<int, std::wstring> >::const_iterator it;
48     types::Double* pDblLines = new types::Double(lWhereAmI.size() - 1, 1);
49     types::String* pStrNames = new types::String(lWhereAmI.size() - 1, 1);
50
51     it = lWhereAmI.begin();
52     pDblLines->set(0, (double)it->first);
53     it++;
54     for (int i = 0; it != lWhereAmI.end(); it++, i++)
55     {
56         pDblLines->set(i + 1, (double)(it->first));
57         pStrNames->set(i, it->second.c_str());
58     }
59
60     pStrNames->set(lWhereAmI.size() - 1, lWhereAmI.front().second.c_str());
61
62     out.push_back(pDblLines);
63     out.push_back(pStrNames);
64     return types::Function::OK;
65 }