minor changes, removed warnings.
[charm.git] / src / ck-ldb / ObjGraph.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 /**
9  * \addtogroup CkLdb
10 */
11 /*@{*/
12
13 #ifndef _OBJGRAPH_H_
14 #define _OBJGRAPH_H_
15
16 #include "lbdb.h"
17 #include "CentralLB.h"
18
19 class ObjGraph {
20 public:
21   class Edge {
22     friend class ObjGraph;
23   public:
24     int edge_index;
25     int index;
26     int from_node;
27     int to_node;
28     Edge* next_from() { return nxt_out; };
29     Edge* next_to() { return nxt_in; };
30   private:
31     Edge* nxt_out;
32     Edge* nxt_in;
33   };
34
35   class Node {
36     friend class ObjGraph;
37   public:
38     int node_index;
39     int proc;
40     int index;
41     int n_out;
42     int n_in;
43     Edge* edges_from() { return outEdge; };
44     Edge* edges_to() { return inEdge; };
45
46   private:
47     Edge* outEdge;
48     Edge* inEdge;
49     Node* nxt_hash;
50   };
51
52   ObjGraph(int count, CentralLB::LDStats* stats);
53   ~ObjGraph();
54
55   int NodeCount() { return n_objs; };
56   int EdgeCount() { return n_edges; };
57   Node* Start() { return nodelist; };
58   Node GraphNode(int i) { return nodelist[i]; };
59
60   double LoadOf(int i) {
61     const Node n = GraphNode(i);
62     const int index = n.index;
63     return stats->objData[index].wallTime;
64   };
65
66   double EdgeWeight(Edge* e);
67
68 private:
69   enum { hash_max = 256 };
70
71   int calc_hashval(LDOMid, LDObjid);
72   Node* find_node(const LDObjKey &);
73
74   Edge* edgelist;
75   Node* node_table[hash_max];
76
77   int n_objs;
78   int n_edges;
79   Node* nodelist;
80   CentralLB::LDStats* stats;
81 };
82
83 #endif
84
85 /*@}*/