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 Dispose()
 {
     m_stream.Dispose();
     m_current = null;
 }
 public void Reset()
 {
     m_stream.Seek(m_source.PointDataOffset);
     m_current = null;
 }