blob: b7f3ec8e25c2494287ab1a1409dc324e86ff6c4e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.qpid.protonj2.test.driver.buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
/**
* Writable Buffer implementation based on a Netty ByteBuf
*/
public class NettyWritableBuffer implements WritableBuffer {
public static final int INITIAL_CAPACITY = 1024;
public ByteBuf nettyBuffer;
public NettyWritableBuffer() {
nettyBuffer = Unpooled.buffer(INITIAL_CAPACITY);
}
public NettyWritableBuffer(ByteBuf buffer) {
nettyBuffer = buffer;
}
public ByteBuf getBuffer() {
return nettyBuffer;
}
@Override
public void put(byte b) {
nettyBuffer.writeByte(b);
}
@Override
public void putFloat(float f) {
nettyBuffer.writeFloat(f);
}
@Override
public void putDouble(double d) {
nettyBuffer.writeDouble(d);
}
@Override
public void put(byte[] src, int offset, int length) {
nettyBuffer.writeBytes(src, offset, length);
}
@Override
public void put(ByteBuffer payload) {
nettyBuffer.writeBytes(payload);
}
public void put(ByteBuf payload) {
nettyBuffer.writeBytes(payload);
}
@Override
public void putShort(short s) {
nettyBuffer.writeShort(s);
}
@Override
public void putInt(int i) {
nettyBuffer.writeInt(i);
}
@Override
public void putLong(long l) {
nettyBuffer.writeLong(l);
}
@Override
public void put(String value) {
nettyBuffer.writeCharSequence(value, StandardCharsets.UTF_8);
}
@Override
public boolean hasRemaining() {
return nettyBuffer.writerIndex() < nettyBuffer.maxCapacity();
}
@Override
public int remaining() {
return nettyBuffer.maxCapacity() - nettyBuffer.writerIndex();
}
@Override
public void ensureRemaining(int remaining) {
nettyBuffer.ensureWritable(remaining);
}
@Override
public int position() {
return nettyBuffer.writerIndex();
}
@Override
public void position(int position) {
nettyBuffer.writerIndex(position);
}
@Override
public int limit() {
return nettyBuffer.capacity();
}
@Override
public void put(ReadableBuffer buffer) {
buffer.get(this);
}
}