summaryrefslogtreecommitdiff
path: root/indra/llcommon/u64.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/llcommon/u64.cpp
Print done when done.
Diffstat (limited to 'indra/llcommon/u64.cpp')
-rw-r--r--indra/llcommon/u64.cpp91
1 files changed, 91 insertions, 0 deletions
diff --git a/indra/llcommon/u64.cpp b/indra/llcommon/u64.cpp
new file mode 100644
index 0000000000..c8b8bc4a28
--- /dev/null
+++ b/indra/llcommon/u64.cpp
@@ -0,0 +1,91 @@
+/**
+ * @file u64.cpp
+ * @brief Utilities to deal with U64s.
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#include "linden_common.h"
+
+#include "u64.h"
+
+
+U64 str_to_U64(const char *str)
+{
+ U64 result = 0;
+ char *aptr = strpbrk(str,"0123456789");
+
+ if (!aptr)
+ {
+ llwarns << "str_to_U64: Bad string to U64 conversion attempt: format\n" << llendl;
+ }
+ else
+ {
+ while ((*aptr >= '0') && (*aptr <= '9'))
+ {
+ result = result*10 + (*aptr++ - '0');
+ }
+ }
+ return (result);
+}
+
+
+char* U64_to_str(U64 value, char* result, S32 result_size)
+{
+ U32 part1,part2,part3;
+
+ part3 = (U32)(value % (U64)10000000);
+
+ value /= 10000000;
+ part2 = (U32)(value % (U64)10000000);
+
+ value /= 10000000;
+ part1 = (U32)(value % (U64)10000000);
+
+ // three cases to avoid leading zeroes unless necessary
+
+ if (part1)
+ {
+ snprintf(
+ result,
+ result_size,
+ "%u%07u%07u",
+ part1,part2,part3); /* Flawfinder: ignore */
+ }
+ else if (part2)
+ {
+ snprintf(
+ result,
+ result_size,
+ "%u%07u",
+ part2,part3); /* Flawfinder: ignore */
+ }
+ else
+ {
+ snprintf(
+ result,
+ result_size,
+ "%u",
+ part3); /* Flawfinder: ignore */
+ }
+ return (result);
+}
+
+F64 U64_to_F64(const U64 value)
+{
+ S64 top_bits = (S64)(value >> 1);
+ F64 result = (F64)top_bits;
+ result *= 2.f;
+ result += (U32)(value & 0x01);
+ return result;
+}
+
+U64 llstrtou64(const char* str, char** end, S32 base)
+{
+#ifdef LL_WINDOWS
+ return _strtoui64(str,end,base);
+#else
+ return strtoull(str,end,base);
+#endif
+}