virtual bool MoveNext()

in Microsoft.O365.Security.Native.ETW/Property.hpp [77:105]


        virtual bool MoveNext() = IEnumerator<Property^>::MoveNext {

            // C#'s enumerators expect the enumeration to point to a vacuous
            // space *before* the first element when they are Reset. Reset is
            // immediately followed by a call to MoveNext that points us to the
            // actual first element. C++ iterators don't work this way, so we
            // need to align them by lazily initializing the underlying C++
            // iterator.
            if (!vecIterator_) {
                vecIterator_.Swap(NativePtr<std::vector<krabs::property>::iterator>(iterator_->begin()));
                if (iters_match(vecIterator_, vecIteratorEnd_)) {
                    return false;
                }

                return true;
            }

            if (iters_match(vecIterator_, vecIteratorEnd_)) {
                return false;
            }

            std::advance(*vecIterator_.Get(), 1);

            if (iters_match(vecIterator_, vecIteratorEnd_)) {
                return false;
            }

            return true;
        }