diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-06-19 11:43:05 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-06-19 14:32:59 +0200 |
commit | fb0d8859042570a15e0477f1ba6adf638b01db0f (patch) | |
tree | 588cbde20b82652dd11f4abb76d40e5fdbdf6016 /vespalib | |
parent | a0b7b206752e54118ef0b0ce88987e88ddb2d689 (diff) |
Move locale insensitive stdtod to vespalib
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/CMakeLists.txt | 1 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/CMakeLists.txt | 1 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/locale/CMakeLists.txt | 7 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/locale/c.cpp | 20 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/locale/c.h | 10 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/locale/locale.cpp | 20 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/locale/locale.h | 20 |
7 files changed, 79 insertions, 0 deletions
diff --git a/vespalib/CMakeLists.txt b/vespalib/CMakeLists.txt index fb4f6ff0952..3ac5000fe79 100644 --- a/vespalib/CMakeLists.txt +++ b/vespalib/CMakeLists.txt @@ -109,6 +109,7 @@ vespa_define_module( src/vespa/vespalib/geo src/vespa/vespalib/hwaccelrated src/vespa/vespalib/io + src/vespa/vespalib/locale src/vespa/vespalib/net src/vespa/vespalib/objects src/vespa/vespalib/stllike diff --git a/vespalib/src/vespa/vespalib/CMakeLists.txt b/vespalib/src/vespa/vespalib/CMakeLists.txt index cdfb4084f18..156c5dc7534 100644 --- a/vespalib/src/vespa/vespalib/CMakeLists.txt +++ b/vespalib/src/vespa/vespalib/CMakeLists.txt @@ -7,6 +7,7 @@ vespa_add_library(vespalib $<TARGET_OBJECTS:vespalib_vespalib_geo> $<TARGET_OBJECTS:vespalib_vespalib_hwaccelrated> $<TARGET_OBJECTS:vespalib_vespalib_io> + $<TARGET_OBJECTS:vespalib_vespalib_locale> $<TARGET_OBJECTS:vespalib_vespalib_net> $<TARGET_OBJECTS:vespalib_vespalib_objects> $<TARGET_OBJECTS:vespalib_vespalib_stllike> diff --git a/vespalib/src/vespa/vespalib/locale/CMakeLists.txt b/vespalib/src/vespa/vespalib/locale/CMakeLists.txt new file mode 100644 index 00000000000..d5b9e94439b --- /dev/null +++ b/vespalib/src/vespa/vespalib/locale/CMakeLists.txt @@ -0,0 +1,7 @@ +# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_library(vespalib_vespalib_locale OBJECT + SOURCES + c.cpp + locale.cpp + DEPENDS +) diff --git a/vespalib/src/vespa/vespalib/locale/c.cpp b/vespalib/src/vespa/vespalib/locale/c.cpp new file mode 100644 index 00000000000..4d29ddc3b64 --- /dev/null +++ b/vespalib/src/vespa/vespalib/locale/c.cpp @@ -0,0 +1,20 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "c.h" +#include "locale.h" +#include <stdlib.h> + +namespace vespalib::locale::c { + +namespace { + +Locale _G_C_Locale; + +} + +double strtod(const char *startp, char **endp) { + return strtod_l(startp, endp, _G_C_Locale.get()); +} + +} + diff --git a/vespalib/src/vespa/vespalib/locale/c.h b/vespalib/src/vespa/vespalib/locale/c.h new file mode 100644 index 00000000000..a81e8daf745 --- /dev/null +++ b/vespalib/src/vespa/vespalib/locale/c.h @@ -0,0 +1,10 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +namespace vespalib::locale::c { + +double strtod(const char *nptr, char **endptr); + +} + diff --git a/vespalib/src/vespa/vespalib/locale/locale.cpp b/vespalib/src/vespa/vespalib/locale/locale.cpp new file mode 100644 index 00000000000..fe6fc383d33 --- /dev/null +++ b/vespalib/src/vespa/vespalib/locale/locale.cpp @@ -0,0 +1,20 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "locale.h" +#include <cassert> + +namespace vespalib::locale { + +Locale::Locale() : Locale(LC_ALL_MASK, "C") { } +Locale::Locale(int category, const char *locale) + : _locale(newlocale(category, locale, nullptr)) +{ + assert(_locale != nullptr); +} + +Locale::~Locale() { + freelocale(_locale); +} + +} + diff --git a/vespalib/src/vespa/vespalib/locale/locale.h b/vespalib/src/vespa/vespalib/locale/locale.h new file mode 100644 index 00000000000..ee2bbe54af3 --- /dev/null +++ b/vespalib/src/vespa/vespalib/locale/locale.h @@ -0,0 +1,20 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <clocale> + +namespace vespalib::locale { + +class Locale { +public: + Locale(); // Standard C locale, NOT default locale. + Locale(int category, const char *locale); + ~Locale(); + locale_t get() const { return _locale; } +private: + locale_t _locale; +}; + +} + |