亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? query.h

?? 一本學C++很好書籍《C++ Primer》中所有源代碼
?? H
字號:
#ifndef QUERY_H_
#define QUERY_H_

#include <vector>
#include <iostream.h>
#include <set>
#include <string>
#include <utility>

typedef pair< short, short > location;

class Query {
public:
	virtual ~Query(){ delete _solution; }

	virtual void eval() = 0;
	virtual Query *clone() const = 0;
	virtual ostream& print( ostream &os ) const = 0;
	virtual bool add_op( Query* ) { return true; }
	virtual void display_solution( ostream &os = cout, int tabcnt = 0 );
	
	Query& operator=( const Query& );
	void  handle_tab( ostream &os, int tabcnt ) const;
	const set< short,less<short>,allocator >    *solution();
	const vector< location, allocator > *locations() const { return &_loc; }

	void lparen( short lp ) { _lparen = lp; }
	void rparen( short rp ) { _rparen = rp; }

	short lparen() { return _lparen; }
	short rparen() { return _rparen; }

	void print_lparen( short cnt, ostream& os ) const;
	void print_rparen( short cnt, ostream& os ) const;

	void display_partial_solution();

protected:
	// copy constructor and copy assignment operator?
	Query() : _lparen( 0 ), _rparen( 0 ), _solution( 0 ) {}
	Query( const Query &rhs )
		: _loc( rhs._loc ), _solution( 0 ),
		  _lparen( rhs._lparen ), _rparen( rhs._rparen )
	{}

	Query( const vector<location, allocator> &loc )
		: _loc( loc ), _solution( 0 ), 
		  _lparen( 0 ), _rparen( 0 ) 
	{}

	set<short,less<short>,allocator>* 
		_vec2set( const vector<location,allocator>* );

	short                             _lparen;
	short                             _rparen;

	vector<location,allocator>        _loc; 
	set<short,less<short>,allocator> *_solution;
};

inline ostream&
operator<<( ostream &os, const Query &q ) { return q.print( os ); }

class NameQuery : public Query {
public:
	NameQuery( string name ) :  _name( name ) {}
	NameQuery( string name, const vector<location, allocator> &loc )
		 : Query( loc ), _name( name ) {}

	virtual void eval(); 
	virtual ostream& print( ostream &os ) const;
	virtual void display_solution( ostream &os = cout, int tabcnt = 0 );
	virtual Query *clone() const
		{ return new NameQuery( *this ); }
	
	string name() const { return _name; }
protected:
	string _name;
};

class NotQuery : public Query {
public:
	NotQuery( Query *op = 0 ) : _op( op ) {}
	NotQuery( const NotQuery& );
	~NotQuery() { delete _op; }

	virtual void eval(); 
	virtual ostream& print( ostream &os ) const;
	virtual bool add_op( Query* );
	virtual void display_solution( ostream &os = cout, int tabcnt = 0 );
	virtual Query *clone() const;
	
	NotQuery &operator=( const NotQuery& );
	const Query *op() const { return _op; }
	static void all_locs( const vector< location, allocator > *ploc ) 
		        { if ( !_all_locs ) _all_locs = ploc; }
protected:
	Query *_op;
	static const vector< location, allocator > *_all_locs;
};

class OrQuery : public Query {
public:
	OrQuery( Query *lop = 0, Query *rop = 0 ) 
		: _lop( lop ), _rop( rop ) {}

	OrQuery( const OrQuery& );
	~OrQuery() { delete _lop; delete _rop; }

	OrQuery& operator=( const OrQuery& );

	virtual void eval(); 
	virtual ostream& print( ostream &os ) const;
	virtual bool add_op( Query* );
	virtual void display_solution( ostream &os=cout, int tabcnt=0 );
	virtual Query* clone() const;
	
	const Query *rop() const { return _rop; }
	const Query *lop() const { return _lop; }

protected:
	Query *_lop;
	Query *_rop;
};

class AndQuery : public Query {
public:
	AndQuery( Query *lop = 0, Query *rop = 0 ) 
		: _lop( lop ), _rop( rop ) {}
	~AndQuery() { delete _lop; delete _rop; }

