| SNAP Library 2.1, User Reference
    2013-09-25 10:47:25
    SNAP, a general purpose, high performance system for analysis and manipulation of large networks | 
Simple directed/undirected graph defined by its edges. More...
#include <ghash.h>
| Public Member Functions | |
| TSimpleGraph () | |
| TSimpleGraph (const TIntPrV &GEdgeV) | |
| bool | operator== (const TSimpleGraph &Graph) const | 
| bool | operator< (const TSimpleGraph &Graph) const | 
| int | GetEdges () const | 
| void | AddEdge (const int &SrcNId, const int &DstNId) | 
| bool | Join (const TSimpleGraph &G1, const TSimpleGraph &G2) | 
| TIntPrV & | GetEdgeV () | 
| TIntPrV & | operator() () | 
| void | Dump (const TStr &Desc=TStr()) const | 
| Private Attributes | |
| TIntPrV | EdgeV | 
| TSimpleGraph::TSimpleGraph | ( | ) |  [inline] | 
| TSimpleGraph::TSimpleGraph | ( | const TIntPrV & | GEdgeV | ) |  [inline] | 
| void TSimpleGraph::AddEdge | ( | const int & | SrcNId, | 
| const int & | DstNId | ||
| ) |  [inline] | 
| void TSimpleGraph::Dump | ( | const TStr & | Desc = TStr() | ) | const | 
| int TSimpleGraph::GetEdges | ( | ) | const  [inline] | 
| TIntPrV& TSimpleGraph::GetEdgeV | ( | ) |  [inline] | 
| bool TSimpleGraph::Join | ( | const TSimpleGraph & | G1, | 
| const TSimpleGraph & | G2 | ||
| ) | 
Definition at line 233 of file ghash.cpp.
                                                                      {
  const int Edges1 = G1.GetEdges();
  const int Edges2 = G2.GetEdges();
  const TIntPrV& EdgeV1 = G1.EdgeV;
  const TIntPrV& EdgeV2 = G2.EdgeV;
  const int MxEdges = Edges1+1;
  if (GetEdges() != MxEdges) EdgeV.Gen(MxEdges);
  IAssert(Edges1 == Edges2);
  int e=0, g1=0, g2=0;
  while (g1 < Edges1 && g2 < Edges2) {
    if (e == MxEdges) return false;
    if (abs(g1 - g2) > 1) return false;
    if (EdgeV1[g1] == EdgeV2[g2]) { e++;  g1++;  g2++; }
    else if (EdgeV1[g1] < EdgeV2[g2]) { e++;  g1++; }
    else { e++;  g2++; }
  }
  e=0; g1=0; g2=0;
  while (g1 < Edges1 && g2 < Edges2) {
    if (EdgeV1[g1] == EdgeV2[g2]) {
      EdgeV[e] = EdgeV1[g1];  e++;  g1++;  g2++; }
    else if (EdgeV1[g1] < EdgeV2[g2]) {
      EdgeV[e] = EdgeV1[g1];  e++;  g1++; }
    else {
      EdgeV[e] = EdgeV2[g2];  e++;  g2++; }
  }
  if (g1 == Edges1 && g2 == Edges2 && e == MxEdges) return true;
  if (e+1 == MxEdges) {
    if (g1+1 == Edges1 && g2 == Edges2) {
      EdgeV[e] = EdgeV1.Last();
      return true;
    }
    if (g1 == Edges1 && g2+1 == Edges2) {
      EdgeV[e] = EdgeV2.Last();
      return true;
    }
  }
  return false;
}
| TIntPrV& TSimpleGraph::operator() | ( | ) |  [inline] | 
| bool TSimpleGraph::operator< | ( | const TSimpleGraph & | Graph | ) | const  [inline] | 
| bool TSimpleGraph::operator== | ( | const TSimpleGraph & | Graph | ) | const  [inline] | 
| TIntPrV TSimpleGraph::EdgeV  [private] |