20 #ifndef GALOIS_GRAPHS_LC_CSR_HYPERGRAPH_H
21 #define GALOIS_GRAPHS_LC_CSR_HYPERGRAPH_H
23 #include <type_traits>
25 #include <boost/archive/binary_oarchive.hpp>
26 #include <boost/archive/binary_iarchive.hpp>
27 #include <boost/serialization/split_member.hpp>
28 #include <boost/serialization/binary_object.hpp>
29 #include <boost/serialization/serialization.hpp>
31 #include "galois/config.h"
58 template <
typename NodeTy,
typename EdgeTy,
bool HasNoLockable =
false,
62 bool HasOutOfLineLockable =
false,
typename FileEdgeTy = EdgeTy>
65 private boost::noncopyable,
66 private internal::LocalIteratorFeature<UseNumaAlloc>,
67 private internal::OutOfLineLockableFeature<HasOutOfLineLockable &&
69 template <
typename Graph>
73 template <
bool _has_
id>
78 template <
typename _node_data>
81 HasOutOfLineLockable, FileEdgeTy>
85 template <
typename _edge_data>
88 HasOutOfLineLockable, FileEdgeTy>
92 template <
typename _file_edge_data>
95 HasOutOfLineLockable, _file_edge_data>
100 template <
bool _has_no_lockable>
103 HasOutOfLineLockable, FileEdgeTy>
106 template <
bool _has_no_lockable>
109 HasOutOfLineLockable, FileEdgeTy>;
112 template <
bool _use_numa_alloc>
115 HasOutOfLineLockable, FileEdgeTy>
118 template <
bool _use_numa_alloc>
121 HasOutOfLineLockable, FileEdgeTy>;
124 template <
bool _has_out_of_line_lockable>
127 _has_out_of_line_lockable, FileEdgeTy>
136 typedef internal::NodeInfoBaseTypes<NodeTy,
137 !HasNoLockable && !HasOutOfLineLockable>
139 typedef internal::NodeInfoBase<NodeTy,
140 !HasNoLockable && !HasOutOfLineLockable>
153 boost::counting_iterator<typename EdgeIndData::value_type>;
154 using iterator = boost::counting_iterator<typename EdgeDst::value_type>;
171 typedef internal::EdgeSortIterator<
191 template <
bool _A1 = HasNoLockable,
bool _A2 = HasOutOfLineLockable>
193 typename std::enable_if<!_A1 && !_A2>::type* = 0) {
197 template <
bool _A1 = HasOutOfLineLockable,
bool _A2 = HasNoLockable>
199 typename std::enable_if<_A1 && !_A2>::type* = 0) {
200 this->outOfLineAcquire(
getId(N), mflag);
203 template <
bool _A1 = HasOutOfLineLockable,
bool _A2 = HasNoLockable>
205 typename std::enable_if<_A2>::type* = 0) {}
211 typename std::enable_if<!_A1 || _A2>::type* = 0) {
220 typename std::enable_if<_A1 && !_A2>::type* = 0) {
230 template <
typename Archive>
231 void save(Archive& ar,
const unsigned int)
const {
241 template <
typename Archive>
242 void load(Archive& ar,
const unsigned int) {
254 this->outOfLineAllocateBlocked(numNodes);
257 this->outOfLineAllocateInterleaved(numNodes);
261 for (
size_t n = 0; n <
numNodes; ++n) {
269 BOOST_SERIALIZATION_SPLIT_MEMBER()
340 template <
typename EdgeNumFnTy,
typename EdgeDstFnTy,
typename EdgeDataFnTy>
342 EdgeDstFnTy _edgeDst, EdgeDataFnTy _edgeData)
343 : numNodes(_numNodes), numEdges(_numEdges) {
348 edgeIndData.allocateBlocked(numNodes);
349 edgeDst.allocateBlocked(numEdges);
350 edgeData.allocateBlocked(numEdges);
352 this->outOfLineAllocateBlocked(numNodes,
false);
355 edgeIndData.allocateInterleaved(numNodes);
356 edgeDst.allocateInterleaved(numEdges);
357 edgeData.allocateInterleaved(numEdges);
358 this->outOfLineAllocateInterleaved(numNodes);
361 for (
size_t n = 0; n <
numNodes; ++n) {
366 for (
size_t n = 0; n <
numNodes; ++n) {
368 edgeIndData[n] = cur;
372 for (
size_t n = 0; n <
numNodes; ++n) {
375 for (uint64_t e = 0, ee = edgeNum(n); e < ee; ++e) {
377 edgeData.set(cur, _edgeData(n, e));
378 edgeDst[cur] = _edgeDst(n, e);
407 return edgeData[*ni];
455 auto e = std::lower_bound(
463 return internal::make_no_deref_range(
edge_begin(N, mflag),
469 return edges(N, mflag);
475 template <
typename CompTy>
477 const CompTy& comp = std::less<EdgeTy>(),
490 template <
typename CompTy>
504 [=](
const EdgeSortVal& e1,
const EdgeSortVal& e2) {
505 return e1.dst < e2.dst;
521 numNodes = graph.
size();
525 edgeIndData.allocateBlocked(numNodes);
526 edgeDst.allocateBlocked(numEdges);
527 edgeData.allocateBlocked(numEdges);
528 this->outOfLineAllocateBlocked(numNodes);
531 edgeIndData.allocateInterleaved(numNodes);
532 edgeDst.allocateInterleaved(numEdges);
533 edgeData.allocateInterleaved(numEdges);
534 this->outOfLineAllocateInterleaved(numNodes);
544 edgeIndData.allocateBlocked(numNodes);
545 edgeDst.allocateBlocked(numEdges);
546 edgeData.allocateBlocked(numEdges);
547 this->outOfLineAllocateBlocked(numNodes);
550 edgeIndData.allocateInterleaved(numNodes);
551 edgeDst.allocateInterleaved(numEdges);
552 edgeData.allocateInterleaved(numEdges);
553 this->outOfLineAllocateInterleaved(numNodes);
558 #ifndef GALOIS_GRAPH_CONSTRUCT_SERIAL
559 for (uint32_t x = 0; x <
numNodes; ++x) {
561 this->outOfLineConstructAt(x);
568 this->outOfLineConstructAt(x);
578 edgeIndData.deallocate();
579 edgeIndData.destroy();
581 edgeDst.deallocate();
584 edgeData.deallocate();
590 edgeData.set(e, val);
596 void fixEndEdge(uint32_t n, uint64_t e) { edgeIndData[n] = e; }
627 edgeIndData_old[n] = edgeIndData[n];
628 edgeIndData_temp[n] = 0;
636 auto dst = edgeDst[e];
637 edgeDst_old[e] = dst;
640 __sync_add_and_fetch(&(edgeIndData_temp[dst]), 1);
646 for (uint32_t n = 1; n <
numNodes; ++n) {
647 edgeIndData_temp[n] += edgeIndData_temp[n - 1];
653 [&](uint64_t n) { edgeIndData[n] = edgeIndData_temp[n]; },
659 edgeIndData_temp[0] = 0;
662 [&](uint64_t n) { edgeIndData_temp[n] = edgeIndData[n - 1]; },
670 uint64_t e = (src == 0) ? 0 : edgeIndData_old[src - 1];
674 while (e < edgeIndData_old[src]) {
676 auto dst = edgeDst_old[e];
678 auto e_new = __sync_fetch_and_add(&(edgeIndData_temp[dst]), 1);
680 edgeDst[e_new] = src;
692 [&](uint64_t e) {
edgeDataCopy(edgeData, edgeData_new, e, e); },
699 template <
bool is_non_
void = EdgeData::has_value>
702 typename std::enable_if<is_non_void>::type* = 0) {
703 edgeData_new[e_new] = edgeData[e];
706 template <
bool is_non_
void = EdgeData::has_value>
708 typename std::enable_if<!is_non_void>::type* = 0) {
717 NodeData::size_of::value + EdgeIndData::size_of::value +
718 LC_CSR_Hypergraph::size_of_out_of_line::value,
719 EdgeDst::size_of::value + EdgeData::size_of::value, tid, total)
722 this->setLocalRange(*r.first, *r.second);
726 edgeIndData[*ii] = *graph.
edge_end(*ii);
728 this->outOfLineConstructAt(*ii);
747 auto divideByNode(
size_t nodeSize,
size_t edgeSize,
size_t id,
size_t total) {
749 numNodes, numEdges, nodeSize, edgeSize,
id, total, edgeIndData);
758 uint32_t numNodes, uint64_t numEdges, std::vector<uint64_t>& prefix_sum,
759 std::vector<std::vector<uint32_t>>&
765 [&](uint32_t n) { edgeIndData[n] = prefix_sum[n]; });
769 if (edgeIndData[n] > 0) {
770 std::copy(edges_id[n].
begin(), edges_id[n].
end(), edgeDst.begin());
775 if (edgeIndData[n] - edgeIndData[n - 1] > 0) {
776 std::copy(edges_id[n].
begin(), edges_id[n].
end(),
777 edgeDst.begin() + edgeIndData[n - 1]);
785 std::vector<unsigned>
792 this->setLocalRange(*r.first, *r.second);
796 uint32_t numNodes, uint64_t numEdges, std::vector<uint64_t>& prefix_sum,
803 [&](uint32_t n) { edgeIndData[n] = prefix_sum[n]; });
807 if (edgeIndData[n] > 0) {
808 std::copy(edges_id[n].
begin(), edges_id[n].
end(), edgeDst.begin());
813 if (edgeIndData[n] - edgeIndData[n - 1] > 0) {
814 std::copy(edges_id[n].
begin(), edges_id[n].
end(),
815 edgeDst.begin() + edgeIndData[n - 1]);
823 std::vector<unsigned>
830 this->setLocalRange(*r.first, *r.second);
friend void swap(LC_CSR_Hypergraph &lhs, LC_CSR_Hypergraph &rhs)
Definition: LC_CSR_Hypergraph.h:386
void set(difference_type x, const_reference v)
Definition: LargeArray.h:197
If true, store abstract locks separate from nodes.
Definition: LC_CSR_Hypergraph.h:125
LargeArray< EdgeTy > EdgeData
Definition: LC_CSR_Hypergraph.h:134
LC_CSR_Hypergraph< NodeTy, EdgeTy, HasNoLockable, _use_numa_alloc, HasOutOfLineLockable, FileEdgeTy > type
Definition: LC_CSR_Hypergraph.h:116
size_t size() const
Definition: LC_CSR_Hypergraph.h:412
size_t hnodes
Definition: LC_CSR_Hypergraph.h:160
boost::counting_iterator< typename EdgeDst::value_type > iterator
Definition: LC_CSR_Hypergraph.h:154
void constructNodes()
Definition: LC_CSR_Hypergraph.h:557
size_t getId(GraphNode N)
Definition: LC_CSR_Hypergraph.h:224
LC_CSR_Hypergraph< NodeTy, EdgeTy, _has_no_lockable, UseNumaAlloc, HasOutOfLineLockable, FileEdgeTy > type
Definition: LC_CSR_Hypergraph.h:104
void destroy()
Definition: LargeArray.h:277
LargeArray< uint32_t > EdgeDst
Definition: LC_CSR_Hypergraph.h:135
void deSerializeGraph(boost::archive::binary_iarchive &ar)
Deserializes a Boost archive to the local graph.
Definition: LC_CSR_Hypergraph.h:316
void constructFrom(uint32_t numNodes, uint64_t numEdges, std::vector< uint64_t > &prefix_sum, galois::gstl::Vector< galois::PODResizeableArray< uint32_t >> &edges_id)
Definition: LC_CSR_Hypergraph.h:795
edge_iterator edge_begin(GraphNode N)
Returns the index to the beginning of global node N's outgoing edges in the outgoing edges array...
Definition: FileGraph.cpp:641
Contains FileGraph and FileGraphWriter class declarations.
Definition: LC_CSR_Hypergraph.h:86
size_t size() const
Returns the number of nodes in the (sub)graph.
Definition: FileGraph.h:545
LC_CSR_Hypergraph< NodeTy, _edge_data, HasNoLockable, UseNumaAlloc, HasOutOfLineLockable, FileEdgeTy > type
Definition: LC_CSR_Hypergraph.h:89
void acquireNode(GraphNode N, MethodFlag mflag, typename std::enable_if< _A1 &&!_A2 >::type *=0)
Definition: LC_CSR_Hypergraph.h:198
size_t hedges
Definition: LC_CSR_Hypergraph.h:159
uint64_t value_type
Definition: LargeArray.h:60
edge_iterator raw_end(GraphNode N) const
Definition: LC_CSR_Hypergraph.h:179
boost::counting_iterator< uint64_t > iterator
uint64 boost counting iterator
Definition: FileGraph.h:408
EdgeData edgeData
Definition: LC_CSR_Hypergraph.h:166
EdgeIndData edgeIndData
Definition: LC_CSR_Hypergraph.h:164
LargeArray< NodeInfo > NodeData
Definition: LC_CSR_Hypergraph.h:143
void deSerializeNodeData(boost::archive::binary_iarchive &ar)
Deserializes a Boost archive containing node data to the local node data variable.
Definition: LC_CSR_Hypergraph.h:291
void serializeGraph(boost::archive::binary_oarchive &ar) const
Serializes graph using Boost.
Definition: LC_CSR_Hypergraph.h:300
auto divideNodesBinarySearch(NodeType numNodes, uint64_t numEdges, size_t nodeWeight, size_t edgeWeight, size_t id, size_t total, PrefixSumType &edgePrefixSum, std::vector< unsigned > scaleFactor=std::vector< unsigned >(), uint64_t edgeOffset=0, uint64_t nodeOffset=0)
Returns 2 ranges (one for nodes, one for edges) for a particular division.
Definition: GraphHelpers.h:141
void serializeNodeData(boost::archive::binary_oarchive &ar) const
Serializes node data using Boost.
Definition: LC_CSR_Hypergraph.h:281
const_local_iterator local_end() const
Definition: LC_CSR_Hypergraph.h:422
read_default_graph_tag read_tag
Definition: LC_CSR_Hypergraph.h:131
size_t sizeEdges() const
Definition: LC_CSR_Hypergraph.h:413
LC_CSR_Hypergraph< _node_data, EdgeTy, HasNoLockable, UseNumaAlloc, HasOutOfLineLockable, FileEdgeTy > type
Definition: LC_CSR_Hypergraph.h:82
void constructFrom(FileGraph &graph, unsigned tid, unsigned total)
Definition: LC_CSR_Hypergraph.h:712
void constructEdgeValue(FileGraph &graph, typename FileGraph::edge_iterator nn, typename std::enable_if<!_A1||_A2 >::type *=0)
Definition: LC_CSR_Hypergraph.h:209
GraphNode getEdgeDst(edge_iterator it)
Gets the destination of some edge.
Definition: FileGraph.cpp:669
boost::counting_iterator< uint64_t > edge_iterator
Edge iterators (boost iterator)
Definition: FileGraph.h:248
uint32_t GraphNode
Definition: LC_CSR_Hypergraph.h:146
Definition: Iterable.h:36
LC_CSR_Hypergraph()=default
void constructFrom(uint32_t numNodes, uint64_t numEdges, std::vector< uint64_t > &prefix_sum, std::vector< std::vector< uint32_t >> &edges_id)
custom allocator for vector<vector<>> Adding for Louvain clustering TODO: Find better way to do this ...
Definition: LC_CSR_Hypergraph.h:757
const char * loopname
Definition: Executor_ParaMeter.h:145
Definition: LC_CSR_Hypergraph.h:79
bool shouldLock(const galois::MethodFlag g)
Helper function to decide if the conflict detection lock should be taken.
Definition: libgalois/include/galois/runtime/Context.h:189
Definition: LC_CSR_Hypergraph.h:74
friend class boost::serialization::access
Definition: LC_CSR_Hypergraph.h:229
NodeTy node_data_type
Definition: LC_CSR_Hypergraph.h:149
edge_sort_iterator edge_sort_end(GraphNode N)
Definition: LC_CSR_Hypergraph.h:187
edge_iterator edge_begin(GraphNode N, MethodFlag mflag=MethodFlag::WRITE)
Definition: LC_CSR_Hypergraph.h:434
iterator const_iterator
Definition: LC_CSR_Hypergraph.h:155
void constructEdge(uint64_t e, uint32_t dst)
Definition: LC_CSR_Hypergraph.h:594
void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp)
Definition: ParallelSTL.h:247
edge_sort_iterator edge_sort_begin(GraphNode N)
Definition: LC_CSR_Hypergraph.h:183
Modify a LC_Graph to have in and out edges.
Definition: LC_InOut_Graph.h:39
iterator end() const
Definition: LC_CSR_Hypergraph.h:416
Local computation graph (i.e., graph structure does not change).
Definition: LC_CSR_Hypergraph.h:63
void deallocate()
Definition: LC_CSR_Hypergraph.h:574
If true, do not use abstract locks in graph.
Definition: LC_CSR_Hypergraph.h:101
NodeData nodeData
Definition: LC_CSR_Hypergraph.h:163
local_iterator local_begin()
Definition: LC_CSR_Hypergraph.h:426
void allocateInterleaved(size_type n)
[allocatefunctions] Allocates interleaved across NUMA (memory) nodes.
Definition: LargeArray.h:206
void edgeDataCopy(EdgeData &edgeData_new, EdgeData &edgeData, uint64_t e_new, uint64_t e, typename std::enable_if< is_non_void >::type *=0)
Definition: LC_CSR_Hypergraph.h:700
std::vector< T, Pow2Alloc< T >> Vector
[STL vector using Pow_2_VarSizeAlloc]
Definition: gstl.h:52
iterator local_iterator
Definition: LC_CSR_Hypergraph.h:156
value_type & reference
Definition: LargeArray.h:63
If true, use NUMA-aware graph allocation.
Definition: LC_CSR_Hypergraph.h:113
const EdgeIndData & getEdgePrefixSum() const
Returns the reference to the edgeIndData LargeArray (a prefix sum of edges)
Definition: LC_CSR_Hypergraph.h:745
iterator const_local_iterator
Definition: LC_CSR_Hypergraph.h:157
LC_CSR_Hypergraph type
Definition: LC_CSR_Hypergraph.h:75
node_data_reference getData(GraphNode N, MethodFlag mflag=MethodFlag::WRITE)
Definition: LC_CSR_Hypergraph.h:395
GraphNode getEdgeDst(edge_iterator ni)
Definition: LC_CSR_Hypergraph.h:410
void sortEdgesByDst(GraphNode N, MethodFlag mflag=MethodFlag::WRITE)
Sorts outgoing edges of a node.
Definition: LC_CSR_Hypergraph.h:500
Proxy object for internal EdgeSortReference.
Definition: Details.h:56
NodeInfoTypes::reference node_data_reference
Definition: LC_CSR_Hypergraph.h:151
boost::counting_iterator< typename EdgeIndData::value_type > edge_iterator
Definition: LC_CSR_Hypergraph.h:153
internal::EdgeSortIterator< GraphNode, typename EdgeIndData::value_type, EdgeDst, EdgeData > edge_sort_iterator
Definition: LC_CSR_Hypergraph.h:173
edge_iterator raw_begin(GraphNode N) const
Definition: LC_CSR_Hypergraph.h:175
EdgeData::reference edge_data_reference
Definition: LC_CSR_Hypergraph.h:150
void acquire(Lockable *lockable, galois::MethodFlag m)
Master function which handles conflict detection used to acquire a lockable thing.
Definition: libgalois/include/galois/runtime/Context.h:218
MethodFlag
What should the runtime do when executing a method.
Definition: MethodFlags.h:34
void constructEdgeValue(FileGraph &, typename FileGraph::edge_iterator nn, typename std::enable_if< _A1 &&!_A2 >::type *=0)
Definition: LC_CSR_Hypergraph.h:219
void fixEndEdge(uint32_t n, uint64_t e)
Definition: LC_CSR_Hypergraph.h:596
void do_all(const RangeFunc &rangeMaker, FunctionTy &&fn, const Args &...args)
Standard do-all loop.
Definition: Loops.h:71
void transpose(const char *regionName=NULL)
Perform an in-memory transpose of the graph, replacing the original CSR to CSC.
Definition: LC_CSR_Hypergraph.h:602
uint64_t operator[](uint64_t n)
Accesses the "prefix sum" of this graph; takes advantage of the fact that edge_end(n) is basically pr...
Definition: LC_CSR_Hypergraph.h:338
LargeArray< uint64_t > EdgeIndData
Definition: LC_CSR_Hypergraph.h:142
LC_CSR_Hypergraph< NodeTy, EdgeTy, HasNoLockable, UseNumaAlloc, HasOutOfLineLockable, _file_edge_data > type
Definition: LC_CSR_Hypergraph.h:96
runtime::iterable< NoDerefIterator< edge_iterator > > edges(GraphNode N, MethodFlag mflag=MethodFlag::WRITE)
Definition: LC_CSR_Hypergraph.h:462
const_local_iterator local_begin() const
Definition: LC_CSR_Hypergraph.h:418
uint64_t numEdges
Definition: LC_CSR_Hypergraph.h:169
void start()
Definition: Timer.cpp:82
EdgeDst edgeDst
Definition: LC_CSR_Hypergraph.h:165
void on_each(FunctionTy &&fn, const Args &...args)
Low-level parallel loop.
Definition: Loops.h:86
edge_iterator findEdgeSortedByDst(GraphNode N1, GraphNode N2)
Definition: LC_CSR_Hypergraph.h:454
void acquireNode(GraphNode, MethodFlag, typename std::enable_if< _A2 >::type *=0)
Definition: LC_CSR_Hypergraph.h:204
GraphNode getNode(size_t n)
Definition: LC_CSR_Hypergraph.h:226
EdgeTy & getEdgeData(GraphNode src, GraphNode dst)
Get edge data of an edge between 2 nodes.
Definition: FileGraph.h:241
runtime::iterable< NoDerefIterator< edge_iterator > > out_edges(GraphNode N, MethodFlag mflag=MethodFlag::WRITE)
Definition: LC_CSR_Hypergraph.h:468
Definition: LC_CSR_Hypergraph.h:93
void sortEdges(GraphNode N, const CompTy &comp, MethodFlag mflag=MethodFlag::WRITE)
Sorts outgoing edges of a node.
Definition: LC_CSR_Hypergraph.h:491
iterator begin() const
Definition: LC_CSR_Hypergraph.h:415
EdgeTy edge_data_type
Definition: LC_CSR_Hypergraph.h:147
void constructAt(size_type n, Args &&...args)
Definition: LargeArray.h:260
GraphRange divideByNode(size_t nodeSize, size_t edgeSize, size_t id, size_t total)
Given a division and a total number of divisions, return a range for that particular division to work...
Definition: FileGraph.cpp:480
LC_CSR_Hypergraph(uint32_t _numNodes, uint64_t _numEdges, EdgeNumFnTy edgeNum, EdgeDstFnTy _edgeDst, EdgeDataFnTy _edgeData)
Definition: LC_CSR_Hypergraph.h:341
edge_iterator edge_end(GraphNode N)
Returns the index to the end of global node N's outgoing edges in the outgoing edges array...
Definition: FileGraph.cpp:655
internal::NodeInfoBaseTypes< NodeTy,!HasNoLockable &&!HasOutOfLineLockable > NodeInfoTypes
Definition: LC_CSR_Hypergraph.h:138
size_t sizeEdges() const
Returns the number of edges in the (sub)graph.
Definition: FileGraph.h:548
void sortAllEdgesByDst(MethodFlag mflag=MethodFlag::WRITE)
Sorts all outgoing edges of all nodes in parallel.
Definition: LC_CSR_Hypergraph.h:513
const_pointer data() const
Definition: LargeArray.h:292
void allocateBlocked(size_type n)
Allocates using blocked memory policy.
Definition: LargeArray.h:213
static const bool has_value
Definition: LargeArray.h:69
internal::NodeInfoBase< NodeTy,!HasNoLockable &&!HasOutOfLineLockable > NodeInfo
Definition: LC_CSR_Hypergraph.h:141
void edgeDataCopy(EdgeData &, EdgeData &, uint64_t, uint64_t, typename std::enable_if<!is_non_void >::type *=0)
Definition: LC_CSR_Hypergraph.h:707
auto divideByNode(size_t nodeSize, size_t edgeSize, size_t id, size_t total)
Definition: LC_CSR_Hypergraph.h:747
Graph that mmaps Galois gr files for access.
Definition: FileGraph.h:57
local_iterator local_end()
Definition: LC_CSR_Hypergraph.h:430
auto iterate(C &cont)
Definition: Range.h:323
This is a container that encapsulates a resizeable array of plain-old-datatype (POD) elements...
Definition: PODResizeableArray.h:40
edge_iterator findEdge(GraphNode N1, GraphNode N2)
Definition: LC_CSR_Hypergraph.h:449
InputIterator find_if(InputIterator first, InputIterator last, Predicate pred)
Definition: ParallelSTL.h:70
edge_data_reference getEdgeData(edge_iterator ni, MethodFlag GALOIS_UNUSED(mflag)=MethodFlag::UNPROTECTED)
Definition: LC_CSR_Hypergraph.h:404
void constructEdge(uint64_t e, uint32_t dst, const typename EdgeData::value_type &val)
Definition: LC_CSR_Hypergraph.h:588
T value_type
Definition: Executor_ParaMeter.h:111
void allocateFrom(FileGraph &graph)
Definition: LC_CSR_Hypergraph.h:520
void acquireNode(GraphNode N, MethodFlag mflag, typename std::enable_if<!_A1 &&!_A2 >::type *=0)
Definition: LC_CSR_Hypergraph.h:192
FileEdgeTy file_edge_data_type
Definition: LC_CSR_Hypergraph.h:148
void deallocate()
Definition: LargeArray.h:271
edge_iterator edge_end(GraphNode N, MethodFlag mflag=MethodFlag::WRITE)
Definition: LC_CSR_Hypergraph.h:444
void allocateFrom(uint32_t nNodes, uint64_t nEdges)
Definition: LC_CSR_Hypergraph.h:538
void stop()
Definition: Timer.cpp:87
uint64_t numNodes
Definition: LC_CSR_Hypergraph.h:168
Galois Timer that automatically reports stats upon destruction Provides statistic interface around ti...
Definition: Timer.h:63
void sortEdgesByEdgeData(GraphNode N, const CompTy &comp=std::less< EdgeTy >(), MethodFlag mflag=MethodFlag::WRITE)
Sorts outgoing edges of a node.
Definition: LC_CSR_Hypergraph.h:476
LC_CSR_Hypergraph< NodeTy, EdgeTy, HasNoLockable, UseNumaAlloc, _has_out_of_line_lockable, FileEdgeTy > type
Definition: LC_CSR_Hypergraph.h:128