BaseGraphClass.h
4.83 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
/* -*- mode:c++ -*- */
#ifndef BASEGRAPHCLASS_H
#define BASEGRAPHCLASS_H
#include <set>
#include <string>
using namespace std;
///Implements a list of vertices + list of edges + adjacency list data structure to represent graphs.
///Properties of vertices and edges are stored in 3 vectors of vectors: 1) symbolic (i.e. strings) 2) numeric (i.e. doubles) 3) status (i.e. boolean).
class BaseGraphClass{
friend ostream& operator<<(ostream& out, const BaseGraphClass& aSG);
///Implements the edge as an ID and a destination vertex ID
class EdgeClass{
public:
EdgeClass();
EdgeClass(unsigned aDestVertexID,unsigned aEdgeID);
public:
unsigned mDestVertexID;
unsigned mEdgeID;
};
public:
BaseGraphClass();
void ResizeMemory();
unsigned GetVertexInducedRootedSubGraph(const set<unsigned>& aVertexSet, unsigned aNominalRootIndex, BaseGraphClass& oG)const;
unsigned InsertVertex();
unsigned InsertEdge(unsigned aSrcVertexID, unsigned aDestVertexID);
void SetVertexNumericAttributeList(unsigned aID,const vector<double>& aAttributeList);
void SetVertexNumericAttributeList(unsigned aID,unsigned aAttributeID, double aValue);
void SetVertexSymbolicAttributeList(unsigned aID,const vector<string>& aAttributeList);
void SetVertesSymbolicAttribute(unsigned aID,unsigned aAttributeID, const string& aValue);
void SetVertexStatusAttributeList(unsigned aID,const vector<bool>& aAttributeList);
void SetVertexStatusAttributeList(unsigned aID,unsigned aAttributeID, bool aValue);
void SetEdgeNumericAttributeList(unsigned aID,const vector<double>& aAttributeList);
void SetEdgeNumericAttribute(unsigned aID,unsigned aAttributeID, double aValue);
void SetEdgeNumericAttribute(unsigned aSrcID, unsigned aDestID,unsigned aAttributeID, double aValue);
void SetEdgeSymbolicAttributeList(unsigned aID,const vector<string>& aAttributeList);
void SetEdgeSymbolicAttribute(unsigned aID,unsigned aAttributeID, const string& aValue);
void SetEdgeSymbolicAttribute(unsigned aSrcID, unsigned aDestID,unsigned aAttributeID, const string& aValue);
void SetEdgeStatusAttributeList(unsigned aID,const vector<bool>& aAttributeList);
void SetEdgeStatusAttribute(unsigned aID,unsigned aAttributeID, bool aValue);
void SetEdgeStatusAttribute(unsigned aSrcID, unsigned aDestID,unsigned aAttributeID, bool aValue);
void SetVertexSymbolicID(unsigned aID,string aSID);
string GetVertexSymbolicID(unsigned aID) const;
vector<string> GetVertexSymbolicAttributeList(unsigned aID)const;
vector<double> GetVertexNumericAttributeList(unsigned aID)const;
vector<bool> GetVertexStatusAttributeList(unsigned aID)const;
string GetVertexSymbolicAttribute(unsigned aID, unsigned aAttributeID)const;
double GetVertexNumericAttribute(unsigned aID, unsigned aAttributeID)const;
bool GetVertexStatusAttribute(unsigned aID, unsigned aAttributeID)const;
vector<string> GetEdgeSymbolicAttributeList(unsigned aSrcID, unsigned aDestID)const;
vector<string> GetEdgeSymbolicAttributeList(unsigned aEdgeID)const;
string GetEdgeSymbolicAttribute(unsigned aSrcID, unsigned aDestID, unsigned aAttributeID)const;
string GetEdgeSymbolicAttribute(unsigned aEdgeID, unsigned aAttributeID)const;
vector<double> GetEdgeNumericAttributeList(unsigned aSrcID, unsigned aDestID)const;
vector<double> GetEdgeNumericAttributeList(unsigned aEdgeID)const;
double GetEdgeNumericAttribute(unsigned aSrcID, unsigned aDestID, unsigned aAttributeID)const;
double GetEdgeNumericAttribute(unsigned aEdgeID, unsigned aAttributeID)const;
vector<bool> GetEdgeStatusAttributeList(unsigned aSrcID, unsigned aDestID)const;
vector<bool> GetEdgeStatusAttributeList(unsigned aEdgeID)const;
bool GetEdgeStatusAttribute(unsigned aSrcID, unsigned aDestID, unsigned aAttributeID)const;
bool GetEdgeStatusAttribute(unsigned aEdgeID, unsigned aAttributeID)const;
vector<unsigned> GetVertexAdjacentList(unsigned aID)const;
unsigned VertexAdjacentListSize(unsigned aID)const;
vector<unsigned> GetEdgeAdjacentList(unsigned aID)const;
unsigned GetEdgeID(unsigned aSrcID, unsigned aDestID)const;
unsigned GetEdgeSource(unsigned aEdgeID)const;
unsigned GetEdgeDestination(unsigned aEdgeID)const;
bool IsEdge(unsigned aSrcID, unsigned aDestID)const;
ostream& Output(ostream& out)const;
string Serialize()const;
unsigned VertexSize()const;
unsigned EdgeSize()const;
bool IsEmpty()const;
protected:
mutable bool mTopologicalChangeOccurrence;
unsigned mVertexSize;
unsigned mEdgeSize;
vector<string> mVertexSymbolicIDList;
vector< vector<EdgeClass> > mAdjacencyList;
vector<vector<double> > mVertexNumericAttributeList;
vector<vector<string> > mVertexSymbolicAttributeList;
vector<vector<bool> > mVertexStatusAttributeList;
vector<vector<double> > mEdgeNumericAttributeList;
vector<vector<string> > mEdgeSymbolicAttributeList;
vector<vector<bool> > mEdgeStatusAttributeList;
};
#endif