package com.intellij.flex.uiDesigner.io;
public class CustomVectorWriter implements ByteProvider {
private final TransactionablePrimitiveAmfOutputStream out;
private int counter = 0;
public CustomVectorWriter() {
out = new TransactionablePrimitiveAmfOutputStream(new ByteArrayOutputStreamEx(8 * 1024));
}
public void prepareIteration() {
if (counter != 0 || out.size() > 0) {
counter = 0;
out.reset();
}
}
public PrimitiveAmfOutputStream getOutputForIteration() {
out.start();
counter++;
return out;
}
public PrimitiveAmfOutputStream getOutputForCustomData() {
return out;
}
public void rollbackLastIteration() {
counter--;
out.rollback();
}
@Override
public int size() {
return IOUtil.uint29SizeOf(counter) + out.size();
}
@Override
public int writeTo(byte[] bytes, int offset) {
if (counter < 0x80) {
bytes[offset++] = (byte)counter;
}
else if (counter < 0x4000) {
bytes[offset++] = (byte)(((counter >> 7) & 0x7F) | 0x80);
bytes[offset++] = (byte)(counter & 0x7F);
}
else {
throw new IllegalArgumentException("Integer out of range: " + counter);
}
out.getByteArrayOut().writeTo(bytes, offset);
return offset + out.size();
}
public void writeTo(PrimitiveAmfOutputStream to) {
to.writeUInt29(counter);
out.writeTo(to);
}
public boolean isEmpty() {
return counter == 0;
}
}