VeloGraphX
High-performance dynamic graph analytics in C++20
Loading...
Searching...
No Matches
frontier.hpp
Go to the documentation of this file.
1#pragma once
2#include <cstdint>
3#include <vector>
4
5namespace velographx {
6using VertexId = std::uint32_t;
7class Frontier {
8 public:
9 explicit Frontier(std::size_t n = 0) : bitmap_(n, 0) {}
10 void reset(std::size_t n) { sparse_.clear(); bitmap_.assign(n, 0); }
11 void add(VertexId v) { if (!bitmap_[v]) { bitmap_[v] = 1; sparse_.push_back(v); } }
12 [[nodiscard]] bool contains(VertexId v) const { return bitmap_[v] != 0; }
13 [[nodiscard]] const std::vector<VertexId>& sparse() const noexcept { return sparse_; }
14 [[nodiscard]] double density() const { return bitmap_.empty() ? 0.0 : static_cast<double>(sparse_.size())/bitmap_.size(); }
15 [[nodiscard]] bool prefer_dense() const { return density() > 0.08; }
16 private:
17 std::vector<VertexId> sparse_;
18 std::vector<std::uint8_t> bitmap_;
19};
20} // namespace velographx
void reset(std::size_t n)
Definition frontier.hpp:10
double density() const
Definition frontier.hpp:14
const std::vector< VertexId > & sparse() const noexcept
Definition frontier.hpp:13
bool prefer_dense() const
Definition frontier.hpp:15
void add(VertexId v)
Definition frontier.hpp:11
Frontier(std::size_t n=0)
Definition frontier.hpp:9
bool contains(VertexId v) const
Definition frontier.hpp:12
std::uint32_t VertexId
Definition frontier.hpp:6