public WriteBase64AsyncResult(byte[] buffer, int offset, int count, XmlBaseWriter writer, AsyncCallback callback, object state)
: base(callback, state)
{
this.writer = writer;
this.buffer = buffer;
this.offset = offset;
this.count = count;
bool completeSelf = true;
if (this.count > 0)
{
if (writer.trailByteCount > 0)
{
while (writer.trailByteCount < 3 && this.count > 0)
{
writer.trailBytes[writer.trailByteCount++] = buffer[this.offset++];
this.count--;
}
}
this.totalByteCount = writer.trailByteCount + this.count;
this.actualByteCount = totalByteCount - (totalByteCount % 3);
if (writer.trailBytes == null)
{
writer.trailBytes = new byte[3];
}
if (actualByteCount >= 3)
{
if (writer.attributeValue != null)
{
writer.WriteAttributeText(XmlConverter.Base64Encoding.GetString(writer.trailBytes, 0, writer.trailByteCount));
writer.WriteAttributeText(XmlConverter.Base64Encoding.GetString(buffer, this.offset, actualByteCount - writer.trailByteCount));
}
// StartContent/WriteBase64Text/EndContent will be called from HandleWriteBase64 as appropriate
completeSelf = HandleWriteBase64Text(null);
}
else
{
Buffer.BlockCopy(buffer, this.offset, writer.trailBytes, writer.trailByteCount, this.count);
writer.trailByteCount += this.count;
}
}
if (completeSelf)
{
this.Complete(true);
}
}