comparison Implab/Parallels/AsyncQueue.cs @ 127:d86da8d2d4c3 v2

fixed AsyncQueue iterator
author cin
date Tue, 27 Jan 2015 18:18:29 +0300
parents f803565868a4
children 6241bff0cd64
comparison
equal deleted inserted replaced
126:f7b2b8bfbb8c 127:d86da8d2d4c3
40 get { return m_low; } 40 get { return m_low; }
41 } 41 }
42 42
43 public int Hi { 43 public int Hi {
44 get { return m_hi; } 44 get { return m_hi; }
45 }
46
47 public int Size {
48 get { return m_size; }
45 } 49 }
46 50
47 public bool TryEnqueue(T value, out bool extend) { 51 public bool TryEnqueue(T value, out bool extend) {
48 var alloc = Interlocked.Increment(ref m_alloc) - 1; 52 var alloc = Interlocked.Increment(ref m_alloc) - 1;
49 53
560 564
561 if (m_pos == -1) 565 if (m_pos == -1)
562 m_pos = m_current.Low; 566 m_pos = m_current.Low;
563 else 567 else
564 m_pos++; 568 m_pos++;
569
565 if (m_pos == m_current.Hi) { 570 if (m_pos == m_current.Hi) {
571
572 m_current = m_pos == m_current.Size ? m_current.next : null;
573
566 m_pos = 0; 574 m_pos = 0;
567 m_current = m_current.next; 575
576 if (m_current == null)
577 return false;
568 } 578 }
569 579
570 return true; 580 return true;
571 } 581 }
572 582