GraphClass.h
4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/* -*- mode:c++ -*- */
#ifndef GRAPHCLASS_H
#define GRAPHCLASS_H
#include "Utility.h"
#include "BaseGraphClass.h"
//CONSTANTS
/**
Definition of offsets in the STATUS vector for vertices and their
semantic meaning.
*/
const unsigned LABEL_VERTEX_ATTRIBUTE_ID = 0;
const unsigned KERNEL_POINT_ID = 0;
const unsigned KIND_ID = 1;
const unsigned VIEWPOINT_ID = 2;
const unsigned DEAD_ID = 3;
const unsigned ABSTRACTION_ID = 4;
/**
Definition of offsets in the STATUS vector for edges and their
semantic meaning.
*/
const unsigned EDGE_ATTRIBUTE_ID = 0;
const unsigned EDGE_DEAD_ID = 0;
const unsigned EDGE_ABSTRACTIONOF_ID = 1;
const unsigned EDGE_PARTOF_ID = 2;
///Adds semantics to the raw interface of BaseGraphClass.
///
///These concepts are introduced: ViewPoint, KernelPoint, Alive, Abstraction.
///
///Offers functions to compute pairwise distance information and to extract subgraphs.
class GraphClass: public BaseGraphClass {
friend ostream& operator<<(ostream& out, const GraphClass& aG);
private:
public:
GraphClass(const string& aGid = "temp") :
mGraphID(aGid), mSliceIdList(1), mMaxRadius(-1), mMaxDistance(-1) {
}
string GetGraphID() const;
void SetGraphID(string aGraphID);
vector<unsigned> GetVertexAdjacentList(unsigned aID) const;
bool IsSliced(void) const {
return mSliceIdList.size() > 1;
}
ostream& Output(ostream& out) const;
void ExportGraph(const string& aFilename, const string& aFormat) const;
void SetSliceID(unsigned aID, const std::string& aSliceID);
string GetSliceID(unsigned aID) const;
void SetVertexKernelPoint(unsigned aID, bool state);
bool GetVertexKernelPoint(unsigned aID) const;
void SetVertexKind(unsigned aID, bool kind);
bool GetVertexKind(unsigned aID) const;
void SetVertexViewPoint(unsigned aID, bool state);
bool GetVertexViewPoint(unsigned aID) const;
void SetVertexAlive(unsigned aID, bool state);
bool GetVertexAlive(unsigned aID) const;
void SetVertexAbstraction(unsigned aID, bool state);
bool GetVertexAbstraction(unsigned aID) const;
void KillVertices(std::string s);
void SetVertexDead(unsigned aID, bool state);
bool GetVertexDead(unsigned aID) const;
void SetVertexLabel(unsigned aID, const string& aLabel);
string GetVertexLabel(unsigned aID) const;
string GetVertexLabelConcatenated(unsigned aID) const;
void SetEdgeLabel(unsigned aSrcID, unsigned aDestID, const string& aLabel);
string GetEdgeLabel(unsigned aSrcID, unsigned aDestID) const;
string GetEdgeLabel(unsigned aEdgeID) const;
string GetEdgeLabelConcatenated(unsigned aSrcID, unsigned aDestID) const;
string GetEdgeLabelConcatenated(unsigned aEdgeID) const;
bool GetEdgeAbstractionOf(unsigned aSrcID, unsigned aDestID) const;
bool GetEdgeAbstractionOf(unsigned aEdgeID) const;
void SetEdgeAbstractionOf(unsigned aSrcID, unsigned aDestID, bool aStatus);
void SetEdgeAbstractionOf(unsigned aEdgeID, bool aStatus);
bool GetEdgePartOf(unsigned aSrcID, unsigned aDestID) const;
bool GetEdgePartOf(unsigned aEdgeId) const;
void SetEdgePartOf(unsigned aSrcID, unsigned aDestID, bool aStatus);
void SetEdgePartOf(unsigned aEdgeID, bool aStatus);
bool Check() const;
void ComputePairwiseDistanceInformation(int aMaxDistance = -1, int aMaxRadius = -1, vector<unsigned> aViewPointList = vector<unsigned>()) const;
vector<unsigned> GetFixedDistanceVertexIDList(unsigned aSrcID, int aDistance) const;
int PairwiseDistance(unsigned aSrcID, unsigned aDestID) const;
set<unsigned> GetUnionShortestPathsVertexIDList(unsigned aSrcID, unsigned aDestID, unsigned aDistance) const;
set<unsigned> GetUnionShortestPathsVertexIDList(unsigned aSrcID, unsigned aDestID, unsigned aDistance, unsigned aRadius)const;
set<unsigned> GetUnionThickShortestPathsVertexIDSet(unsigned aSrcID, unsigned aDestID, unsigned aDistance, unsigned aThickness) const;
vector<unsigned> GetNeighborhoodVertexIDList(unsigned aSrcID, unsigned aDistance) const;
void SaveAsDotFile(const string& aFilename) const;
void SaveAsGMLFile(const string& aFilename) const;
void SaveAsGDLFile(const string& aFilename) const;
void SaveAsCSVFile(const string& aFilename) const;
void SaveAsGspanFile(const string& aFilename) const;
protected:
void SingleVertexBoundedBreadthFirstVisit(unsigned aRootVertexIndex, int aRadius, map<pair<unsigned, unsigned>, int>& oSrcDestMaptoDistance) const;
string vertex_label_serialize(unsigned v, string separator = "\n") const;
string edge_label_serialize(unsigned edge_id) const;
protected:
string mGraphID;
vector<string> mSliceIdList;
mutable int mMaxRadius;
mutable int mMaxDistance;
mutable map<pair<unsigned, unsigned>, int> mSrcDestMaptoDistance; //semantic: <src_id,dest_id> \mapsto distance
mutable map<pair<unsigned, int>, vector<unsigned> > mSrcDistanceMaptoDestList; //semantic: <src_id,distance> \mapsto list of dest_id
};
#endif