	AndQuery( const AndQuery& );
	AndQuery& operator=( const AndQuery& );

	virtual void eval(); 
	virtual ostream& print( ostream &os ) const;
	virtual bool add_op( Query* );
	virtual void display_solution( ostream &os=cout, int tabcnt=0 );
	virtual Query* clone() const;
	
	const Query *rop() const { return _rop; }
	const Query *lop() const { return _lop; }

	static void max_col( const vector< int, allocator > *pcol )
			{ if ( !_max_col ) _max_col = pcol; }

protected:
	Query *_lop;
	Query *_rop;
	static const vector< int, allocator > *_max_col;
};

class less_than_pair {
public:
	bool operator()( location loc1, location loc2 )
	{
		return (( loc1.first < loc2.first ) ||
			( loc1.first == loc2.first ) &&
			( loc1.second < loc2.second ));
	}
};

inline Query&
Query::
operator=( const Query &rhs )
{
        if ( &rhs != this )
        {
                _lparen = rhs._lparen;
                _rparen = rhs._rparen;
                _loc = rhs._loc;

                delete _solution;

                _solution = 0;
        }

        return *this;
};

inline 
const set< short, less<short>,allocator >*
Query::
solution() 
{
	if ( !_solution ) 
		_solution = _vec2set( &_loc );
	return _solution;
}

inline void 
Query::
display_partial_solution() 
{
	cout << "\t"  << *this
	     << " ( " << solution()->size() 
	     << " ) lines match" << endl;
}

inline NotQuery&
NotQuery:: 
operator=( const NotQuery &rhs )
{
	if ( &rhs != this )
	{
		this->Query::operator=( rhs );
		// delete _op;
		_op = rhs._op->clone();
	}

	return *this;
};

inline NotQuery::
NotQuery( const NotQuery &rhs )
	: Query( rhs )
{
	_op = rhs._op->clone();
};

inline AndQuery&
AndQuery::
operator=( const AndQuery &rhs )
{
        if ( &rhs != this )
        {
                this->Query::operator=( rhs );
                _lop = rhs._lop->clone();
                _rop = rhs._rop->clone();
        }

        return *this;
};

inline
AndQuery::
AndQuery( const AndQuery &rhs )
        : Query( rhs )
{
        _lop = rhs._lop->clone();
        _rop = rhs._rop->clone();
};

inline OrQuery&
OrQuery::
operator=( const OrQuery &rhs )
{
        if ( &rhs != this )
        {
                this->Query::operator=( rhs );
                _lop = rhs._lop->clone();
                _rop = rhs._rop->clone();
        }

        return *this;
};

inline OrQuery::
OrQuery( const OrQuery &rhs )
        : Query( rhs )
{
        _lop = rhs._lop->clone();
        _rop = rhs._rop->clone();
};

inline bool
AndQuery::
add_op( Query *op )
{
	bool status = false;
	if ( !_lop ) {
		_lop = op; status = true;
	}
	else
	if ( ! _rop ) {
		_rop = op; status = true; 
	}
	return status;
}

inline bool
OrQuery::
add_op( Query *op )
{
	bool status = false;
	if ( !_lop ) {
		_lop = op; status = true;
	}
	else
	if ( ! _rop ) {
		_rop = op; status = true; 
	}
	return status;
}

inline bool
NotQuery::
add_op( Query *op )
{
	bool status = false;
	if ( !_op ) {
		_op = op; status = true;
	}
	return status;
}

inline void
AndQuery::
display_solution( ostream &os, int tabcnt )
{
	handle_tab( os, tabcnt );
	os << "&& solution line set: ";
	Query::display_solution( os, 0 );
	_lop->display_solution( os, tabcnt+1 );
	_rop->display_solution( os, tabcnt+1 );
}

inline void
OrQuery::
display_solution( ostream &os, int tabcnt )
{
	handle_tab( os, tabcnt );
	os << "|| solution line set: ";
	Query::display_solution( os, 0 );
	_lop->display_solution( os, tabcnt+1 );
	_rop->display_solution( os, tabcnt+1 );
}

