• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

BlueBrain / MorphIO / 6533620342

16 Oct 2023 12:32PM UTC coverage: 76.051% (-0.05%) from 76.104%
6533620342

Pull #476

github

mgeplf
should apt-get update first
Pull Request #476: Efficient swc build

278 of 278 new or added lines in 4 files covered. (100.0%)

1972 of 2593 relevant lines covered (76.05%)

903.23 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.31
/src/readers/utils.cpp
1
#include "./utils.h"
2

3
namespace morphio {
4
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
5
#define freelocale _free_locale
6
#define strtol_l _strtol_l
7

8
#ifdef MORPHIO_USE_DOUBLE
9
#define strto_float _strtod_l
10
#else
11
#define strto_float _strtof_l
12
#endif
13

14
#else  // not WIN32
15

16
#ifdef MORPHIO_USE_DOUBLE
17
#define strto_float strtod_l
18
#else
19
#define strto_float strtof_l
20
#endif
21

22
#endif
23

24
StringToNumber::StringToNumber()
85✔
25
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
26
    : locale(_create_locale(LC_ALL, "C")) {
27
}
28
#else
29
    : locale(newlocale(LC_NUMERIC_MASK, "POSIX", nullptr)) {
85✔
30
}
85✔
31
#endif
32

33
StringToNumber::~StringToNumber() {
170✔
34
    freelocale(locale);
85✔
35
}
85✔
36

37
std::tuple<int64_t, size_t> StringToNumber::toInt(const std::string& s, size_t offset) const {
1,516✔
38
    const size_t base = 10;
1,516✔
39
    const char *pos = &s[offset];
1,516✔
40
    const char *endpos = &s[s.size()];
1,516✔
41
    int64_t ret = strtol_l(pos, const_cast<char**>(&endpos), base, locale);
1,516✔
42

43
    auto new_offset = static_cast<size_t>(endpos - s.data());
1,516✔
44

45
    if (ret == 0 && new_offset == 0) {
1,516✔
46
        throw std::invalid_argument("could not parse integer");
×
47
    }
48

49
    return {ret, new_offset};
3,032✔
50
}
51

52
std::tuple<floatType, size_t> StringToNumber::toFloat(const std::string& s, size_t offset) const {
3,928✔
53
    const char *pos = &s[offset];
3,928✔
54
    const char *endpos = &s[s.size()];
3,928✔
55
    floatType ret = strto_float(pos, const_cast<char**>(&endpos), locale);
3,928✔
56

57
    auto new_offset = static_cast<size_t>(endpos - s.data());
3,928✔
58

59
    if (ret == 0 && new_offset == 0) {
3,928✔
60
        throw std::invalid_argument("could not parse float");
×
61
    }
62

63
    return {ret, new_offset};
7,856✔
64
}
65

66
StringToNumber& getStringToNumber() {
476✔
67
    static StringToNumber stn;
476✔
68
    return stn;
476✔
69
}
70

71
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
72
#undef freelocale
73
#undef strtol_l
74
#endif
75

76
#undef strto_float
77

78
}  // namespace morphio
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc