Query_Base.h
#include <iostream>
#include <set>
#ifndef QUERY_BASE_H
#define QUERY_BASE_H
class Query_Base
{
public:
virtual std::set<size_t> GetLineSet() =0;
virtual std::ostream & display(std::ostream &) const=0;
virtual ~Query_Base(){}
};
#endif
Or_Query.h
#ifndef OR_QUERY_H
#define OR_QUERY_H
#include "Query.h"
#include <iostream>
#include <set>
#include "Binary_Query.h"
class Or_Query:public Binary_Query
{
public:
Or_Query(const Query & lhss,const Query & rhss):Binary_Query(lhss,rhss,"|"){}
public:
std::set<size_t> GetLineSet();
private:
};
std::set<size_t> Or_Query::GetLineSet()
{
std::set<size_t> reSet,lSet=lhs.GetLineSet(),rSet=rhs.GetLineSet();
reSet.insert(lSet.begin(),lSet.end());
reSet.insert(rSet.begin(),rSet.end());
return reSet;
}
#endif
And_Query.h
#include "Query.h"
#include <iostream>
#include <set>
#include <algorithm>
#ifndef AND_QUERY_H
#define AND_QUERY_H
#include "Binary_Query.h"
class And_Query:public Binary_Query
{
public:
And_Query(Query & lpara,Query & rpara):Binary_Query(lpara,rpara,"&"){}
public:
std::set<size_t> GetLineSet();
private:
};
std::set<size_t> And_Query::GetLineSet()
{
std::set<size_t> lset=lhs.GetLineSet(),rset=rhs.GetLineSet(),rSet;
std::set_intersection(lset.begin(),lset.end(),rset.begin(),rset.end(),std::inserter(rSet,rSet.begin()));
return rSet;
}
#endif
Binary_Query.h
#include <iostream>
#include <set>
#ifndef BINARY_QUERY_H
#define BINARY_QUERY_H
#include "Query_Base.h"
#include "Query.h"
class Query;
class Binary_Query : public Query_Base
{
public:
Binary_Query(const Query & lh,const Query & rh, s