aboutsummaryrefslogtreecommitdiff
path: root/odb/oracle/details/date.hxx
blob: ef87fd8fba3a6e4b2f46b0612c327202ec5223ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// file      : odb/oracle/details/date.hxx
// copyright : Copyright (c) 2009-2017 Code Synthesis Tools CC
// license   : ODB NCUEL; see accompanying LICENSE file

#ifndef ODB_ORACLE_DETAILS_DATE_HXX
#define ODB_ORACLE_DETAILS_DATE_HXX

namespace odb
{
  // @@ Revise this.
  //
  namespace details
  {
  }

  namespace oracle
  {
    namespace details
    {
      inline void
      set_date (char* b,
                short year,
                unsigned char month,
                unsigned char day,
                unsigned char hour,
                unsigned char minute,
                unsigned char second)
      {
        b[0] = static_cast<char> (year / 100 + 100);
        b[1] = static_cast<char> (year % 100 + 100);
        b[2] = static_cast<char> (month);
        b[3] = static_cast<char> (day);
        b[4] = static_cast<char> (hour + 1);
        b[5] = static_cast<char> (minute + 1);
        b[6] = static_cast<char> (second + 1);
      }

      inline void
      get_date (const char* b,
                short& year,
                unsigned char& month,
                unsigned char& day,
                unsigned char& hour,
                unsigned char& minute,
                unsigned char& second)
      {
        const unsigned char* ub (reinterpret_cast<const unsigned char*> (b));

        year = 100 * ub[0] + ub[1] - 10100;
        month = ub[2];
        day = ub[3];
        hour = ub[4] - 1;
        minute = ub[5] - 1;
        second = ub[6] - 1;
      }
    }
  }
}

#endif // ODB_ORACLE_DETAILS_DATE_HXX