/// <summary>
            /// Advances the enumerator to the next element of the <see cref="SerializedObjectView"/>.
            /// </summary>
            /// <returns>true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.</returns>
            public bool MoveNext()
            {
                var startIndex = m_Stream.GetTokenIndex(m_Start);
                var startToken = m_Stream.GetToken(startIndex);

                if (startToken.Length == 1)
                {
                    return(false);
                }

                if (m_Current.Index == -1)
                {
                    m_Current = m_Stream.GetFirstChild(m_Start);
                    return(true);
                }

                if (!m_Stream.IsValid(m_Current))
                {
                    return(false);
                }

                var currentIndex = m_Stream.GetTokenIndex(m_Current);
                var currentToken = m_Stream.GetToken(currentIndex);

                if (currentIndex + currentToken.Length >= startIndex + startToken.Length)
                {
                    return(false);
                }

                m_Current = m_Stream.GetHandle(currentIndex + currentToken.Length);
                return(true);
            }
 internal UnsafeObjectView AsUnsafe() => new UnsafeObjectView(m_Stream.AsUnsafe(), m_Stream.GetTokenIndex(m_Handle));