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

模拟服务器

开发平台:

C/C++

  1. #ifndef __vallist1_hh__
  2. #define __vallist1_hh__
  3. #include "manip1.hh"
  4. #include <string>
  5. #include <vector>
  6. using namespace std;
  7. template <class Seq, class Manip>
  8. struct value_list_b {
  9.   const Seq          *list;
  10.   const vector<bool> fields;
  11.   const char         *delem;
  12.   Manip              manip;
  13.   value_list_b(const Seq &s, const vector<bool> &f, const char *d, Manip m) 
  14.     : list(&s), fields(f), delem(d), manip(m) {}
  15. };
  16. template <class Seq1, class Seq2, class Manip>
  17. struct equal_list_b {
  18.   const Seq1         *list1;
  19.   const Seq2         *list2;
  20.   const vector<bool> fields;
  21.   const char         *delem;
  22.   const char         *equl;
  23.   Manip              manip;
  24.   equal_list_b(const Seq1 &s1, const Seq2 &s2, const vector<bool> &f,
  25.        const char *d, const char *e, Manip m) 
  26.     : list1(&s1), list2(&s2), fields(f), delem(d), equl(e), manip(m) {}
  27. };
  28. template <class Seq, class Manip>
  29. struct value_list_ba {
  30.   const Seq          *list;
  31.   const char         *delem;
  32.   Manip              manip;
  33.   value_list_ba(const Seq &s, const char* d, Manip m) 
  34.     : list(&s), delem(d), manip(m) {}
  35. };
  36. template <class Seq1, class Seq2, class Manip>
  37. struct equal_list_ba {
  38.   const Seq1         *list1;
  39.   const Seq2         *list2;
  40.   const char         *delem;
  41.   const char         *equl;
  42.   Manip              manip;
  43.   equal_list_ba(const Seq1 &s1, const Seq2 &s2, const char *d, const char *e,
  44. Manip m) 
  45.     : list1(&s1), list2(&s2), delem(d), equl(e), manip(m) {}
  46. };
  47. //
  48. template <class Seq, class Manip>
  49. ostream& operator << (ostream &o, const value_list_b<Seq, Manip> &cl) {
  50.   typename Seq::const_iterator i =  cl.list->begin();
  51.   register int k = 0;
  52.   for (;;) {
  53.     if (cl.fields[k])
  54.       o << cl.manip << *i;
  55.     k++;
  56.     if (++i == cl.list->end()) break;
  57.     if (cl.fields[k])
  58.       o << cl.delem;
  59.   }
  60.   return o;
  61. }
  62. template <class Seq1, class Seq2, class Manip>
  63. ostream& operator << (ostream &o, const equal_list_b<Seq1, Seq2, Manip> &el) {
  64.   typename Seq1::const_iterator i = el.list1->begin();
  65.   typename Seq2::const_iterator j = el.list2->begin();
  66.   register int k = 0;
  67.   for (;;) {
  68.     if (el.fields[k]) 
  69.       o << *i << el.equl << el.manip << *j;
  70.     k++;
  71.     j++;
  72.     if (++i == el.list1->end()) break;
  73.     if (el.fields[k])
  74.       o << el.delem;
  75.   }
  76.   return o;
  77. }
  78. template <class Seq, class Manip>
  79. ostream& operator << (ostream &o, const value_list_ba<Seq, Manip> &cl) {
  80.   typename Seq::const_iterator i =  cl.list->begin();
  81.   for (;;) {
  82.     o << cl.manip << *i;
  83.     if (++i == cl.list->end()) break;
  84.     o << cl.delem;
  85.   }
  86.   return o;
  87. }
  88. template <class Seq1, class Seq2, class Manip>
  89. ostream& operator << (ostream &o, const equal_list_ba<Seq1, Seq2, Manip> &el) {
  90.   typename Seq1::const_iterator i = el.list1->begin();
  91.   typename Seq2::const_iterator j = el.list2->begin();
  92.   for (;;) {
  93.     o << *i << el.equl << el.manip << *j;
  94.     j++;
  95.     if (++i == el.list1->end()) break;
  96.     o << el.delem;
  97.   }
  98.   return o;
  99. }
  100. template <class Iter>
  101. class simp_list_b {
  102. public:
  103.   Iter _begin;
  104.   Iter _end;
  105. public:
  106.   typedef Iter const_iterator;
  107.   simp_list_b(Iter b, Iter e) : _begin(b), _end(e) {}
  108.   Iter begin() const {return _begin;}
  109.   Iter end() const {return _end;}
  110. };
  111. //
  112. // create vector
  113. //
  114. void create_vector(int size, vector<bool>& v, bool t0, 
  115.    bool t1=false, bool t2=false, bool t3=false, bool t4=false,
  116.    bool t5=false, bool t6=false, bool t7=false, bool t8=false,
  117.    bool t9=false, bool ta=false, bool tb=false, bool tc=false);
  118. template <class Container>
  119. void create_vector(const Container&c, vector<bool>&v, string s0, string s1, 
  120.    string s2, string s3, string s4, string s5, string s6,
  121.    string s7, string s8, string s9, string sa, string sb,
  122.    string sc);
  123. //
  124. // value list
  125. //
  126. template <class Seq>  
  127. inline
  128. value_list_ba<Seq,do_nothing_type0> 
  129. value_list(const Seq &s, const char *d = ",") {
  130.   return value_list_ba<Seq ,do_nothing_type0> (s, d, do_nothing);
  131. }
  132. template <class Seq, class Manip>  
  133. inline
  134. value_list_ba<Seq,Manip> 
  135. value_list(const Seq &s, const char *d, Manip m) {
  136.   return value_list_ba<Seq,Manip> (s, d, m);
  137. }
  138. template <class Seq, class Manip>
  139. inline
  140. value_list_b<Seq,Manip>
  141. value_list(const Seq &s, const char *d, Manip m, const vector<bool> &vb)
  142. {
  143.   return value_list_b<Seq, Manip>(s, vb, d, m);
  144. }
  145. template <class Seq, class Manip>
  146. value_list_b<Seq,Manip>
  147. value_list(const Seq &s, const char *d, Manip m, bool t0, 
  148.    bool t1=false, bool t2=false, bool t3=false, bool t4=false,
  149.    bool t5=false, bool t6=false, bool t7=false, bool t8=false,
  150.    bool t9=false, bool ta=false, bool tb=false, bool tc=false)
  151. {
  152.   vector<bool> vb;
  153.   create_vector(s.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  154.   return value_list_b<Seq, Manip>(s, vb, d, m);
  155. }
  156. template <class Seq>
  157. value_list_b<Seq,do_nothing_type0>
  158. value_list(const Seq &s, const char *d, bool t0, 
  159.    bool t1=false, bool t2=false, bool t3=false, bool t4=false,
  160.    bool t5=false, bool t6=false, bool t7=false, bool t8=false,
  161.    bool t9=false, bool ta=false, bool tb=false, bool tc=false)
  162. {
  163.   vector<bool> vb;
  164.   create_vector(s.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  165.   return value_list_b<Seq, do_nothing_type0> (s, vb, d, do_nothing);
  166. }
  167. template <class Seq>
  168. value_list_b<Seq,do_nothing_type0>
  169. value_list(const Seq &s, bool t0, 
  170.    bool t1=false, bool t2=false, bool t3=false, bool t4=false,
  171.    bool t5=false, bool t6=false, bool t7=false, bool t8=false,
  172.    bool t9=false, bool ta=false, bool tb=false, bool tc=false)
  173. {
  174.   vector<bool> vb;
  175.   create_vector(s.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  176.   return value_list_b<Seq, do_nothing_type0> (s, vb, ",",do_nothing);
  177. }
  178. //
  179. // equal list
  180. //
  181. template <class Seq1, class Seq2>  
  182. inline
  183. equal_list_ba<Seq1,Seq2,do_nothing_type0> 
  184. equal_list(const Seq1 &s1, const Seq2 &s2, const char *d = ",", 
  185.    const char *e = " = ") {
  186.   return equal_list_ba<Seq1,Seq2,do_nothing_type0> (s1, s2, d, e, do_nothing);
  187. }
  188. template <class Seq1, class Seq2, class Manip>
  189. inline
  190. equal_list_ba<Seq1,Seq2,Manip> 
  191. equal_list(const Seq1 &s1, const Seq2 &s2, 
  192.    const char *d, const char *e, Manip m) {
  193.   return equal_list_ba<Seq1,Seq2,Manip> (s1, s2, d, e, m);
  194. }
  195. template <class Seq1, class Seq2, class Manip>
  196. inline
  197. equal_list_b<Seq1, Seq2, Manip>
  198. equal_list(const Seq1 &s1, const Seq2 &s2, const char *d, const char *e, 
  199.    Manip m, const vector<bool> &vb)
  200. {
  201.   return equal_list_b<Seq1,Seq2,Manip>(s1, s2, vb, d, e, m);
  202. }
  203. // complete
  204. template <class Seq1, class Seq2, class Manip>
  205. equal_list_b<Seq1, Seq2, Manip>
  206. equal_list(const Seq1 &s1, const Seq2 &s2, const char *d, const char *e, 
  207.    Manip m, bool t0, 
  208.    bool t1=false, bool t2=false, bool t3=false, bool t4=false,
  209.    bool t5=false, bool t6=false, bool t7=false, bool t8=false,
  210.    bool t9=false, bool ta=false, bool tb=false, bool tc=false)
  211. {
  212.   vector<bool> vb;
  213.   create_vector(s1.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  214.   return equal_list_b<Seq1,Seq2,Manip>(s1, s2, vb, d, e, m);
  215. }
  216. // delem, equl
  217. template <class Seq1, class Seq2>
  218. equal_list_b<Seq1, Seq2, do_nothing_type0>
  219. equal_list(const Seq1 &s1, const Seq2 &s2, const char *d, const char *e, 
  220.    bool t0, 
  221.    bool t1=false, bool t2=false, bool t3=false, bool t4=false,
  222.    bool t5=false, bool t6=false, bool t7=false, bool t8=false,
  223.    bool t9=false, bool ta=false, bool tb=false, bool tc=false)
  224. {
  225.   vector<bool> vb;
  226.   create_vector(s1.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  227.   return equal_list_b<Seq1,Seq2,do_nothing_type0>
  228.     (s1, s2, vb, d, e, do_nothing);
  229. }
  230. // delem
  231. template <class Seq1, class Seq2>
  232. equal_list_b<Seq1,Seq2,do_nothing_type0>
  233. equal_list(const Seq1 &s1, const Seq2 &s2, const char *d, bool t0, 
  234.    bool t1=false, bool t2=false, bool t3=false, bool t4=false,
  235.    bool t5=false, bool t6=false, bool t7=false, bool t8=false,
  236.    bool t9=false, bool ta=false, bool tb=false, bool tc=false)
  237. {
  238.   vector<bool> vb;
  239.   create_vector(s1.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  240.   return equal_list_b<Seq1,Seq2,do_nothing_type0> 
  241.     (s1, s2, vb, d, " = ", do_nothing);
  242. }
  243. // nothing
  244. template <class Seq1, class Seq2>
  245. equal_list_b<Seq1,Seq2,do_nothing_type0>
  246. equal_list(const Seq1 &s1, const Seq2 &s2, bool t0, 
  247.    bool t1=false, bool t2=false, bool t3=false, bool t4=false,
  248.    bool t5=false, bool t6=false, bool t7=false, bool t8=false,
  249.    bool t9=false, bool ta=false, bool tb=false, bool tc=false)
  250. {
  251.   vector<bool> vb;
  252.   create_vector(s1.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  253.   return equal_list_b<Seq1,Seq2,do_nothing_type0> 
  254.     (s1, s2, vb,"," ," = " ,do_nothing);
  255. }
  256. #endif