tarantool-driver
Version:
Tarantool driver for 1.7+
78 lines (75 loc) • 2.47 kB
JavaScript
var { createBuffer } = require('./utils');
function SliderBuffer(){
this.bufferOffset = 0;
this.bufferLength = 0;
this.buffer = createBuffer(1024*10);
}
SliderBuffer.prototype.add = function(data, from, size){
var multiplierBuffer = 2;
var newBuffer;
var destLen;
var newLen;
if (typeof from !== 'undefined' && typeof size !== 'undefined')
{
if (this.bufferOffset + this.bufferLength + size < this.buffer.length)
{
data.copy(this.buffer, this.bufferOffset + this.bufferLength, from, from+size);
this.bufferLength+=size;
}
else
{
destLen = size + this.bufferLength;
if (this.buffer.length > destLen)
{
newBuffer = createBuffer(this.buffer.length * multiplierBuffer);
this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset+this.bufferLength);
data.copy(newBuffer, this.bufferLength, from, from+size);
this.buffer = newBuffer;
}
else
{
newLen = this.buffer.length*multiplierBuffer;
while(newLen < destLen)
newLen *= multiplierBuffer;
newBuffer = createBuffer(newLen);
this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset+this.bufferLength);
data.copy(newBuffer, this.bufferLength, from, from+size);
this.buffer = newBuffer;
}
this.bufferOffset = 0;
this.bufferLength = destLen;
}
}
else
{
if (this.bufferOffset + this.bufferLength + data.length < this.buffer.length)
{
data.copy(this.buffer, this.bufferOffset + this.bufferLength);
this.bufferLength+=data.length;
}
else
{
destLen = data.length + this.bufferLength;
if (this.buffer.length > destLen)
{
newBuffer = createBuffer(this.buffer.length * multiplierBuffer);
this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset+this.bufferLength);
data.copy(newBuffer, this.bufferLength);
this.buffer = newBuffer;
}
else
{
newLen = this.buffer.length*multiplierBuffer;
while(newLen < destLen)
newLen *= multiplierBuffer;
newBuffer = createBuffer(newLen);
this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset+this.bufferLength);
data.copy(newBuffer, this.bufferLength);
this.buffer = newBuffer;
}
this.bufferOffset = 0;
this.bufferLength = destLen;
}
}
};
module.exports = SliderBuffer;