📄 setserve.cpp
字号:
#include "ctthread.h"
#include <set.h>
#include "mtset.cpp"
#include <cstring.h>
#include <process.h>
#define INCL_DOSPROCESS
#include <os2.h>
template <class T> struct server_argument{
set<T,less<T> > A;
set<T,less<T> > B;
set<T,less<T> > Result;
};
template <class T> class set_server : virtual private mutex{
protected:
server_argument<T> Argument;
public:
set_server(void);
friend void intersection(void *X);
friend void setUnion(void *X);
friend void difference(void *X);
friend void membership(void *X);
set<T,less<T> > intersect(set<T,less<T> > X, set<T,less<T> > Y);
set<T,less<T> > setUnion(set<T,less<T> > &X, set<T,less<T> > &Y);
set<T,less<T> > difference(set<T,less<T> > X, set<T,less<T> > Y);
int membership(set<T,less<T> > X, set<T,less<T> > Y);
};
template <class T> set_server<T>::set_server(void)
{
}
template <class T> set<T,less<T> > set_server<T>::intersect(set<T,less<T> > X, set<T,less<T> > Y)
{
lock();
ct_thread Thread(8192);
Argument.A = X;
Argument.B = Y;
Thread.begin(intersection,this);
Thread.wait();
unlock();
return(Argument.Result);
}
template <class T> set<T,less<T> > set_server<T>::setUnion(set<T,less<T> > &X, set<T,less<T> > &Y)
{
lock();
ct_thread Thread(8192);
Argument.A = X;
Argument.B = Y;
Thread.begin(::setUnion,this);
Thread.wait();
unlock();
return(Argument.Result);
}
template <class T> int set_server<T>::membership(set<T,less<T> > X, set<T,less<T> > Y)
{
lock();
ct_thread Thread(8192);
Argument.A = X;
Argument.B = Y;
Thread.begin(::membership,this);
Thread.wait();
unlock();
if(Argument.Result.size()){
return(1);
}
else{
return(0);
}
}
template <class T> set<T,less<T> > set_server<T>::difference(set<T,less<T> > X, set<T,less<T> > Y)
{
lock();
ct_thread Thread(8192);
Argument.A = X;
Argument.B = Y;
Thread.begin(::difference,this);
Thread.wait();
unlock();
return(Argument.Result);
}
void intersection(void *X)
{
set_server<string> *Server;
Server = static_cast<set_server<string> *> (X);
mt_set<string> SafeSet(Server->Argument.A);
Server->Argument.Result = SafeSet.intersection(Server->Argument.B);
}
void setUnion(void *X)
{
set_server<string> *Server;
Server = static_cast<set_server<string> *> (X);
mt_set<string> SafeSet(Server->Argument.A);
Server->Argument.Result = SafeSet.setUnion(Server->Argument.B);
}
void difference(void *X)
{
set_server<string> *Server;
Server = static_cast<set_server<string> *> (X);
mt_set<string> SafeSet(Server->Argument.A);
Server->Argument.Result = SafeSet.difference(Server->Argument.B);
}
void membership(void *X)
{
set_server<string> *Server;
Server = static_cast<set_server<string> *> (X);
mt_set<string> SafeSet(Server->Argument.A);
if(SafeSet.membership(Server->Argument.B)){
Server->Argument.Result.insert("one");
}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -