compare1.hh
上传用户:clovervx
上传日期:2010-03-30
资源大小:787k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #ifndef __compare1_hh__
  2. #define __compare1_hh__
  3. #include <functional>
  4. #include "row1.hh"
  5. template <class BinaryPred, class CmpType>
  6. class MysqlCmp : public unary_function<const MysqlRow&, bool>
  7. {
  8. protected:
  9.   unsigned int index;
  10.   BinaryPred   func;
  11.   CmpType      cmp2;
  12. public:
  13.   MysqlCmp(uint i, const BinaryPred &f, const CmpType &c) : index(i),func(f),cmp2(c) {}
  14.   bool operator () (const MysqlRow& cmp1) const {return func(cmp2,cmp1[index]);}
  15. };
  16. template <class BinaryPred>
  17. class MysqlCmpCStr : public MysqlCmp<BinaryPred, const char *>
  18. {
  19. public:
  20.   MysqlCmpCStr(uint i, const BinaryPred &f, const char* c) : MysqlCmp<BinaryPred, const char *> (i,f,c) {}
  21.   bool operator () (const MysqlRow& cmp1) const 
  22.     {return func(cmp2,cmp1[index]);}
  23. };
  24. //: A special function for using in find_if function where i is the field index number.
  25. // This is a more generic form of mysql_cmp_cstr will work with any
  26. // CmpType that MysqlString can convert to.  However, this is not
  27. // neary as effecent.  Only use when obsoletely nessary.
  28. template <class BinaryPred, class CmpType>
  29. MysqlCmp <BinaryPred, CmpType>
  30. mysql_cmp(uint i, const BinaryPred &func, const CmpType &cmp2)
  31. {
  32.   return MysqlCmp<BinaryPred, CmpType>(i, func, cmp2);
  33. }
  34. typedef binary_function<const char*, const char*, bool> bin_char_pred;
  35. struct cstr_equal_to : bin_char_pred {
  36.   bool operator () (const char *x, const char *y) const
  37.     {return !strcmp(x,y);}
  38. };
  39. struct cstr_not_equal_to : bin_char_pred {
  40.   bool operator () (const char *x, const char *y) const
  41.     {return strcmp(x,y);}
  42. };
  43. struct cstr_less : bin_char_pred {
  44.   bool operator () (const char *x, const char *y) const
  45.     {return strcmp(x,y) > 0; }
  46. };
  47. struct cstr_less_equal : bin_char_pred {
  48.   bool operator () (const char *x, const char *y) const
  49.     {return strcmp(x,y) >= 0; }
  50. };
  51. struct cstr_greater : bin_char_pred {
  52.   bool operator () (const char *x, const char *y) const
  53.     {return strcmp(x,y) < 0; }
  54. };
  55. struct cstr_greater_equal : bin_char_pred {
  56.   bool operator () (const char *x, const char *y) const
  57.     {return strcmp(x,y) <= 0; }
  58. };
  59. //:A special function for using in find_if fucntion where i is the field index
  60. //:number.
  61. //
  62. // func should be one of cstr_equal_to(), cstr_not_equal_to(),
  63. // cstr_less(), cstr_less_equal(), cstr_less_equal(), cstr_less_equal().
  64. template <class BinaryPred>
  65. MysqlCmpCStr <BinaryPred>
  66. mysql_cmp_cstr (uint i, const BinaryPred &func, const char *cmp2) {
  67.   return MysqlCmpCStr<BinaryPred>(i, func, cmp2);
  68. }
  69. #endif