Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -246,13 +246,7 @@ public static MessageBuffer wrap(byte[] array, int offset, int length)
*/
public static MessageBuffer wrap(ByteBuffer bb)
{
MessageBuffer b = newMessageBuffer(bb);
if (bb.position() > 0 || bb.limit() != bb.capacity()) {
return b.slice(bb.position(), bb.remaining());
}
else {
return b;
}
return newMessageBuffer(bb);
}

/**
Expand Down Expand Up @@ -355,14 +349,14 @@ else if (DirectBufferAccess.isDirectByteBufferInstance(buffer.reference)) {
}
// Direct buffer or off-heap memory
this.base = null;
this.address = DirectBufferAccess.getAddress(bb);
this.size = bb.capacity();
this.address = DirectBufferAccess.getAddress(bb) + bb.position();
this.size = bb.remaining();
this.reference = bb;
}
else if (bb.hasArray()) {
this.base = bb.array();
this.address = ARRAY_BYTE_BASE_OFFSET;
this.size = bb.array().length;
this.address = ARRAY_BYTE_BASE_OFFSET + bb.arrayOffset() + bb.position();
this.size = bb.remaining();
this.reference = null;
}
else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@ public class MessageBufferU
MessageBufferU(byte[] arr, int offset, int length)
{
super(arr, offset, length);
ByteBuffer bb = ByteBuffer.wrap(arr);
bb.position(offset);
bb.limit(offset + length);
this.wrap = bb.slice();
this.wrap = ByteBuffer.wrap(arr, offset, length).slice();
}

MessageBufferU(ByteBuffer bb)
Expand Down Expand Up @@ -248,6 +245,12 @@ public void copyTo(int index, MessageBuffer dst, int offset, int length)
}
}

@Override
public void putMessageBuffer(int index, MessageBuffer src, int srcOffset, int len)
{
putBytes(index, src.toByteArray(), srcOffset, len);
}

@Override
public byte[] toByteArray()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import MessageUnpackerTest._

class MessageUnpackerTest extends MessagePackSpec {

val universal = MessageBuffer.allocate(0).isInstanceOf[MessageBufferU]
def testData: Array[Byte] = {
val out = new ByteArrayOutputStream()
val packer = MessagePack.newDefaultPacker(out)
Expand Down Expand Up @@ -194,11 +195,14 @@ class MessageUnpackerTest extends MessagePackSpec {
val db = ByteBuffer.allocateDirect(data.length)
bb.put(data).flip()
db.put(data).flip()
Seq(
MessagePack.newDefaultUnpacker(data),
MessagePack.newDefaultUnpacker(bb),
MessagePack.newDefaultUnpacker(db)
)
val builder = Seq.newBuilder[MessageUnpacker]
builder += MessagePack.newDefaultUnpacker(data)
builder += MessagePack.newDefaultUnpacker(bb)
if (!universal) {
builder += MessagePack.newDefaultUnpacker(db)
}

builder.result()
}

"MessageUnpacker" should {
Expand Down Expand Up @@ -394,7 +398,7 @@ class MessageUnpackerTest extends MessagePackSpec {
override val unpacker = MessagePack.newDefaultUnpacker(bb)
}.run
}
block("v7-direct-buffer") {
if (!universal) block("v7-direct-buffer") {
new Fixture {
val db = ByteBuffer.allocateDirect(data.length)
db.put(data).flip()
Expand All @@ -405,7 +409,7 @@ class MessageUnpackerTest extends MessagePackSpec {

t("v7-array").averageWithoutMinMax should be <= t("v6").averageWithoutMinMax
t("v7-array-buffer").averageWithoutMinMax should be <= t("v6").averageWithoutMinMax
t("v7-direct-buffer").averageWithoutMinMax should be <= t("v6").averageWithoutMinMax
if (!universal) t("v7-direct-buffer").averageWithoutMinMax should be <= t("v6").averageWithoutMinMax
}

import org.msgpack.`type`.{ValueType => ValueTypeV6}
Expand Down Expand Up @@ -518,7 +522,8 @@ class MessageUnpackerTest extends MessagePackSpec {
override val unpacker = MessagePack.newDefaultUnpacker(bb)
}.run
}
block("v7-direct-buffer") {

if (!universal) block("v7-direct-buffer") {
new Fixture {
val db = ByteBuffer.allocateDirect(data.length)
db.put(data).flip()
Expand All @@ -529,7 +534,7 @@ class MessageUnpackerTest extends MessagePackSpec {

t("v7-array").averageWithoutMinMax should be <= t("v6").averageWithoutMinMax
t("v7-array-buffer").averageWithoutMinMax should be <= t("v6").averageWithoutMinMax
t("v7-direct-buffer").averageWithoutMinMax should be <= t("v6").averageWithoutMinMax
if (!universal) t("v7-direct-buffer").averageWithoutMinMax should be <= t("v6").averageWithoutMinMax

}

Expand Down Expand Up @@ -603,7 +608,7 @@ class MessageUnpackerTest extends MessagePackSpec {
}.run
}

block("v7-direct-buffer") {
if (!universal) block("v7-direct-buffer") {
new Fixture {
val db = ByteBuffer.allocateDirect(b.length)
db.put(b).flip()
Expand All @@ -628,7 +633,7 @@ class MessageUnpackerTest extends MessagePackSpec {
}.run
}

block("v7-ref-direct-buffer") {
if (!universal) block("v7-ref-direct-buffer") {
new Fixture {
val db = ByteBuffer.allocateDirect(b.length)
db.put(b).flip()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class MessageBufferTest

"MessageBuffer" should {

val universal = MessageBuffer.allocate(0).isInstanceOf[MessageBufferU]
"check buffer type" in {
val b = MessageBuffer.allocate(0)
info(s"MessageBuffer type: ${b.getClass.getName}")
Expand All @@ -55,7 +56,7 @@ class MessageBufferTest
val M = 64 * 1024 * 1024

val ub = MessageBuffer.allocate(M)
val ud = MessageBuffer.wrap(ByteBuffer.allocateDirect(M))
val ud = if (universal) MessageBuffer.wrap(ByteBuffer.allocate(M)) else MessageBuffer.wrap(ByteBuffer.allocateDirect(M))
val hb = ByteBuffer.allocate(M)
val db = ByteBuffer.allocateDirect(M)

Expand Down Expand Up @@ -150,13 +151,14 @@ class MessageBufferTest
}
}
}
val builder = Seq.newBuilder[MessageBuffer]
builder += MessageBuffer.allocate(10)
builder += MessageBuffer.wrap(ByteBuffer.allocate(10))
if (!universal) builder += MessageBuffer.wrap(ByteBuffer.allocateDirect(10))
val buffers = builder.result()

"convert to ByteBuffer" in {
for (t <- Seq(
MessageBuffer.allocate(10),
MessageBuffer.wrap(ByteBuffer.allocate(10)),
MessageBuffer.wrap(ByteBuffer.allocateDirect(10)))
) {
for (t <- buffers) {
val bb = t.sliceAsByteBuffer
bb.position shouldBe 0
bb.limit shouldBe 10
Expand All @@ -165,11 +167,7 @@ class MessageBufferTest
}

"put ByteBuffer on itself" in {
for (t <- Seq(
MessageBuffer.allocate(10),
MessageBuffer.wrap(ByteBuffer.allocate(10)),
MessageBuffer.wrap(ByteBuffer.allocateDirect(10)))
) {
for (t <- buffers) {
val b = Array[Byte](0x02, 0x03)
val srcArray = ByteBuffer.wrap(b)
val srcHeap = ByteBuffer.allocate(b.length)
Expand All @@ -193,19 +191,18 @@ class MessageBufferTest
}

"put MessageBuffer on itself" in {
for (t <- Seq(
MessageBuffer.allocate(10),
MessageBuffer.wrap(ByteBuffer.allocate(10)),
MessageBuffer.wrap(ByteBuffer.allocateDirect(10)))
) {
for (t <- buffers) {
val b = Array[Byte](0x02, 0x03)
val srcArray = ByteBuffer.wrap(b)
val srcHeap = ByteBuffer.allocate(b.length)
srcHeap.put(b).flip
val srcOffHeap = ByteBuffer.allocateDirect(b.length)
srcOffHeap.put(b).flip
val builder = Seq.newBuilder[ByteBuffer]
builder ++= Seq(srcArray, srcHeap)
if (!universal) builder += srcOffHeap

for (src <- Seq(MessageBuffer.wrap(srcArray), MessageBuffer.wrap(srcHeap), MessageBuffer.wrap(srcOffHeap))) {
for (src <- builder.result().map(d => MessageBuffer.wrap(d))) {
// Write header bytes
val header = Array[Byte](0x00, 0x01)
t.putBytes(0, header, 0, header.length)
Expand Down Expand Up @@ -256,7 +253,9 @@ class MessageBufferTest

checkSliceAndCopyTo(MessageBuffer.wrap(prepareBytes), MessageBuffer.wrap(prepareBytes))
checkSliceAndCopyTo(MessageBuffer.wrap(ByteBuffer.wrap(prepareBytes)), MessageBuffer.wrap(ByteBuffer.wrap(prepareBytes)))
checkSliceAndCopyTo(MessageBuffer.wrap(prepareDirectBuffer), MessageBuffer.wrap(prepareDirectBuffer))
if (!universal) {
checkSliceAndCopyTo(MessageBuffer.wrap(prepareDirectBuffer), MessageBuffer.wrap(prepareDirectBuffer))
}
}
}
}
Expand Down