Skip to content

Commit 07a8ba3

Browse files
committed
Adding platform include to move out compiler/platform specific code that needs to be shared.
1 parent 8954677 commit 07a8ba3

File tree

2 files changed

+66
-36
lines changed

2 files changed

+66
-36
lines changed

includes/sjson/parser.h

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
#include "sjson/parser_error.h"
3333
#include "sjson/parser_state.h"
34+
#include "sjson/platform.h"
3435
#include "sjson/string_view.h"
3536

3637
#include <cctype>
@@ -39,44 +40,8 @@
3940
#include <cstdint>
4041
#include <algorithm>
4142

42-
#if defined(__ANDROID__)
43-
#include <stdlib.h>
44-
#else
45-
#include <cstdlib>
46-
#endif
47-
4843
namespace sjson
4944
{
50-
namespace impl
51-
{
52-
inline unsigned long long int strtoull(const char* str, char** endptr, int base)
53-
{
54-
#if defined(__ANDROID__)
55-
return ::strtoull(str, endptr, base);
56-
#else
57-
return std::strtoull(str, endptr, base);
58-
#endif
59-
}
60-
61-
inline long long int strtoll(const char* str, char** endptr, int base)
62-
{
63-
#if defined(__ANDROID__)
64-
return ::strtoll(str, endptr, base);
65-
#else
66-
return std::strtoll(str, endptr, base);
67-
#endif
68-
}
69-
70-
inline float strtof(const char* str, char** endptr)
71-
{
72-
#if defined(__ANDROID__)
73-
return ::strtof(str, endptr);
74-
#else
75-
return std::strtof(str, endptr);
76-
#endif
77-
}
78-
}
79-
8045
class Parser
8146
{
8247
public:

includes/sjson/platform.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#pragma once
2+
3+
////////////////////////////////////////////////////////////////////////////////
4+
// The MIT License (MIT)
5+
//
6+
// Copyright (c) 2018 Nicholas Frechette, Cody Jones, and sjson-cpp contributors
7+
//
8+
// Permission is hereby granted, free of charge, to any person obtaining a copy
9+
// of this software and associated documentation files (the "Software"), to deal
10+
// in the Software without restriction, including without limitation the rights
11+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12+
// copies of the Software, and to permit persons to whom the Software is
13+
// furnished to do so, subject to the following conditions:
14+
//
15+
// The above copyright notice and this permission notice shall be included in all
16+
// copies or substantial portions of the Software.
17+
//
18+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24+
// SOFTWARE.
25+
////////////////////////////////////////////////////////////////////////////////
26+
27+
// NVIDIA CodeWorks used for Android has an old version of Clang that does not fully support C++11
28+
#if defined(__clang__) && __clang_major__ <= 3 && __clang_minor__ <= 8
29+
#include <stdlib.h>
30+
#else
31+
#include <cstdlib>
32+
#endif
33+
34+
namespace sjson
35+
{
36+
namespace impl
37+
{
38+
inline unsigned long long int strtoull(const char* str, char** endptr, int base)
39+
{
40+
#if defined(__clang__) && __clang_major__ <= 3 && __clang_minor__ <= 8
41+
return ::strtoull(str, endptr, base);
42+
#else
43+
return std::strtoull(str, endptr, base);
44+
#endif
45+
}
46+
47+
inline long long int strtoll(const char* str, char** endptr, int base)
48+
{
49+
#if defined(__clang__) && __clang_major__ <= 3 && __clang_minor__ <= 8
50+
return ::strtoll(str, endptr, base);
51+
#else
52+
return std::strtoll(str, endptr, base);
53+
#endif
54+
}
55+
56+
inline float strtof(const char* str, char** endptr)
57+
{
58+
#if defined(__clang__) && __clang_major__ <= 3 && __clang_minor__ <= 8
59+
return ::strtof(str, endptr);
60+
#else
61+
return std::strtof(str, endptr);
62+
#endif
63+
}
64+
}
65+
}

0 commit comments

Comments
 (0)