VeloGraphX
High-performance dynamic graph analytics in C++20
Loading...
Searching...
No Matches
csr_graph.hpp
Go to the documentation of this file.
1#pragma once
3#include <algorithm>
4#include <span>
5#include <utility>
6#include <vector>
7
8namespace velographx {
9
10class CsrGraph {
11public:
12 using Edge = std::pair<VertexId, VertexId>;
13
14 CsrGraph() = default;
15 CsrGraph(std::vector<Edge> edges, bool directed = false);
16
17 [[nodiscard]] std::size_t vertex_count() const noexcept { return vertex_count_; }
18 [[nodiscard]] std::size_t edge_entry_count() const noexcept { return neighbors_.size(); }
19 [[nodiscard]] bool directed() const noexcept { return directed_; }
20 [[nodiscard]] std::span<const VertexId> neighbors(VertexId v) const;
21 [[nodiscard]] std::span<const VertexId> in_neighbors(VertexId v) const;
22 [[nodiscard]] std::size_t degree(VertexId v) const;
23 [[nodiscard]] bool has_edge(VertexId u, VertexId v) const;
24
25 template <class Fn>
26 void for_each_neighbor(VertexId v, Fn&& fn) const {
27 for (const auto dst : neighbors(v)) fn(dst);
28 }
29
30 template <class Fn>
31 void for_each_in_neighbor(VertexId v, Fn&& fn) const {
32 for (const auto src : in_neighbors(v)) fn(src);
33 }
34
35private:
36 bool directed_{false};
37 std::size_t vertex_count_{0};
38 std::vector<EdgeOffset> offsets_{0};
39 std::vector<VertexId> neighbors_;
40 std::vector<EdgeOffset> in_offsets_{0};
41 std::vector<VertexId> in_neighbors_;
42};
43
44}
std::span< const VertexId > neighbors(VertexId v) const
void for_each_neighbor(VertexId v, Fn &&fn) const
Definition csr_graph.hpp:26
std::size_t vertex_count() const noexcept
Definition csr_graph.hpp:17
CsrGraph(std::vector< Edge > edges, bool directed=false)
void for_each_in_neighbor(VertexId v, Fn &&fn) const
Definition csr_graph.hpp:31
bool has_edge(VertexId u, VertexId v) const
std::pair< VertexId, VertexId > Edge
Definition csr_graph.hpp:12
std::size_t degree(VertexId v) const
bool directed() const noexcept
Definition csr_graph.hpp:19
std::size_t edge_entry_count() const noexcept
Definition csr_graph.hpp:18
std::span< const VertexId > in_neighbors(VertexId v) const
std::uint32_t VertexId
Definition frontier.hpp:6