@@ -36,8 +36,11 @@ class Rubis : public ReplicatedObject
36
36
CLOSE_AUCTION=5 ,
37
37
QUERY = 6
38
38
};
39
- std::atomic<int > auction [200 ][4 ]={{0 }}; // auctionid-quantity-user propsed max value-max value -valid auction
40
- std::atomic<bool > registeredusers [200 ]={false };
39
+ std::atomic<int > auction [200 ][2 ]={{0 }}; // auctionid-user propsed max value-max value //item id eaqual to auciton id
40
+ std::atomic<int > directbuysell [200 ]= {0 };
41
+ std::set<std::int > registeredusers;
42
+ std::set<std::int > openauctions;
43
+ std::set<std::int > closeauctions;
41
44
int userscounter=0 ;
42
45
// std::set<std::string> movies;
43
46
// std::set<std::string> customers;
@@ -72,20 +75,21 @@ class Rubis : public ReplicatedObject
72
75
synch_groups.push_back (g2);
73
76
74
77
for (int i = 0 ; i < 100 ; i++) {
75
- auction[i][0 ] = 1000 ;
76
- auction[i][3 ] =1 ; // auctions that are open.
77
- registeredusers[i] = true ;
78
+ directbuysell[i] = 1000 ;
79
+ registeredusers.insert (i);
78
80
}
79
81
}
80
82
81
83
Rubis (Rubis &obj) : ReplicatedObject(obj)
82
84
{
83
85
// state
84
86
std::memcpy (auction, obj.auction , sizeof (auction));
85
- std::memcpy (registeredusers, obj.registeredusers , sizeof (registeredusers));
87
+ std::memcpy (directbuysell, obj.directbuysell , sizeof (directbuysell));
88
+ registeredusers = obj.registeredusers ;
89
+ openauctions= obj.openauctions ;
90
+ closeauctions= obj.closeAction ;
91
+
86
92
userscounter =obj.userscounter ;
87
- // auction = obj.auction;
88
- // registeredusers = obj.registeredusers;
89
93
}
90
94
91
95
virtual void toString ()
@@ -98,43 +102,47 @@ class Rubis : public ReplicatedObject
98
102
// 0
99
103
void sellItem (int s_id, int value)
100
104
{
101
- if (auction[ s_id][ 3 ] ==1 ){
102
- auction [s_id][ 0 ]=value;
105
+ if (registeredusers. count ( s_id) ==1 ){
106
+ directbuysell [s_id]=value;
103
107
}
104
108
}
105
109
// 1
106
110
void storeBuyNow (int s_id, int value)
107
111
{
108
- if (auction [s_id][ 0 ] >value)
109
- auction [s_id][ 0 ]=auction [s_id][ 0 ]-value;
112
+ if (directbuysell [s_id]>value && registeredusers. count (s_id)== 1 )
113
+ directbuysell [s_id]=directbuysell [s_id]-value;
110
114
}
111
115
// 2
112
116
void registerUser (int u_id)
113
117
{
114
- registeredusers[u_id]=true ;
115
- userscounter++;
118
+ if (registeredusers.count (u_id)==0 ){
119
+ registeredusers.insert (u_id);
120
+ userscounter++;
121
+ }
116
122
}
117
123
// 3
118
124
void placeBid (int a_id, int u_id, int value)
119
125
{
120
- if (registeredusers[ u_id] && auction[ a_id][ 3 ] ==1 ){
121
- if (auction[a_id][2 ]<value){
122
- auction[a_id][1 ]=u_id;
123
- auction[a_id][2 ]=value;
126
+ if (registeredusers. count ( u_id)== 1 && openauction. count ( a_id) ==1 && closeauction. count (a_id)== 0 ){
127
+ if (auction[a_id][1 ]<value){
128
+ auction[a_id][0 ]=u_id;
129
+ auction[a_id][1 ]=value;
124
130
}
125
131
}
126
132
}
127
133
128
134
void openAction (int a_id, int stock)
129
135
{
130
- if (auction[ a_id][ 3 ] ==0 ){
136
+ if (openauction. count ( a_id)== 0 && closeauction. count (a_id) ==0 ){
131
137
auction[a_id][0 ]=stock;
132
- auction[ a_id][ 3 ]= 1 ;
138
+ openauction. insert ( a_id) ;
133
139
}
134
140
}
135
141
void closeAction (int a_id)
136
142
{
137
- auction[a_id][3 ]=0 ;
143
+ if (openauction.count (a_id)==1 && closeauction.count (a_id)==0 ){
144
+ closeauction.insert (a_id);
145
+ }
138
146
}
139
147
140
148
Rubis query () { return *this ; }
0 commit comments