37     TNode() : Id(-1), InNIdV(), OutNIdV() { }
 
   38     TNode(
const int& NId) : Id(NId), InNIdV(), OutNIdV() { }
 
   39     TNode(
const TNode& Node) : Id(Node.Id), InNIdV(Node.InNIdV), OutNIdV(Node.OutNIdV) { }
 
   40     TNode(
TSIn& SIn) : Id(SIn), InNIdV(SIn), OutNIdV(SIn) { }
 
   46     int GetInNId(
const int& NodeN)
 const { 
return InNIdV[NodeN]; }
 
   47     int GetOutNId(
const int& NodeN)
 const { 
return OutNIdV[NodeN]; }
 
   64     TNodeI(
const THashIter& NodeHIter) : NodeHI(NodeHIter) { }
 
   72     int GetId()
 const { 
return NodeHI.GetDat().GetId(); }
 
   74     int GetDeg()
 const { 
return NodeHI.GetDat().GetDeg(); }
 
   76     int GetInDeg()
 const { 
return NodeHI.GetDat().GetInDeg(); }
 
   78     int GetOutDeg()
 const { 
return NodeHI.GetDat().GetOutDeg(); }
 
   80     void SortNIdV() { NodeHI.GetDat().SortNIdV(); }
 
   84     int GetInNId(
const int& NodeN)
 const { 
return NodeHI.GetDat().GetInNId(NodeN); }
 
   88     int GetOutNId(
const int& NodeN)
 const { 
return NodeHI.GetDat().GetOutNId(NodeN); }
 
   92     int GetNbrNId(
const int& NodeN)
 const { 
return NodeHI.GetDat().GetNbrNId(NodeN); }
 
   94     bool IsInNId(
const int& NId)
 const { 
return NodeHI.GetDat().IsInNId(NId); }
 
   96     bool IsOutNId(
const int& NId)
 const { 
return NodeHI.GetDat().IsOutNId(NId); }
 
  107     TEdgeI() : CurNode(), EndNode(), CurEdge(0) { }
 
  108     TEdgeI(
const TNodeI& NodeI, 
const TNodeI& EndNodeI, 
const int& EdgeN=0) : CurNode(NodeI), EndNode(EndNodeI), CurEdge(EdgeN) { }
 
  109     TEdgeI(
const TEdgeI& EdgeI) : CurNode(EdgeI.CurNode), EndNode(EdgeI.EndNode), CurEdge(EdgeI.CurEdge) { }
 
  113       while (CurNode < EndNode && CurNode.
GetOutDeg()==0) { CurNode++; } }  
return *
this; }
 
  134   explicit TNGraphMP(
const int& Nodes, 
const int& Edges) : MxNId(0) { 
Reserve(Nodes, Edges); }
 
  151     if (
this!=&Graph) { MxNId=Graph.
MxNId; NodeH=Graph.
NodeH; }  
return *
this; }
 
  217   int AddEdge(
const int& SrcNId, 
const int& DstNId);
 
  222   int AddOutEdge1(
int& SrcIdx, 
const int& SrcNId, 
const int& DstNId);
 
  223   int AddInEdge1(
int& DstIdx, 
const int& SrcNId, 
const int& DstNId);
 
  224   void AddOutEdge2(
const int& SrcNId, 
const int& DstNId);
 
  225   void AddInEdge2(
const int& SrcNId, 
const int& DstNId);
 
  235   void DelEdge(
const int& SrcNId, 
const int& DstNId, 
const bool& IsDir = 
true);
 
  237   bool IsEdge(
const int& SrcNId, 
const int& DstNId, 
const bool& IsDir = 
true) 
const;
 
  245   TEdgeI 
GetEI(
const int& SrcNId, 
const int& DstNId) 
const;
 
  259   void Reserve(
const int& Nodes, 
const int& Edges) { 
if (Nodes>0) { NodeH.
Gen(Nodes); } }
 
  261   void ReserveNodeDegs(
const int& Idx, 
const int& InDeg, 
const int& OutDeg) { 
if (InDeg > 0) NodeH[Idx].InNIdV.Reserve(InDeg); 
if (OutDeg > 0) NodeH[Idx].OutNIdV.Reserve(OutDeg); }
 
  267   void SortEdges(
const int& Idx, 
const int& InDeg, 
const int& OutDeg) { 
if (InDeg > 0) NodeH[Idx].InNIdV.Sort(); 
if (OutDeg > 0) NodeH[Idx].OutNIdV.Sort(); }
 
  276   void Defrag(
const bool& OnlyNodeLinks=
false);
 
  281   bool IsOk(
const bool& ThrowExcept=
true) 
const;
 
  283   void Dump(FILE *OutF=stdout) 
const;
 
TIter GetI(const TKey &Key) const 
 
void AddOutEdge2(const int &SrcNId, const int &DstNId)
 
Main namespace for all the Snap global entities. 
 
