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

📄 setserve.cpp

📁 这是c++编程方面的名著的例子代码
💻 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 + -