CMH

You might also like

You are on page 1of 8

#include<iostream.h> #include<conio.h> #include<string.

h> class message { public: int type; //1:request 2:reply 3:release int senderid,receiverid; int id1,id2,id3; int rr1,rr2; message() { rr1=rr2=0; } message(int t,int sid,int i1,int i2,int i3,int rid=100) { type=t; senderid=sid; receiverid=rid; id1=i1; id2=i2; id3=i3; rr1=0; rr2=0; } void getdata() { cin>>type>>senderid>>id1>>id2>>id3;

} void display() { cout<<"\ntype"<<type<<"sender:"<<senderid<<"counters:"<<id1<<id2<<id3 <<"receiver"<<receiverid; } };

class requestqueue { public: message M[10]; int front, rear;

requestqueue() { front=-1; rear=-1; }

void enqueue(message m1) { if(front==-1) { M[++front]=m1; rear++; } else if(rear<9)

{ M[++rear]=m1; } }

message getfront() { if(front>-1) return M[front]; }

void dequeue() { if(front>=0) { front++; } }

void display() { for(int i=front;i<=rear;i++) M[i].display(); }

};

class site { public: int id; int c[3]; char status[30]; requestqueue R; site() { } site(int i) { id=i; c[0]=0; c[1]=0; c[2]=0; } message sendrequest() { cout<<id<<"is sending the request"; c[id-1]++; message r(1,id,c[0],c[1],c[2]); R.enqueue(r); r.display(); return r; }

message sendreply(int rid)

{ //sitemanager sm; c[id-1]++; message m(2,id,c[0],c[1],c[2],rid); m.display(); return m; }

message receiverequest(message r) { c[id-1]++; if (r.id1 > c[0] ) c[0]=r.id1; if (r.id2 > c[1] ) c[1]=r.id2; if (r.id3 > c[2] ) c[2]=r.id3; R.enqueue(r); return (sendreply(r.senderid));

int receivereply(message m) { message m1=R.getfront(); m1.display(); message temp= returnolder(m1,m); temp.display(); if((temp.id1==m.id1)&&(temp.id2==m.id2)&&(temp.id3==m.id3)) { strcpy(status,"\nentered");cout<<"status\n"<<status;return 1;

} else { strcpy(status, "\nwaiting");cout<<"status\n"<<status;return 0;

} }

struct message returnolder(message r1, message r2) { if((r1.id1>=r2.id1)&&(r1.id2>=r2.id2)&&(r1.id3>=r2.id3)) return r2; else if((r2.id1>=r1.id1)&&(r2.id2>=r1.id2)&&(r2.id3>=r1.id3)) return r1; }

};

void main() { int ch,id; site s1(1),s2(2),s3(3); int holder; clrscr(); do { cout<<"1: send request 2:Release CS 3: exit 4: display holder\n"; cout<<"please enter your choice ";

cin>>ch; switch(ch) { case 1: cout<<"enter the sender site id"; cin>>id; message r,reply1,reply2; if (id ==1) { r=s1.sendrequest(); reply1=s2.receiverequest(r); reply2=s3.receiverequest(r); if(s1.receivereply(r)==1) holder=1; } else if (id==2) { r=s2.sendrequest(); reply1=s1.receiverequest(r); reply2=s3.receiverequest(r); if(s2.receivereply(r)==1) holder=2; } else if (id ==3) { r=s3.sendrequest(); reply1=s2.receiverequest(r); reply2=s1.receiverequest(r); if(s3.receivereply(r)==1) holder=3; } break;

case 2: cout<<"\nholder:"<<holder; s1.R.dequeue(); s2.R.dequeue(); s3.R.dequeue(); s1.R.display(); s2.R.display(); s3.R.display();

break; } } while(ch!=3); }

You might also like