Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'util/integer_to_string.hh')
-rw-r--r--util/integer_to_string.hh56
1 files changed, 56 insertions, 0 deletions
diff --git a/util/integer_to_string.hh b/util/integer_to_string.hh
new file mode 100644
index 000000000..0d975b14e
--- /dev/null
+++ b/util/integer_to_string.hh
@@ -0,0 +1,56 @@
+#ifndef UTIL_INTEGER_TO_STRING_H
+#define UTIL_INTEGER_TO_STRING_H
+#include <cstddef>
+#include <stdint.h>
+
+namespace util {
+
+/* These functions convert integers to strings and return the end pointer.
+ */
+char *ToString(uint32_t value, char *to);
+char *ToString(uint64_t value, char *to);
+
+// Implemented as wrappers to above
+char *ToString(int32_t value, char *to);
+char *ToString(int64_t value, char *to);
+
+// Calls the 32-bit versions for now.
+char *ToString(uint16_t value, char *to);
+char *ToString(int16_t value, char *to);
+
+inline char *ToString(bool value, char *to) {
+ *to++ = '0' + value;
+ return to;
+}
+
+// How many bytes to reserve in the buffer for these strings:
+// g++ 4.9.1 doesn't work with this:
+// static const std::size_t kBytes = 5;
+// So use enum.
+template <class T> struct ToStringBuf;
+template <> struct ToStringBuf<bool> {
+ enum { kBytes = 1 };
+};
+template <> struct ToStringBuf<uint16_t> {
+ enum { kBytes = 5 };
+};
+template <> struct ToStringBuf<int16_t> {
+ enum { kBytes = 6 };
+};
+template <> struct ToStringBuf<uint32_t> {
+ enum { kBytes = 10 };
+};
+template <> struct ToStringBuf<int32_t> {
+ enum { kBytes = 11 };
+};
+template <> struct ToStringBuf<uint64_t> {
+ enum { kBytes = 20 };
+};
+template <> struct ToStringBuf<int64_t> {
+ // Not a typo. 2^63 has 19 digits.
+ enum { kBytes = 20 };
+};
+
+} // namespace util
+
+#endif // UTIL_INTEGER_TO_STRING_H