⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vallist1.hh

📁 MySql C++ library
💻 HH
字号:
#ifndef __vallist1_hh__
#define __vallist1_hh__

#include "manip1.hh"
#include <string>
#include <vector>
using namespace std;

template <class Seq, class Manip>
struct value_list_b {
  const Seq          *list;
  const vector<bool> fields;
  const char         *delem;
  Manip              manip;
  value_list_b(const Seq &s, const vector<bool> &f, const char *d, Manip m) 
    : list(&s), fields(f), delem(d), manip(m) {}
};

template <class Seq1, class Seq2, class Manip>
struct equal_list_b {
  const Seq1         *list1;
  const Seq2         *list2;
  const vector<bool> fields;
  const char         *delem;
  const char         *equl;
  Manip              manip;
  equal_list_b(const Seq1 &s1, const Seq2 &s2, const vector<bool> &f,
	       const char *d, const char *e, Manip m) 
    : list1(&s1), list2(&s2), fields(f), delem(d), equl(e), manip(m) {}
};

template <class Seq, class Manip>
struct value_list_ba {
  const Seq          *list;
  const char         *delem;
  Manip              manip;
  value_list_ba(const Seq &s, const char* d, Manip m) 
    : list(&s), delem(d), manip(m) {}
};

template <class Seq1, class Seq2, class Manip>
struct equal_list_ba {
  const Seq1         *list1;
  const Seq2         *list2;
  const char         *delem;
  const char         *equl;
  Manip              manip;
  equal_list_ba(const Seq1 &s1, const Seq2 &s2, const char *d, const char *e,
		Manip m) 
    : list1(&s1), list2(&s2), delem(d), equl(e), manip(m) {}
};

//

template <class Seq, class Manip>
ostream& operator << (ostream &o, const value_list_b<Seq, Manip> &cl) {
  typename Seq::const_iterator i =  cl.list->begin();
  register int k = 0;
  for (;;) {
    if (cl.fields[k])
      o << cl.manip << *i;
    k++;
    if (++i == cl.list->end()) break;
    if (cl.fields[k])
      o << cl.delem;
  }
  return o;
}

template <class Seq1, class Seq2, class Manip>
ostream& operator << (ostream &o, const equal_list_b<Seq1, Seq2, Manip> &el) {
  typename Seq1::const_iterator i = el.list1->begin();
  typename Seq2::const_iterator j = el.list2->begin();
  register int k = 0;
  for (;;) {
    if (el.fields[k]) 
      o << *i << el.equl << el.manip << *j;
    k++;
    j++;
    if (++i == el.list1->end()) break;
    if (el.fields[k])
      o << el.delem;
  }
  return o;
}

template <class Seq, class Manip>
ostream& operator << (ostream &o, const value_list_ba<Seq, Manip> &cl) {
  typename Seq::const_iterator i =  cl.list->begin();
  for (;;) {
    o << cl.manip << *i;
    if (++i == cl.list->end()) break;
    o << cl.delem;
  }
  return o;
}

template <class Seq1, class Seq2, class Manip>
ostream& operator << (ostream &o, const equal_list_ba<Seq1, Seq2, Manip> &el) {
  typename Seq1::const_iterator i = el.list1->begin();
  typename Seq2::const_iterator j = el.list2->begin();
  for (;;) {
    o << *i << el.equl << el.manip << *j;
    j++;
    if (++i == el.list1->end()) break;
    o << el.delem;
  }
  return o;
}

template <class Iter>
class simp_list_b {
public:
  Iter _begin;
  Iter _end;
public:
  typedef Iter const_iterator;
  simp_list_b(Iter b, Iter e) : _begin(b), _end(e) {}
  Iter begin() const {return _begin;}
  Iter end() const {return _end;}
};

//
// create vector
//

void create_vector(int size, vector<bool>& v, bool t0, 
		   bool t1=false, bool t2=false, bool t3=false, bool t4=false,
		   bool t5=false, bool t6=false, bool t7=false, bool t8=false,
		   bool t9=false, bool ta=false, bool tb=false, bool tc=false);

template <class Container>
void create_vector(const Container&c, vector<bool>&v, string s0, string s1, 
		   string s2, string s3, string s4, string s5, string s6,
		   string s7, string s8, string s9, string sa, string sb,
		   string sc);

//
// value list
//

template <class Seq>  
inline
value_list_ba<Seq,do_nothing_type0> 
value_list(const Seq &s, const char *d = ",") {
  return value_list_ba<Seq ,do_nothing_type0> (s, d, do_nothing);
}

template <class Seq, class Manip>  
inline
value_list_ba<Seq,Manip> 
value_list(const Seq &s, const char *d, Manip m) {
  return value_list_ba<Seq,Manip> (s, d, m);
}