inline void
NotQuery::
display_solution( ostream &os, int tabcnt )
{
	handle_tab( os, tabcnt );
	os << "! solution line set: ";
	Query::display_solution( os, 0 );
	_op->display_solution( os, tabcnt+1 );
}

inline void
NameQuery::
display_solution( ostream &os, int tabcnt )
{
	handle_tab( os, tabcnt );
	os << _name << " solution line set: ";
	Query::display_solution( os, 0 );
}

inline ostream&
AndQuery::
print( ostream &os ) const
{
	if ( _lparen ) 
	     print_lparen( _lparen, os );

	_lop->print( os );
	os << " && ";
	_rop->print( os );

	if ( _rparen ) 
	     print_rparen( _rparen, os );

	return os;
}

inline ostream&
OrQuery::
print( ostream &os ) const
{
        if ( _lparen )
             print_lparen( _lparen, os );

	_lop->print( os );
	os << " || ";
	_rop->print( os );

        if ( _rparen )
             print_rparen( _rparen, os );

	return os;
}

inline ostream&
NotQuery::
print( ostream &os ) const
{
	os << " ! ";

        if ( _lparen )
             print_lparen( _lparen, os );

	_op->print( os );

        if ( _rparen )
             print_rparen( _rparen, os );

	return os;
}

