Exemplo n.º 1
0
            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);
                        }
                    }
                }
            }
Exemplo n.º 2
0
 public void WriteTransferData(IFTTransferUnit transferUnit)
 {
     _container.AddUnit(transferUnit);
 }
Exemplo n.º 3
0
            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);
                        }
                    }
                }
            }