1.Byte[] -> Uint8Array
2.Static decode method in slot.js takes the table, uint8array and the secret key as the argument
-3.Vector<Entries> = array of entries []
\ No newline at end of file
+3.Vector<Entries> = array of entries []
+4.A Byte in a 'number' in javascript
\ No newline at end of file
this.oldestseqn = 0;
}
size(){
- if(this.head>=tail){
- return head-tail;
+ if(this.head>=this.tail){
+ return this.head-this.tail;
}
return (this.array.length + this.head - this.tail);
}
return null;
}
- if(this.head >= this.tail && index >= head){
+ if(this.head >= this.tail && index >= this.head){
return null;
}
--- /dev/null
+class SlotIndexer{
+ constructor(_updates,_buffer){
+ // updates is an array of slot objects
+ // buffer is an instanceof slotbuffer constructor object in slotbuffer.js
+ this.updates = _updates;
+ if(_buffer && _buffer instanceof SlotBuffer){
+ this.buffer = _buffer;
+ }else{
+ throw new Error("Argument error Buffer should be an instance of SlotBuffer");
+ }
+ this.firstslotseqnum = this.updates[0].getSequenceNumber();
+ }
+
+ getSlot(seqnum){
+ if(seqnum >= this.firstslotseqnum){
+ var offset = seqnum - this.firstslotseqnum;
+ if(offset >= this.updates.length){
+ throw new Error('Invalid Slot Sequence Number Reference');
+ }else{
+ return this.updates[offset];
+ }
+ }else{
+ return this.buffer.getSlot(seqnum);
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+class TableStatus extends Entry{
+ constructor(slot,_maxslots){
+ super(slot);
+ this.maxslots = _maxslots;
+ }
+ getMaxSlots(){
+ return this.maxslots;
+ }
+ static decode(slot,bb){
+ //bb is an object of the type bytebuffer See main.js file and its require section
+ //for more details
+ if(!(bb instanceof ByteBuffer && slot instanceof Slot)){
+ throw new Error('Argument Error: bb is not an instanceof Bytebuffer');
+ }
+ this.maxslots = bb.readByte();
+ return new TableStatus(slot,this.maxslots);
+ }
+ encode(bb){
+ bb.writeByte(Entry.TypeTableStatus);
+ bb.writeInt8(this.maxslots);
+ }
+ getSize(){
+ return 4+1;
+ }
+ getType(){
+ return Entry.TypeTableStatus;
+ }
+ getcopy(s){
+ if(!(s instanceof Slot)){
+ throw new Error('Argument Error: s is not an instanceof Slot');
+ }
+ return new TableStatus(s,this.maxslots);
+ }
+}
\ No newline at end of file
_createClass(SlotBuffer, [{
key: "size",
value: function size() {
- if (this.head >= tail) {
- return head - tail;
+ if (this.head >= this.tail) {
+ return this.head - this.tail;
}
return this.array.length + this.head - this.tail;
}
return null;
}
- if (this.head >= this.tail && index >= head) {
+ if (this.head >= this.tail && index >= this.head) {
return null;
}
--- /dev/null
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var SlotIndexer = function () {
+ function SlotIndexer(_updates, _buffer) {
+ _classCallCheck(this, SlotIndexer);
+
+ // updates is an array of slot objects
+ // buffer is an instanceof slotbuffer constructor object in slotbuffer.js
+ this.updates = _updates;
+ if (_buffer && _buffer instanceof SlotBuffer) {
+ this.buffer = _buffer;
+ } else {
+ throw new Error("Argument error Buffer should be an instance of SlotBuffer");
+ }
+ this.firstslotseqnum = this.updates[0].getSequenceNumber();
+ }
+
+ _createClass(SlotIndexer, [{
+ key: "getSlot",
+ value: function getSlot(seqnum) {
+ if (seqnum >= this.firstslotseqnum) {
+ var offset = seqnum - this.firstslotseqnum;
+ if (offset >= this.updates.length) {
+ throw new Error('Invalid Slot Sequence Number Reference');
+ } else {
+ return this.updates[offset];
+ }
+ } else {
+ return this.buffer.getSlot(seqnum);
+ }
+ }
+ }]);
+
+ return SlotIndexer;
+}();
\ No newline at end of file
--- /dev/null
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var TableStatus = function (_Entry) {
+ _inherits(TableStatus, _Entry);
+
+ function TableStatus(slot, _maxslots) {
+ _classCallCheck(this, TableStatus);
+
+ var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(TableStatus).call(this, slot));
+
+ _this.maxslots = _maxslots;
+ return _this;
+ }
+
+ _createClass(TableStatus, [{
+ key: 'getMaxSlots',
+ value: function getMaxSlots() {
+ return this.maxslots;
+ }
+ }, {
+ key: 'encode',
+ value: function encode(bb) {
+ bb.writeByte(Entry.TypeTableStatus);
+ bb.writeInt8(this.maxslots);
+ }
+ }, {
+ key: 'getSize',
+ value: function getSize() {
+ return 4 + 1;
+ }
+ }, {
+ key: 'getType',
+ value: function getType() {
+ return Entry.TypeTableStatus;
+ }
+ }, {
+ key: 'getcopy',
+ value: function getcopy(s) {
+ if (!(s instanceof Slot)) {
+ throw new Error('Argument Error: s is not an instanceof Slot');
+ }
+ return new TableStatus(s, this.maxslots);
+ }
+ }], [{
+ key: 'decode',
+ value: function decode(slot, bb) {
+ //bb is an object of the type bytebuffer See main.js file and its require section
+ //for more details
+ if (!(bb instanceof ByteBuffer && slot instanceof Slot)) {
+ throw new Error('Argument Error: bb is not an instanceof Bytebuffer');
+ }
+ this.maxslots = bb.readByte();
+ return new TableStatus(slot, this.maxslots);
+ }
+ }]);
+
+ return TableStatus;
+}(Entry);
\ No newline at end of file