edits
[iotcloud.git] / version2 / src / C / TransactionPart.h
1
2
3 class TransactionPart extends Entry {
4
5     // Max size of the part excluding the fixed size header
6     public static final int MAX_NON_HEADER_SIZE = 512;
7
8     private int64_t sequenceNumber = -1;
9     private int64_t machineId = -1;
10     private int64_t arbitratorId = -1;
11     private int64_t clientLocalSequenceNumber = -1; // Sequence number of the transaction that this is a part of
12     private int partNumber = -1; // Parts position in the
13     private Boolean isLastPart = false;
14
15     private Pair<Long, Long> transactionId = NULL;
16     private Pair<Long, Integer> partId = NULL;
17
18     private char[] data = NULL;
19
20     public TransactionPart(Slot s, int64_t _machineId, int64_t _arbitratorId, int64_t _clientLocalSequenceNumber, int _partNumber, char[] _data, Boolean _isLastPart) {
21         super(s);
22         machineId = _machineId;
23         arbitratorId = _arbitratorId;
24         clientLocalSequenceNumber = _clientLocalSequenceNumber;
25         partNumber = _partNumber;
26         data = _data;
27         isLastPart = _isLastPart;
28
29         transactionId = new Pair<Long, Long>(machineId, clientLocalSequenceNumber);
30         partId = new Pair<Long, Integer>(clientLocalSequenceNumber, partNumber);
31
32     }
33
34     public int getSize() {
35         if (data == NULL) {
36             return (4 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char));
37         }
38         return (4 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data.length;
39     }
40
41     public void setSlot(Slot s) {
42         parentslot = s;
43     }
44
45     public Pair<Long, Long> getTransactionId() {
46         return transactionId;
47     }
48
49     public int64_t getArbitratorId() {
50         return arbitratorId;
51     }
52
53     public Pair<Long, Integer> getPartId() {
54         return partId;
55     }
56
57     public int getPartNumber() {
58         return partNumber;
59     }
60
61     public int getDataSize() {
62         return data.length;
63     }
64
65     public char[] getData() {
66         return data;
67     }
68
69     public Boolean isLastPart() {
70         return isLastPart;
71     }
72
73     public int64_t getMachineId() {
74         return machineId;
75     }
76
77     public int64_t getClientLocalSequenceNumber() {
78         return clientLocalSequenceNumber;
79     }
80
81
82     public int64_t getSequenceNumber() {
83         return sequenceNumber;
84     }
85
86     public void setSequenceNumber(int64_t _sequenceNumber) {
87         sequenceNumber = _sequenceNumber;
88     }
89
90     static Entry decode(Slot s, ByteBuffer bb) {
91         int64_t sequenceNumber = bb.getLong();
92         int64_t machineId = bb.getLong();
93         int64_t arbitratorId = bb.getLong();
94         int64_t clientLocalSequenceNumber = bb.getLong();
95         int partNumber = bb.getInt();
96         int dataSize = bb.getInt();
97         Boolean isLastPart = (bb.get() == 1);
98         // Get the data
99         char[] data = new char[dataSize];
100         bb.get(data);
101
102         TransactionPart returnTransactionPart = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
103         returnTransactionPart.setSequenceNumber(sequenceNumber);
104
105         return returnTransactionPart;
106     }
107
108     public void encode(ByteBuffer bb) {
109         bb.put(Entry.TypeTransactionPart);
110         bb.putLong(sequenceNumber);
111         bb.putLong(machineId);
112         bb.putLong(arbitratorId);
113         bb.putLong(clientLocalSequenceNumber);
114         bb.putInt(partNumber);
115         bb.putInt(data.length);
116
117         if (isLastPart) {
118             bb.put((char)1);
119         } else {
120             bb.put((char)0);
121         }
122
123         bb.put(data);
124     }
125
126     public char getType() {
127         return Entry.TypeTransactionPart;
128     }
129
130     public Entry getCopy(Slot s) {
131
132         TransactionPart copyTransaction = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
133         copyTransaction.setSequenceNumber(sequenceNumber);
134
135         return copyTransaction;
136     }
137 }