fpmas 1.6
client_server.h
Go to the documentation of this file.
1#ifndef FPMAS_CLIENT_SERVER_API_H
2#define FPMAS_CLIENT_SERVER_API_H
3
8#include "enums.h"
10
11namespace fpmas { namespace synchro { namespace hard { namespace api {
15 struct MutexRequest {
20 static const int LOCAL;
28 int source;
33
42 : id(id), source(source), type(type) {}
43
53 bool operator==(const MutexRequest& other) const {
54 return
55 (this->type == other.type) &&
56 (this->id == other.id) &&
57 (this->source == other.source);
58 }
59 };
60
72 template<typename T>
74 public:
82 virtual T read(DistributedId id, int location) = 0;
83
90 virtual void releaseRead(DistributedId id, int location) = 0;
91
99 virtual T acquire(DistributedId id, int location) = 0;
100
111 virtual void releaseAcquire(DistributedId id, const T& updated_data, int location) = 0;
112
119 virtual void lock(DistributedId id, int location) = 0;
120
127 virtual void unlock(DistributedId id, int location) = 0;
128
135 virtual void lockShared(DistributedId id, int location) = 0;
136
143 virtual void unlockShared(DistributedId id, int location) = 0;
144
145 virtual ~MutexClient() {}
146 };
147
161 class Server {
162 public:
168 virtual void setEpoch(Epoch epoch) = 0;
174 virtual Epoch getEpoch() const = 0;
175
183 virtual void handleIncomingRequests() = 0;
184
185 virtual ~Server() {}
186 };
187
188 template<typename T> class HardSyncMutex;
189
207 template<typename T>
208 class MutexServer : public Server {
209 friend HardSyncMutex<T>;
210 protected:
216 void lock(HardSyncMutex<T>* mutex) {mutex->_lock();}
222 void lockShared(HardSyncMutex<T>* mutex) {mutex->_lockShared();}
228 void unlock(HardSyncMutex<T>* mutex) {mutex->_unlock();}
235 public:
246 virtual void manage(DistributedId id, HardSyncMutex<T>* mutex) = 0;
253 virtual void remove(DistributedId id) = 0;
254
271 virtual void wait(const MutexRequest& request) = 0;
272
281 virtual void notify(DistributedId id) = 0;
282
283
284 virtual ~MutexServer() {}
285 };
286
293 template<typename T>
295 public:
316 virtual void link(const fpmas::api::graph::DistributedEdge<T>* edge) = 0;
317
338 virtual void unlink(const fpmas::api::graph::DistributedEdge<T>* edge) = 0;
339
370
371 virtual ~LinkClient() {};
372 };
373
379 class LinkServer : public Server {
380 public:
397 virtual void lockUnlink(DistributedId edge_id) = 0;
398
406 virtual bool isLockedUnlink(DistributedId edge_id) = 0;
407
414 virtual void unlockUnlink(DistributedId edge_id) = 0;
415
427 virtual void lockRemoveNode(DistributedId node_id) = 0;
434 virtual bool isLockedRemoveNode(DistributedId node_id) = 0;
441 virtual void unlockRemoveNode(DistributedId node_id) = 0;
442 };
443
448 public:
465 virtual void terminate(Server& server) = 0;
466
467 virtual ~TerminationAlgorithm() {};
468 };
469}}}}
470#endif
Definition: distributed_edge.h:91
Definition: distributed_id.h:89
Definition: distributed_node.h:28
virtual void _unlockShared()=0
virtual void _unlock()=0
virtual void _lock()=0
virtual void _lockShared()=0
Definition: hard_sync_mutex.h:25
Definition: hard_sync_mode.h:24
Definition: client_server.h:294
virtual void unlink(const fpmas::api::graph::DistributedEdge< T > *edge)=0
virtual void removeNode(const fpmas::api::graph::DistributedNode< T > *node)=0
virtual void link(const fpmas::api::graph::DistributedEdge< T > *edge)=0
Definition: client_server.h:379
virtual void lockUnlink(DistributedId edge_id)=0
virtual bool isLockedUnlink(DistributedId edge_id)=0
virtual bool isLockedRemoveNode(DistributedId node_id)=0
virtual void unlockUnlink(DistributedId edge_id)=0
virtual void unlockRemoveNode(DistributedId node_id)=0
virtual void lockRemoveNode(DistributedId node_id)=0
Definition: client_server.h:73
virtual void unlockShared(DistributedId id, int location)=0
virtual T acquire(DistributedId id, int location)=0
virtual void lockShared(DistributedId id, int location)=0
virtual void unlock(DistributedId id, int location)=0
virtual void releaseAcquire(DistributedId id, const T &updated_data, int location)=0
virtual T read(DistributedId id, int location)=0
virtual void releaseRead(DistributedId id, int location)=0
virtual void lock(DistributedId id, int location)=0
Definition: client_server.h:208
virtual void manage(DistributedId id, HardSyncMutex< T > *mutex)=0
virtual void wait(const MutexRequest &request)=0
virtual void remove(DistributedId id)=0
void unlock(HardSyncMutex< T > *mutex)
Definition: client_server.h:228
void unlockShared(HardSyncMutex< T > *mutex)
Definition: client_server.h:234
void lockShared(HardSyncMutex< T > *mutex)
Definition: client_server.h:222
virtual void notify(DistributedId id)=0
void lock(HardSyncMutex< T > *mutex)
Definition: client_server.h:216
Definition: client_server.h:161
virtual void handleIncomingRequests()=0
virtual Epoch getEpoch() const =0
virtual void setEpoch(Epoch epoch)=0
virtual void terminate(Server &server)=0
Epoch
Definition: enums.h:15
MutexRequestType
Definition: enums.h:54
Definition: fpmas.cpp:3
Definition: client_server.h:15
bool operator==(const MutexRequest &other) const
Definition: client_server.h:53
MutexRequestType type
Definition: client_server.h:32
static const int LOCAL
Definition: client_server.h:20
DistributedId id
Definition: client_server.h:24
int source
Definition: client_server.h:28
MutexRequest(DistributedId id, int source, MutexRequestType type)
Definition: client_server.h:41