5ecf65cd425b650c90beb67e3b160da82f6827f5
[scilab.git] / scilab / modules / string / src / cpp / os_wtoi.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2020 - ESI Group - Clement DAVID
4  *  Copyright (C) 2014 - Scilab Enterprises - Cedric Delamarre
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 #include <sstream>
18 #include <string>
19 #include <iostream>
20
21 extern "C"
22 {
23 #include "os_wtoi.h"
24 }
25
26 // similar API to std::stoi but does not throw
27 // Adapted from http://tinodidriksen.com/uploads/code/cpp/speed-string-to-int.cpp
28 int os_wtoi(const wchar_t* str, std::size_t* pos)
29 {
30     const wchar_t* p = str;
31     int x = 0;
32     bool neg = false;
33     if (*p == '-')
34     {
35         neg = true;
36         ++p;
37     }
38     while (*p >= '0' && *p <= '9')
39     {
40         x = (x * 10) + (*p - '0');
41         ++p;
42     }
43     if (neg)
44     {
45         x = -x;
46     }
47
48     if (pos)
49     {
50         *pos = p - str;
51     }
52     return x;
53 }
54
55