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

MySQL数据库

开发平台:

Visual C++

  1. #ifndef __set1_hh__
  2. #define __set1_hh__
  3. #include <set>
  4. #include <vector>
  5. #include <iostream>
  6. using namespace std ;
  7. #include "define_short.h"
  8. #include "coldata1.hh"
  9. template <class T, class value_type = /*typename*/ T::value_type>
  10. class MysqlListInsert {
  11. private:
  12.   T *object;
  13. public:
  14.   MysqlListInsert(T *o) {object = o;}
  15.   void operator () (const value_type &data) {object->push_back(data);}
  16. };
  17. template <class T, class key_type = /*typename*/ T::key_type> 
  18. class MysqlSetInsert {
  19. private:
  20.   T *object;
  21. public:
  22.   MysqlSetInsert(T *o) {object = o;}
  23.   void operator () (const key_type &data) {object->insert(data);}
  24. };
  25. template <class T>
  26. inline MysqlSetInsert<set<T> > set_insert(set<T> *o) {
  27.   return MysqlSetInsert<set<T> >(o);
  28. }
  29. template <class T>
  30. inline MysqlListInsert<vector<T> > set_insert(vector<T> *o) {
  31.   return MysqlListInsert<vector<T> >(o);
  32. }
  33. template <class Insert>
  34. void set2container (const char *str, Insert insert);
  35. //: A Special Set for holding mysql sets.
  36. template <class Container = set<string> >
  37. class Set : public Container {
  38. public:
  39.   Set(const char* str) {set2container(str,set_insert(this));}           //:
  40.   Set(const string &str) {set2container(str.c_str(),set_insert(this));} //:
  41.   Set(const ColData &str) 
  42.     {set2container(str.c_str(),set_insert(this));}                      //:
  43.   
  44.   ostream& out_stream(ostream &s) const;
  45.   
  46.   operator string ();
  47. };
  48. //! with_class = Set
  49. //:
  50. template <class Container>
  51. inline ostream& operator << (ostream &s, const Set<Container> &d) 
  52.   return d.out_stream(s); 
  53. }
  54. #endif