public void AddUnit(IFTTransferUnit transferUnit) { var containerLeftCount = _container.LeftCount; var unitCount = transferUnit.BytesCount; byte[] buffer = new byte[unitCount]; using (FTStreamWriter bwriter = new FTStreamWriter(buffer)) { ((IFTTreeNode)transferUnit).GetByteData(bwriter); } if (containerLeftCount > unitCount) { _container.Write(buffer); } else if (containerLeftCount == unitCount) { _container.Write(buffer); OldContainerWrite(_container); NewContainer(); } else { if (unitCount < pageCount) { OldContainerWrite(_container); NewContainer(); _container.Write(buffer); } else { int unitIndex = 0; _container.WriteLeftCount(buffer); OldContainerWrite(_container); NewContainer(); unitIndex += containerLeftCount; while (unitCount - unitIndex >= pageCount) { _container.WritePageCount(buffer, unitIndex); OldContainerWrite(_container); NewContainer(); unitIndex += pageCount; } if (unitCount - unitIndex != 0) { _container.WriteLast(buffer, unitIndex); } } } }
public void WriteTransferData(IFTTransferUnit transferUnit) { _container.AddUnit(transferUnit); }
public void AddUnit(IFTTransferUnit transferUnit) { var containerLeftCount = _container.LeftCount; var unitCount = transferUnit.BytesCount; byte[] buffer = transferUnit.Bytes; if (containerLeftCount > unitCount) { _container.Write(buffer); } else if (containerLeftCount == unitCount) { _container.Write(buffer); OldContainerWrite(_container); NewContainer(); } else { if (unitCount < pageCount) { OldContainerWrite(_container); NewContainer(); _container.Write(buffer); } else { int unitIndex = 0; _container.WriteLeftCount(buffer); OldContainerWrite(_container); NewContainer(); unitIndex += containerLeftCount; while (unitCount - unitIndex >= pageCount) { _container.WritePageCount(buffer, unitIndex); OldContainerWrite(_container); NewContainer(); unitIndex += pageCount; } if (unitCount - unitIndex != 0) { _container.WriteLast(buffer, unitIndex); } } } }