Program Listing for File vertex_iterator.hpp

Return to documentation for file (/goinfre/src/github.com/tristan0x/basalt/include/basalt/vertex_iterator.hpp)

/*************************************************************************
 * Copyright (C) 2019 Blue Brain Project
 *
 * This file is part of Basalt distributed under the terms of the GNU
 * Lesser General Public License. See top-level LICENSE file for details.
 *************************************************************************/
#pragma once

#include <iterator>
#include <memory>

#include <basalt/fwd.hpp>

namespace basalt {

class VertexIterator: public std::iterator<std::input_iterator_tag, const vertex_uid_t> {
  public:
    template <EdgeOrientation Orientation>
    VertexIterator(const GraphImpl<Orientation>& pimpl, size_t from);

    VertexIterator(const VertexIterator& other);

    VertexIterator& operator++();

    const VertexIterator operator++(int);

    bool operator==(const VertexIterator& other) const;

    bool operator!=(const VertexIterator& other) const;

    const value_type& operator*();

    using VertexIteratorImpl_ptr = std::shared_ptr<VertexIteratorImpl>;

  private:
    VertexIteratorImpl_ptr pimpl_;
};

extern template VertexIterator::VertexIterator(
    const basalt::GraphImpl<EdgeOrientation::undirected>& pimpl,
    size_t from);
extern template VertexIterator::VertexIterator(
    const basalt::GraphImpl<EdgeOrientation::directed>& pimpl,
    size_t from);

}  // namespace basalt