aboutsummaryrefslogtreecommitdiff
path: root/odb/oracle/traits.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/oracle/traits.cxx')
-rw-r--r--odb/oracle/traits.cxx135
1 files changed, 0 insertions, 135 deletions
diff --git a/odb/oracle/traits.cxx b/odb/oracle/traits.cxx
index 4bae42d..3e95a00 100644
--- a/odb/oracle/traits.cxx
+++ b/odb/oracle/traits.cxx
@@ -3,139 +3,4 @@
// copyright : Copyright (c) 2005-2011 Code Synthesis Tools CC
// license : GNU GPL v2; see accompanying LICENSE file
-#include <cstddef> // std::size_t
-#include <cmath> // pow
-#include <deque>
-
#include <odb/oracle/traits.hxx>
-
-using namespace std;
-
-namespace odb
-{
- namespace oracle
- {
- long long
- out (unsigned char const* n)
- {
- // The first byte specifies the length of the number representation,
- // including the exponent byte and significant digits but not the length
- // itself.
- //
- int len (n[0]);
-
- if (len == 1)
- return 0;
-
- long long v (0);
- if (n[1] & 0x80)
- {
- // The exponent of a positive number is calculated as n[1] - 193.
- // The base-100 exponent of the least significant digit can be
- // calculated as exp - sig - 1, where sig is the number of significant
- // digits. sig may be calculated as len - 2.
- //
- int exp (n[1] - 191 - len);
-
- for (unsigned char const* m (n + len), *e (n + 1); m > e; --m, ++exp)
- v += (*m - 1) * pow (100, exp);
- }
- else
- {
- // The exponent of a negative number is calculated as ~n[1] - 193.
- // The base-100 exponent of the least significant digit can be
- // calculated as exp - sig - 1, where sig is the number of significant
- // digits. sig may be calculated as len - 2.
- //
- int exp (~n[1] - 190 - len);
-
- for (unsigned char const* m (n + len - 1), *e (n + 1); m > e;
- --m, ++exp)
- v -= (101 - *m) * pow (100, exp);
- }
-
- return v;
- }
-
- void
- in (unsigned char b[22], long long n)
- {
- if (n == 0)
- {
- b[0] = 1;
- b[1] = 128;
-
- return;
- }
-
- // @@ Is there some sort of reserve() implementation for deque?
- //
- deque<unsigned char> s;
-
- bool sig (false);
- size_t c (0);
- unsigned char exp (0);
-
- if (n < 0)
- {
- // Termination marker for negative numbers.
- //
- s.push_front (102);
-
- while (n != 0)
- {
- int v (static_cast<int> (n % 100));
- sig = sig ? true : v != 0;
-
- if (sig)
- s.push_front (static_cast<unsigned char> (101 + v));
-
- n /= 100;
- ++c;
- }
-
- // The exponent is one less than the number of base 100 digits. It is
- // inverted for negative values.
- //
- exp = static_cast<unsigned char> (~(c + 192));
- }
- else
- {
- while (n != 0)
- {
- int v (static_cast<int> (n % 100));
- sig = sig ? true : v != 0;
-
- if (sig)
- s.push_front (static_cast<unsigned char> (v + 1));
-
- n /= 100;
- ++c;
- }
-
- // Exponent is one less than the number of base 100 digits.
- //
- exp = static_cast<unsigned char> (c + 192);
- }
-
- // Set the length.
- //
- b[0] = static_cast<unsigned char> (s.size () + 1);
-
- // Set the exponent.
- //
- b[1] = exp;
-
- // Set the significant digits (big-endian byte order) and the terminator,
- // if any.
- //
- c = 2;
- while (!s.empty ())
- {
- b[i] = s.front ();
- s.pop_front ();
- ++c;
- }
- }
- }
-}