inline ostream&
NameQuery::
print( ostream &os ) const
{
        if ( _lparen )
             print_lparen( _lparen, os );

	os << _name;

        if ( _rparen )
             print_rparen( _rparen, os );

	return os;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久se精品一区精品二区| 欧美日韩亚洲国产综合| 欧美视频在线不卡| 972aa.com艺术欧美| 懂色一区二区三区免费观看| 国内成人精品2018免费看| 蜜桃视频一区二区| 狠狠色综合日日| 国产一区二区三区久久悠悠色av| 久久国产精品99久久久久久老狼| 欧美一区二区三区啪啪| 日韩一区二区三区精品视频| 欧美一卡2卡3卡4卡| 久久国产剧场电影| 国产黄人亚洲片| 欧美三级午夜理伦三级中视频| 丝袜美腿亚洲色图| 麻豆精品新av中文字幕| 国内成人免费视频| 粉嫩av一区二区三区| 国产精品久久久久久久久免费桃花 | 亚洲综合在线五月| 一本到不卡精品视频在线观看| 色综合久久久网| 欧美一区二区在线播放| 制服丝袜国产精品| 久久青草欧美一区二区三区| 国产精品国模大尺度视频| 亚洲综合自拍偷拍| 国产一区视频导航| 91久久精品国产91性色tv | 亚洲欧美一区二区三区久本道91| 一区二区三区精品视频| 精品一区在线看| 在线观看视频91| 久久久久久99精品| 国产清纯在线一区二区www| 亚洲自拍偷拍av| 国产一区二区女| 欧美浪妇xxxx高跟鞋交| 欧美激情一区二区三区全黄 | 欧美一级免费大片| 成人av在线资源网站| 一本久久综合亚洲鲁鲁五月天 | 欧美日韩国产一级| 欧美日本精品一区二区三区| 国产精品视频九色porn| 视频一区在线播放| 成人福利在线看| 图片区日韩欧美亚洲| 波多野洁衣一区| 久久―日本道色综合久久| 亚洲一二三四区| 成人av电影在线| 国产欧美一区二区三区鸳鸯浴| 亚瑟在线精品视频| 最好看的中文字幕久久| 国产在线精品一区二区不卡了| 在线一区二区观看| 久久精品人人爽人人爽| 另类调教123区| 67194成人在线观看| 亚洲国产视频直播| 亚洲综合视频在线观看| 韩国女主播一区| 久久综合久久久久88| 免费在线一区观看| 日韩欧美中文一区二区| 午夜视频一区二区三区| 一本大道av一区二区在线播放 | 成人精品高清在线| 欧美一级日韩一级| 久久久久国产精品麻豆| 久久精品久久99精品久久| 色偷偷久久人人79超碰人人澡| 久久影院电视剧免费观看| 亚洲成年人网站在线观看| av激情综合网| 欧美极品aⅴ影院| 国产综合色在线| 欧美一区二区私人影院日本| 1000精品久久久久久久久| 国产91在线观看| 欧美激情一区三区| 国产白丝精品91爽爽久久| 亚洲精品在线观看网站| 日韩高清电影一区| 91精品国产综合久久福利软件 | 91丨porny丨国产| 精品久久久久久久久久久院品网 | 玉足女爽爽91| 91色.com| 亚洲精品国产a久久久久久| 99视频精品在线| 国产精品免费aⅴ片在线观看| 在线视频欧美精品| 日韩av网站免费在线| 91精品国产综合久久福利 | 日本精品视频一区二区| 国产人久久人人人人爽| 国产成人精品亚洲777人妖 | 蜜臀久久99精品久久久久久9 | 在线观看不卡视频| 亚洲国产精品尤物yw在线观看| 欧美伊人精品成人久久综合97| 一卡二卡欧美日韩| 91在线观看地址| 日韩一区二区三区在线观看| 国产精品精品国产色婷婷| 成人国产精品免费观看动漫| 亚洲九九爱视频| 欧美男男青年gay1069videost| 石原莉奈在线亚洲二区| 欧美成人一区二区三区片免费| 黄一区二区三区| 亚洲女爱视频在线| 99国内精品久久| 国产一区二区三区黄视频| 中文字幕在线观看一区二区| 色域天天综合网| 久久黄色级2电影| 综合婷婷亚洲小说| 欧美日本一区二区三区四区| 国产一区二区在线看| 综合av第一页| 欧美性色黄大片手机版| 国产成人免费高清| 午夜精品福利在线| 久久久久久亚洲综合影院红桃| 不卡一卡二卡三乱码免费网站| 亚洲福利国产精品| 国产日韩欧美精品电影三级在线| 91麻豆精东视频| 高清不卡在线观看av| 天堂精品中文字幕在线| 国产精品免费丝袜| 日韩欧美色综合| 日韩色在线观看| 亚洲色图欧美偷拍| 日韩欧美国产综合一区| 91网站最新地址| 高潮精品一区videoshd| 青青草91视频| 一区二区三区中文在线观看| 欧美精品一区二区蜜臀亚洲| 99久久99久久免费精品蜜臀| 激情综合五月婷婷| 久久精品男人天堂av| 成人福利视频在线| 开心九九激情九九欧美日韩精美视频电影 | 欧美精品一区二区久久婷婷| 欧洲国内综合视频| 成人福利视频在线| 蜜桃av一区二区三区电影| 日韩二区三区在线观看| 成人美女在线观看| 日本成人在线一区| 精品一区二区三区不卡| 免费成人在线播放| 中文字幕一区二区5566日韩| 久久久噜噜噜久久人人看 | xvideos.蜜桃一区二区| 日韩欧美在线综合网| 日本sm残虐另类| 亚洲一级不卡视频| 亚洲一区二区三区视频在线 | 日本va欧美va欧美va精品| 亚洲免费大片在线观看| 亚洲综合一区二区| 亚洲日韩欧美一区二区在线| 国产欧美一区二区精品婷婷 | 欧美专区亚洲专区| 在线观看不卡一区| 日韩一级免费一区| wwwwxxxxx欧美| 国产欧美精品一区aⅴ影院| 国产视频一区二区在线观看| 国产午夜亚洲精品理论片色戒| 精品久久久久久久久久久院品网| 日韩亚洲欧美高清| 秋霞午夜鲁丝一区二区老狼| 日本大胆欧美人术艺术动态| 久久99热这里只有精品| 六月丁香婷婷久久| 美女视频网站久久| 国产成人精品亚洲777人妖| 97久久精品人人爽人人爽蜜臀| 91蜜桃免费观看视频| 欧美日韩日日摸| 日韩精品一区二区三区在线观看 | 一区二区三区欧美在线观看| 亚洲电影欧美电影有声小说| 精品伊人久久久久7777人| 成人网男人的天堂| 欧美日韩高清一区二区| 精品国产伦一区二区三区观看方式 | 中文字幕欧美国产| 亚洲免费视频中文字幕| 亚洲欧美另类综合偷拍| 韩国欧美一区二区|