datetime1.hh
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #ifndef __datetime1_hh__
  2. #define __datetime1_hh__
  3. #include <string>
  4. #include <strstream>
  5. #include <iostream>
  6. using namespace std ;
  7. #include "defs.h"
  8. #include "define_short.h"
  9. #include "coldata1.hh"
  10. #include "stream2string1.hh"
  11. #include "tiny_int1.hh"
  12. //-------------------------------------------------------------------------
  13. struct mysql_dt_base
  14. {
  15.   virtual ostream& out_stream(ostream&) const = 0;
  16.   operator string () const;
  17. };
  18. //--------------------------------------------------------------------------
  19. template <class T>
  20. struct MysqlDTbase
  21. {
  22.   virtual short int compare(const T &other) const = 0;
  23.   bool operator == (const T &other) const {return !compare(other);}
  24.   bool operator != (const T &other) const {return compare(other);}
  25.   bool operator <  (const T &other) const {return compare(other) < 0;}
  26.   bool operator <= (const T &other) const {return compare(other) <= 0;}
  27.   bool operator >  (const T &other) const {return compare(other) > 0;}
  28.   bool operator >= (const T &other) const {return compare(other) >= 0;}
  29. };
  30. //-------------------------------------------------------------------------
  31. struct mysql_date : virtual public mysql_dt_base
  32. {
  33.   short int year;
  34.   tiny_int  month;
  35.   tiny_int  day;
  36.   ostream& out_stream(ostream&) const;
  37.   cchar* convert (cchar*);
  38.   string& convert (string&);
  39. protected:
  40.   short int compare(const mysql_date *other) const;
  41. };
  42. //-------------------------------------------------------------------------
  43. //: A special type for holding mysql Dates.
  44. // Date, a comparable data structures for holding mysql Dates.  It also
  45. // responds to the stream extraction and insertion operator.
  46. struct Date : public mysql_date, public MysqlDTbase<Date>
  47. {
  48.   Date () {};
  49.   Date (cchar* str) {convert(str);}
  50.   Date (const ColData &str);
  51.   Date (const string &str);
  52.   short int compare(const Date& other) const
  53.     {return mysql_date::compare(&other);}
  54. };
  55. //-----------------------------------------------------------------------
  56. inline ostream& operator << (ostream& s, const Date& d)
  57.                                                   {return d.out_stream(s);}
  58. //-------------------------------------------------------------------------
  59. struct mysql_time : virtual public mysql_dt_base
  60. {
  61.   tiny_int hour;
  62.   tiny_int minute;
  63.   tiny_int second;
  64.   ostream& out_stream(ostream&) const;
  65.   cchar* convert (cchar*);
  66.   string& convert (string&);
  67. protected:
  68.   short int compare(const mysql_time *other) const;
  69. };
  70. //-------------------------------------------------------------------------
  71. //: A special type for holding mysql Time.
  72. // Time, a comparable data structures for holding mysql Times.  It also
  73. // responds to the stream extraction and insertion operator.
  74. struct Time : public mysql_time, public MysqlDTbase<Time>
  75. {
  76.   Time () {};
  77.   Time (cchar* str) {convert(str);}
  78.   Time (const ColData &str);
  79.   Time (const string &str);
  80.   short int compare(const Time& other) const
  81.     {return mysql_time::compare(&other);}
  82. };
  83. //-------------------------------------------------------------------------
  84. inline ostream& operator << (ostream& s, const Time& d)
  85.   {return d.out_stream(s);}
  86. //-------------------------------------------------------------------------
  87. //: A combinate of Date and Time for holding mysql DateTime's
  88. //!dummy: struct DateTime {};
  89. struct DateTime : public mysql_date, public mysql_time,
  90.        public MysqlDTbase<DateTime>
  91. {
  92.   DateTime () {}
  93.   DateTime (cchar* str) {convert(str);}
  94.   DateTime (const ColData &str);
  95.   DateTime (const string &str);
  96.   short int compare(const DateTime& other) const;
  97.   ostream& out_stream(ostream&) const;
  98.   cchar* convert (cchar*);
  99.   string& convert (string&);
  100. };
  101. //-------------------------------------------------------------------------
  102. inline ostream& operator << (ostream& s, const DateTime& d)
  103.                                                    {return d.out_stream(s);}
  104. //-------------------------------------------------------------------------
  105. #endif