+#include "RejectedMessage.h"
+#include "ByteBuffer.h"
/**
* Entry for tracking messages that the server rejected. We have to
* @version 1.0
*/
+Entry * RejectedMessage_decode(Slot * slot, ByteBuffer * bb) {
+ int64_t sequencenum=bb.getLong();
+ int64_t machineid=bb.getLong();
+ int64_t oldseqnum=bb.getLong();
+ int64_t newseqnum=bb.getLong();
+ char equalto=bb.get();
+ return new RejectedMessage(slot,sequencenum, machineid, oldseqnum, newseqnum, equalto==1);
+}
-class RejectedMessage extends Entry {
- /* Sequence number */
- int64_t sequencenum;
-
-
- /* Machine identifier */
- int64_t machineid;
- /* Oldest sequence number in range */
- int64_t oldseqnum;
- /* Newest sequence number in range */
- int64_t newseqnum;
- /* Is the machine identifier of the relevant slots equal to (or not
- * equal to) the specified machine identifier. */
- bool equalto;
- /* Set of machines that have not received notification. */
- HashSet<Long> watchset;
-
- RejectedMessage(Slot slot, int64_t _sequencenum, int64_t _machineid, int64_t _oldseqnum, int64_t _newseqnum, bool _equalto) {
- super(slot);
- sequencenum = _sequencenum;
- machineid=_machineid;
- oldseqnum=_oldseqnum;
- newseqnum=_newseqnum;
- equalto=_equalto;
- }
-
- int64_t getOldSeqNum() {
- return oldseqnum;
- }
-
- int64_t getNewSeqNum() {
- return newseqnum;
- }
-
- bool getEqual() {
- return equalto;
- }
-
- int64_t getMachineID() {
- return machineid;
- }
-
-
- int64_t getSequenceNumber() {
- return sequencenum;
- }
-
- static Entry decode(Slot slot, ByteBuffer bb) {
- int64_t sequencenum=bb.getLong();
- int64_t machineid=bb.getLong();
- int64_t oldseqnum=bb.getLong();
- int64_t newseqnum=bb.getLong();
- char equalto=bb.get();
- return new RejectedMessage(slot,sequencenum, machineid, oldseqnum, newseqnum, equalto==1);
- }
-
- void setWatchSet(HashSet<Long> _watchset) {
- watchset=_watchset;
- }
-
- void removeWatcher(int64_t machineid) {
- if (watchset.remove(machineid))
- if (watchset.isEmpty())
- setDead();
- }
-
- void encode(ByteBuffer bb) {
- bb.put(Entry.TypeRejectedMessage);
- bb.putLong(sequencenum);
- bb.putLong(machineid);
- bb.putLong(oldseqnum);
- bb.putLong(newseqnum);
- bb.put(equalto?(char)1:(char)0);
- }
-
- int getSize() {
- return 4*sizeof(int64_t) + 2*sizeof(char);
- }
+void RejectedMessage::removeWatcher(int64_t machineid) {
+ if (watchset.remove(machineid))
+ if (watchset.isEmpty())
+ setDead();
+}
- char getType() {
- return Entry.TypeRejectedMessage;
- }
-
- Entry getCopy(Slot s) {
- return new RejectedMessage(s,sequencenum, machineid, oldseqnum, newseqnum, equalto);
- }
+void RejectedMessage::encode(ByteBuffer * bb) {
+ bb.put(TypeRejectedMessage);
+ bb->putLong(sequencenum);
+ bb->putLong(machineid);
+ bb->putLong(oldseqnum);
+ bb->putLong(newseqnum);
+ bb->put(equalto?(char)1:(char)0);
}