bool Empty() const 
Tests whether the graph is empty (has zero nodes). 
 
bool operator<(const TEdgeI &EdgeI) const 
 
int GetOutNId(const int &NodeN) const 
 
int AddOutEdge1(int &SrcIdx, const int &SrcNId, const int &DstNId)
 
void Save(TSOut &SOut) const 
 
bool IsNbrNId(const int &NId) const 
 
void ReserveNIdInDeg(const int &NId, const int &InDeg)
Reserves memory for node ID NId having InDeg in-edges. 
 
int GetMxNId() const 
Returns the maximum id of a any node in the graph. 
 
void Save(TSOut &SOut) const 
 
TNGraphMP(const TNGraphMP &Graph)
 
void SortEdges(const int &Idx, const int &InDeg, const int &OutDeg)
Sorts in-edges and out-edges. 
 
TNodeI GetNI(const int &NId) const 
Returns an iterator referring to the node of ID NId in the graph. 
 
Tests (at compile time) if the graph is directed. 
 
void ReserveNIdOutDeg(const int &NId, const int &OutDeg)
Reserves memory for node ID NId having OutDeg out-edges. 
 
TSizeTy Len() const 
Returns the number of elements in the vector. 
 
TEdgeI & operator++(int)
Increment iterator. 
 
static PNGraphMP New()
Static constructor that returns a pointer to the graph. Call: PNGraphMP Graph = TNGraphMP::New(). 
 
void DelNode(const int &NId)
Deletes node of ID NId from the graph. 
 
TEdgeI(const TNodeI &NodeI, const TNodeI &EndNodeI, const int &EdgeN=0)
 
void SetLen(const int &Length)
 
int GetOutNId(const int &NodeN) const 
Returns ID of NodeN-th out-node (the node the current node points to). 
 
int AddEdge(const TEdgeI &EdgeI)
Adds an edge from EdgeI.GetSrcNId() to EdgeI.GetDstNId() to the graph. 
 
bool operator<(const TNodeI &NodeI) const 
 
const TNode & GetNode(const int &NId) const 
 
int GetNbrNId(const int &NodeN) const 
 
void Save(TSOut &SOut) const 
 
void DelEdge(const int &SrcNId, const int &DstNId, const bool &IsDir=true)
Deletes an edge from node IDs SrcNId to DstNId from the graph. 
 
TNodeI(const THashIter &NodeHIter)
 
void Dump(FILE *OutF=stdout) const 
Print the graph in a human readable form to an output stream OutF. 
 
int GetEdges() const 
Returns the number of edges in the graph. 
 
void ReserveNodeDegs(const int &Idx, const int &InDeg, const int &OutDeg)
Reserves memory for node Idx having InDeg in-edges and OutDeg out-edges. 
 
void Save(TSOut &SOut) const 
 
void SortNIdV()
Sorts the adjacency lists of the current node. 
 
int GetInNId(const int &NodeN) const 
 
TNodeI GetRndNI(TRnd &Rnd=TInt::Rnd)
Returns an interator referring to a random node in the graph. 
 
static PNGraphMP New(const int &Nodes, const int &Edges)
Static constructor that returns a pointer to the graph and reserves enough memory for Nodes nodes and...
 
void Reserve(const int &Nodes, const int &Edges)
Reserves memory for a graph of Nodes nodes and Edges edges. 
 
TEdgeI BegEI() const 
Returns an iterator referring to the first edge in the graph. 
 
TNodeI BegNI() const 
Returns an iterator referring to the first node in the graph. 
 
int AddEdgeUnchecked(const int &SrcNId, const int &DstNId)
Adds an edge from node IDs SrcNId to node DstNId to the graph without performing checks. 
 
void Defrag(const bool &OnlyNodeLinks=false)
Defragments the graph. 
 
bool operator==(const TEdgeI &EdgeI) const 
 
int AddNode(const TNodeI &NodeId)
Adds a node of ID NodeI.GetId() to the graph. 
 
void Sort(const bool &Asc=true)
Sorts the elements of the vector. 
 
void AddInEdge2(const int &SrcNId, const int &DstNId)
 
int GetRndNId(TRnd &Rnd=TInt::Rnd)
Returns an ID of a random node in the graph. 
 
TNodeI EndNI() const 
Returns an iterator referring to the past-the-end node in the graph. 
 
TNGraphMP & operator=(const TNGraphMP &Graph)
 
int GetSrcNId() const 
Gets the source node of an edge. 
 
void DelNode(const TNode &NodeI)
Deletes node of ID NodeI.GetId() from the graph. 
 
void Save(TSOut &SOut) const 
Saves the graph to a (binary) stream SOut. 
 
bool IsNode(const int &NId) const 
Tests whether ID NId is a node. 
 
void SetNodes(const int &Length)
Sets the number of nodes in the graph. 
 
Directed graph for multi-threaded operations. 
 
