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

BlueBrain / MorphIO / 6545228678

17 Oct 2023 08:31AM UTC coverage: 76.668% (+0.6%) from 76.104%
6545228678

Pull #476

github

mgeplf
fix missing data
Pull Request #476: Efficient swc build

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

1988 of 2593 relevant lines covered (76.67%)

914.88 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()
99✔
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)) {
99✔
30
}
99✔
31
#endif
32

33
StringToNumber::~StringToNumber() {
198✔
34
    freelocale(locale);
99✔
35
}
99✔
36

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

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

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

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

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

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

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

63
    return {ret, new_offset};
8,032✔
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