コード例 #1
0
        public void WriteOne(T value)
        {
            lock (this.writeLock)
            {
                OneTimeBufferHelper helper;
                lock (((ICollection)this.helperList).SyncRoot)
                {
                    if (this.helperList.Count == 0)
                    {
                        this.helperList.AddFirst(new OneTimeBufferHelper(this.fragmentation));
                    }

                    helper = this.helperList.Last.Value;
                }

                bool written = false;
                while (!written)
                {
                    written = helper.WriteOne(value);
                    if (!written)
                    {
                        lock (((ICollection)this.helperList).SyncRoot)
                        {
                            helper = new OneTimeBufferHelper(this.fragmentation);
                            this.helperList.AddLast(helper);
                        }
                    }
                }
            }
        }
コード例 #2
0
 public void Write(T[] buffer, int offset, int count)
 {
     lock (this.writeLock)
     {
         OneTimeBufferHelper helper;
         lock (((ICollection)this.helperList).SyncRoot)
         {
             if (this.helperList.Count == 0)
             {
                 this.helperList.AddFirst(new OneTimeBufferHelper(this.fragmentation));
             }
             helper = this.helperList.Last.Value;
         }
         var writtenData = 0;
         while (writtenData < count)
         {
             int tryWrite    = count - writtenData;
             var realWritten = helper.Write(buffer, offset, tryWrite);
             writtenData += realWritten;
             offset      += realWritten;
             if (helper.IsFull) // helper buffer full
             {
                 helper = new OneTimeBufferHelper(this.fragmentation);
                 lock (((ICollection)this.helperList).SyncRoot)
                 {
                     this.helperList.AddLast(helper);
                 }
             }
         }
     }
 }