public void Dispose()
 {
     m_stream.Dispose();
     m_current = null;
 }
        public bool MoveNext()
        {
            // check for cancel
            if (m_current != null && m_process != null && !m_process.Update(m_current))
                return false;

            if (m_stream.Position < m_endPosition)
            {
                int bytesRead = m_stream.Read(m_buffer.Data, 0, m_usableBytesPerBuffer);

                if (bytesRead == 0)
                    throw new Exception("I did something wrong");

                if (m_stream.Position > m_endPosition)
                    bytesRead -= (int)(m_stream.Position - m_endPosition);

                int index = (m_current != null) ? m_current.Index + 1 : 0;
                m_current = new PointCloudBinarySourceEnumeratorChunk(index, m_buffer, bytesRead, m_source.PointSizeBytes, (float)(m_stream.Position - m_source.PointDataOffset) / (m_endPosition - m_source.PointDataOffset));

                return true;
            }

            return false;
        }
 public void Reset()
 {
     m_stream.Seek(m_source.PointDataOffset);
     m_current = null;
 }