/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.media;
import java.nio.ByteBuffer;
import java.util.List;
import com.ttProject.nio.channels.IReadChannel;
/**
* メディアデータを扱うマネージャー
* @author taktod
*/
public abstract class Manager<T> {
private ByteBuffer buffer = null;
/**
* 追加bufferを足して、データを応答します。
* 応答データは読み込みモードとして返ってきます。
* @param data 読み込みモードの適当なデータ
* @return 読み込みモードの合成後のデータ(データがnullのこともあります。)
*/
protected ByteBuffer appendBuffer(ByteBuffer data) {
if(data == null) {
return buffer;
}
if(buffer != null) {
int length = buffer.remaining() + data.remaining();
ByteBuffer newBuffer = ByteBuffer.allocate(length);
newBuffer.put(buffer);
buffer = newBuffer;
}
else {
int length = data.remaining();
buffer = ByteBuffer.allocate(length);
}
buffer.put(data);
buffer.flip();
return buffer;
}
// データをいれると、取得可能になったデータがでてくる。
public abstract List<T> getUnits(ByteBuffer data) throws Exception;
// IReadChannelをいれると、1つ分のデータが取得できる。
public abstract T getUnit(IReadChannel source) throws Exception;
}