示例#1
0
 public void Dispose()
 {
     Finished = true;
     Ahead.Dispose();
     if (TIsDisposable)
     {
         foreach (var item in Content)
         {
             ((IDisposable)item).Dispose();
         }
     }
 }
示例#2
0
 public void Write(T item)
 {
     if (Finished)
     {
         return;
     }
     Ahead.WaitOne();
     lock (Lock) {
         if (Content[Modulo(TotalWritten, Size)] != null &&
             TIsDisposable)
         {
             ((IDisposable)Content[Modulo(TotalWritten, Size)]).Dispose();
         }
         Content[Modulo(TotalWritten++, Size)] = item;
     }
 }
示例#3
0
 public T Read()
 {
     if (Finished && !HasFront)
     {
         return(default(T));
     }
     lock (Lock) {
         if (DejaVu > 0)
         {
             --DejaVu;
         }
         else if (!Finished)
         {
             Ahead.Release();
         }
         // Ahead.Release();
         return(Content[Modulo(ReadIndex++, Size)]);
     }
 }
示例#4
0
        public override int GetHashCode()
        {
            if (hashcode.HasValue)
            {
                return(hashcode.Value);
            }

            unchecked
            {
                hashcode = (int)2166136261;
                hashcode = hashcode * 1677619 + (LocalBranch?.GetHashCode() ?? 0);
                hashcode = hashcode * 1677619 + (RemoteBranch?.GetHashCode() ?? 0);
                hashcode = hashcode * 1677619 + Ahead.GetHashCode();
                hashcode = hashcode * 1677619 + Behind.GetHashCode();
                foreach (var entry in Entries)
                {
                    hashcode = hashcode * 1677619 + entry.GetHashCode();
                }
                return(hashcode.Value);
            }
        }