dmolony-DiskBrowser/src/com/bytezone/diskbrowser/wizardry/MessageBlock.java

61 lines
1.6 KiB
Java
Raw Normal View History

2016-08-16 06:34:23 +00:00
package com.bytezone.diskbrowser.wizardry;
import java.util.ArrayList;
2016-08-16 08:58:42 +00:00
import java.util.Iterator;
2016-08-16 06:34:23 +00:00
import java.util.List;
import com.bytezone.common.Utility;
2016-08-16 08:58:42 +00:00
public class MessageBlock implements Iterable<MessageDataBlock>
2016-08-16 06:34:23 +00:00
{
2016-08-16 08:58:42 +00:00
// private final byte[] buffer;
2016-08-16 06:34:23 +00:00
private final int indexOffset;
private final int indexLength;
private final List<MessageDataBlock> messageDataBlocks =
new ArrayList<MessageDataBlock> ();
2016-08-16 08:58:42 +00:00
private Huffman huffman;
2016-08-16 06:34:23 +00:00
public MessageBlock (byte[] buffer)
{
indexOffset = Utility.getWord (buffer, 0);
indexLength = Utility.getWord (buffer, 2);
int ptr = indexOffset * 512;
for (int i = 0, max = indexLength / 2; i < max; i++)
{
int firstMessageNo = Utility.getWord (buffer, ptr + i * 2);
2016-08-16 08:58:42 +00:00
byte[] data = new byte[512];
System.arraycopy (buffer, i * 512, data, 0, data.length);
2016-08-16 06:34:23 +00:00
MessageDataBlock messageDataBlock =
2016-08-16 08:58:42 +00:00
new MessageDataBlock ("Block " + firstMessageNo, data, firstMessageNo);
2016-08-16 06:34:23 +00:00
messageDataBlocks.add (messageDataBlock);
}
}
2016-08-16 08:58:42 +00:00
public void setHuffman (Huffman huffman)
{
this.huffman = huffman;
for (MessageDataBlock messageDataBlock : messageDataBlocks)
messageDataBlock.setHuffman (huffman);
}
2016-08-16 06:34:23 +00:00
public byte[] getMessage (int messageNo)
{
for (int i = 0; i < messageDataBlocks.size (); i++)
{
MessageDataBlock messageDataBlock = messageDataBlocks.get (i);
if (messageDataBlock.firstMessageNo > messageNo)
return messageDataBlocks.get (i - 1).getMessage (messageNo);
}
return null;
}
2016-08-16 08:58:42 +00:00
@Override
public Iterator<MessageDataBlock> iterator ()
{
return messageDataBlocks.iterator ();
}
2016-08-16 06:34:23 +00:00
}