summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-06-19 11:43:05 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-06-19 14:32:59 +0200
commitfb0d8859042570a15e0477f1ba6adf638b01db0f (patch)
tree588cbde20b82652dd11f4abb76d40e5fdbdf6016 /vespalib
parenta0b7b206752e54118ef0b0ce88987e88ddb2d689 (diff)
Move locale insensitive stdtod to vespalib
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/CMakeLists.txt1
-rw-r--r--vespalib/src/vespa/vespalib/CMakeLists.txt1
-rw-r--r--vespalib/src/vespa/vespalib/locale/CMakeLists.txt7
-rw-r--r--vespalib/src/vespa/vespalib/locale/c.cpp20
-rw-r--r--vespalib/src/vespa/vespalib/locale/c.h10
-rw-r--r--vespalib/src/vespa/vespalib/locale/locale.cpp20
-rw-r--r--vespalib/src/vespa/vespalib/locale/locale.h20
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;
+};
+
+}
+