int GetDeg() const 
Returns degree of the current node, the sum of in-degree and out-degree. 
 
int GetDstNId() const 
Gets destination node of an edge. 
 
TEdgeI GetEI(const int &SrcNId, const int &DstNId) const 
Returns an iterator referring to edge (SrcNId, DstNId) in the graph. 
 
bool IsKey(const TKey &Key) const 
 
bool IsOutNId(const int &NId) const 
Tests whether the current node points to node with ID NId. 
 
int GetId() const 
Returns ID of the current node. 
 
TNGraphMP(const int &Nodes, const int &Edges)
Constructor that reserves enough memory for a graph of Nodes nodes and Edges edges. 
 
int AddInEdge1(int &DstIdx, const int &SrcNId, const int &DstNId)
 
Edge iterator. Only forward iteration (operator++) is supported. 
 
Node iterator. Only forward iteration (operator++) is supported. 
 
bool IsInNId(const int &NId) const 
 
void Clr()
Deletes all nodes and edges from the graph. 
 
TSizeTy SearchBin(const TVal &Val) const 
Returns the position of an element with value Val. 
 
void AddNodeWithEdges(const TInt &NId, TIntV &InNIdV, TIntV &OutNIdV)
Adds a node of ID NId to the graph, creates edges to the node from all nodes in vector InNIdV...
 
friend class TNGraphMPMtx
 
bool HasFlag(const TGraphFlag &Flag) const 
Allows for run-time checking the type of the graph (see the TGraphFlag for flags). 
 
int GetReservedKeyIds() const 
 
bool IsInNId(const int &NId) const 
Tests whether node with ID NId points to the current node. 
 
int GetRndKeyId(TRnd &Rnd) const 
Get an index of a random element. If the hash table has many deleted keys, this may take a long time...
 
void Gen(const int &ExpectVals)
 
THashMP< TInt, TNode > NodeH
 
TNGraphMP(TSIn &SIn)
Constructor that loads the graph from a (binary) stream SIn. 
 
bool IsOutNId(const int &NId) const 
 
bool IsOk(const bool &ThrowExcept=true) const 
Checks the graph data structure for internal consistency. 
 
int GetOutDeg() const 
Returns out-degree of the current node. 
 
void GetNIdV(TIntV &NIdV) const 
Gets a vector IDs of all nodes in the graph. 
 
int GetId() const 
Gets edge ID. Always returns -1 since only edges in multigraphs have explicit IDs. 
 
void SortNodeAdjV()
Sorts the adjacency lists of each node. 
 
int GetNbrNId(const int &NodeN) const 
Returns ID of NodeN-th neighboring node. 
 
void Pack()
Reduces vector capacity (frees memory) to match its size. 
 
enum TGraphFlag_ TGraphFlag
Graph Flags, used for quick testing of graph types. 
 
int GetInDeg() const 
Returns in-degree of the current node. 
 
TEdgeI & operator=(const TEdgeI &EdgeI)
 
Hash-Table with multiprocessing support. 
 
TEdgeI EndEI() const 
Returns an iterator referring to the past-the-end edge in the graph. 
 
bool IsNbrNId(const int &NId) const 
Tests whether node with ID NId is a neighbor of the current node. 
 
int GetNodes() const 
Returns the number of nodes in the graph. 
 
void Clr(const bool &DoDel=true)
 
static PNGraphMP GetSmallGraph()
Returns a small graph on 5 nodes and 6 edges. 
 
void Reserve(const TSizeTy &_MxVals)
Reserves enough memory for the vector to store _MxVals elements. 
 
int AddNode(int NId=-1)
Adds a node of ID NId to the graph. 
 
bool operator==(const TNodeI &NodeI) const 
 
TNodeI & operator++(int)
Increment iterator. 
 
int AddNodeUnchecked(int NId=-1)
Adds a node of ID NId to the graph without performing checks. 
 
static PNGraphMP Load(TSIn &SIn)
Static constructor that loads the graph from a stream SIn and returns a pointer to it...
 
TPt< TNGraphMP > PNGraphMP
 
TNodeI & operator=(const TNodeI &NodeI)
 
TEdgeI(const TEdgeI &EdgeI)
 
const TDat & GetDat(const TKey &Key) const 
 
int GetInNId(const int &NodeN) const 
Returns ID of NodeN-th in-node (the node pointing to the current node). 
 
bool IsEdge(const int &SrcNId, const int &DstNId, const bool &IsDir=true) const 
Tests whether an edge from node IDs SrcNId to DstNId exists in the graph. 
 
TNode & GetNode(const int &NId)
 
int AddEdge(const int &SrcNId, const int &DstNId)
Adds an edge from node IDs SrcNId to node DstNId to the graph. 
 
THashMP< TInt, TNode >::TIter THashIter
 
TNodeI(const TNodeI &NodeI)
 
const TKey & GetKey(const int &KeyId) const