template <class Seq, class Manip>
inline
value_list_b<Seq,Manip>
value_list(const Seq &s, const char *d, Manip m, const vector<bool> &vb)
{
  return value_list_b<Seq, Manip>(s, vb, d, m);
}

template <class Seq, class Manip>
value_list_b<Seq,Manip>
value_list(const Seq &s, const char *d, Manip m, bool t0, 
	   bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	   bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	   bool t9=false, bool ta=false, bool tb=false, bool tc=false)
{
  vector<bool> vb;
  create_vector(s.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  return value_list_b<Seq, Manip>(s, vb, d, m);
}

template <class Seq>
value_list_b<Seq,do_nothing_type0>
value_list(const Seq &s, const char *d, bool t0, 
	   bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	   bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	   bool t9=false, bool ta=false, bool tb=false, bool tc=false)
{
  vector<bool> vb;
  create_vector(s.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  return value_list_b<Seq, do_nothing_type0> (s, vb, d, do_nothing);
}

template <class Seq>
value_list_b<Seq,do_nothing_type0>
value_list(const Seq &s, bool t0, 
	   bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	   bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	   bool t9=false, bool ta=false, bool tb=false, bool tc=false)
{
  vector<bool> vb;
  create_vector(s.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  return value_list_b<Seq, do_nothing_type0> (s, vb, ",",do_nothing);
}

//
// equal list
//

template <class Seq1, class Seq2>  
inline
equal_list_ba<Seq1,Seq2,do_nothing_type0> 
equal_list(const Seq1 &s1, const Seq2 &s2, const char *d = ",", 
	   const char *e = " = ") {
  return equal_list_ba<Seq1,Seq2,do_nothing_type0> (s1, s2, d, e, do_nothing);
}

template <class Seq1, class Seq2, class Manip>
inline
equal_list_ba<Seq1,Seq2,Manip> 
equal_list(const Seq1 &s1, const Seq2 &s2, 
	   const char *d, const char *e, Manip m) {
  return equal_list_ba<Seq1,Seq2,Manip> (s1, s2, d, e, m);
}

template <class Seq1, class Seq2, class Manip>
inline
equal_list_b<Seq1, Seq2, Manip>
equal_list(const Seq1 &s1, const Seq2 &s2, const char *d, const char *e, 
	   Manip m, const vector<bool> &vb)
{
  return equal_list_b<Seq1,Seq2,Manip>(s1, s2, vb, d, e, m);
}

// complete
template <class Seq1, class Seq2, class Manip>
equal_list_b<Seq1, Seq2, Manip>
equal_list(const Seq1 &s1, const Seq2 &s2, const char *d, const char *e, 
	   Manip m, bool t0, 
	   bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	   bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	   bool t9=false, bool ta=false, bool tb=false, bool tc=false)
{
  vector<bool> vb;
  create_vector(s1.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  return equal_list_b<Seq1,Seq2,Manip>(s1, s2, vb, d, e, m);
}

// delem, equl
template <class Seq1, class Seq2>
equal_list_b<Seq1, Seq2, do_nothing_type0>
equal_list(const Seq1 &s1, const Seq2 &s2, const char *d, const char *e, 
	   bool t0, 
	   bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	   bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	   bool t9=false, bool ta=false, bool tb=false, bool tc=false)
{
  vector<bool> vb;
  create_vector(s1.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  return equal_list_b<Seq1,Seq2,do_nothing_type0>
    (s1, s2, vb, d, e, do_nothing);
}

// delem
template <class Seq1, class Seq2>
equal_list_b<Seq1,Seq2,do_nothing_type0>
equal_list(const Seq1 &s1, const Seq2 &s2, const char *d, bool t0, 
	   bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	   bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	   bool t9=false, bool ta=false, bool tb=false, bool tc=false)
{
  vector<bool> vb;
  create_vector(s1.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  return equal_list_b<Seq1,Seq2,do_nothing_type0> 
    (s1, s2, vb, d, " = ", do_nothing);
}

// nothing
template <class Seq1, class Seq2>
equal_list_b<Seq1,Seq2,do_nothing_type0>
equal_list(const Seq1 &s1, const Seq2 &s2, bool t0, 
	   bool t1=false, bool t2=false, bool t3=false, bool t4=false,
	   bool t5=false, bool t6=false, bool t7=false, bool t8=false,
	   bool t9=false, bool ta=false, bool tb=false, bool tc=false)
{
  vector<bool> vb;
  create_vector(s1.size(), vb, t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc);
  return equal_list_b<Seq1,Seq2,do_nothing_type0> 
    (s1, s2, vb,"," ," = " ,do_nothing);
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -