doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / RecBipartLB.C
index a14f58577bbef86a2984fdf2746793fc85e9c67f..d4c9873c598285ab400eee9e9927cb99d9d50334 100644 (file)
  */
 
 /*@{*/
-using namespace std;
 
-#include <limits.h>
-#include <math.h>
+#include "RecBipartLB.h"
+#include "ckgraph.h"
+#include <limits>
 #include <queue>
 #include <vector>
-#include "ckgraph.h"
-#include "RecBipartLB.h"
+
+using std::vector;
+
+/**
+ *  Class to contain additional data about the vertices in object graph
+ */
+class Vertex_helper {
+  public:
+    inline int getPartition(){ return partition; }
+    inline void setPartition(int p){partition=p; }
+    inline bool getMarked(){ return marked; }
+    inline void setMarked(bool v){ marked=v;}
+    inline bool getBoundaryline(){return boundaryline;}
+    inline void setBoundaryline(bool v){ boundaryline=v;}
+    inline int getEdgestopart1(){return edgestopart1;}
+    inline int getEdgestopart2(){return edgestopart2;}
+    inline void setEdgestopart1(int v){edgestopart1=v;}
+    inline void setEdgestopart2(int v){edgestopart2=v;}
+    inline void incEdgestopart1(int v){edgestopart1+=v ;}
+    inline void incEdgestopart2(int v){edgestopart2+=v;}
+    inline void decEdgestopart1(int v){edgestopart1-=v;}
+    inline void decEdgestopart2(int v){edgestopart2-=v;}
+    inline void setLevel(int l){level=l;}
+    inline int getLevel(){return level;}
+    inline int getGain(){return gain;}
+    inline void setGain(int v){gain=v;};
+
+  private:
+    int partition;      // partition to which this vertex currently belongs
+    bool marked;       // already marked or not
+    bool boundaryline;  //on boundaryline of a partition or not
+    int edgestopart1; //only for boundaryline vertices
+    int edgestopart2; //only for boundaryline vertices
+    int gain;          //gain if this vertex switched partitions
+    int level;
+};
+
+/**
+ *  Class to handle the boundaries of child partitions
+ */
+class BQueue {
+  public:
+    vector<int> q;
+
+    BQueue(short b){
+      forboundary=b;
+    }
+
+    inline int getMingain(){return mingain;}
+    inline void setMingain(int v){mingain=v;}
+    inline int getVertextoswap(){return vertextoswap;}
+    inline void setVertextoswap(int v){vertextoswap=v;}
+    inline int getSwapid(){return swapid;}
+    inline void setSwapid(int v){swapid=v;}
+    inline short getBoundary(){return forboundary;}
+    void push(Vertex *);
+    void removeComplete(Vertex *);
+    void removeToSwap(Vertex *);
+
+  private:
+    int mingain;
+    int vertextoswap;
+    int swapid;
+    short forboundary;
+};
 
 void RecursiveBiPart(ObjGraph *, vector<Vertex *> & ,int, int);
 void adjustqueues(ObjGraph *, BQueue *, BQueue *, vector<Vertex *> &, vector<Vertex *> &,int *, int);
@@ -137,11 +200,11 @@ void RecursiveBiPart(ObjGraph *ogr, vector<Vertex *> &pvertices, int parent, int
   //if the number of processors that this call has to deal with is 1, dont recurse any further
   if(nump==1)
   {
-    parray->procs[peno].setTotalLoad(0);
+    parray->procs[peno].totalLoad() = 0.0;
     for(int i=0;i<pvertices.size();i++)
     {
       pvertices[i]->setNewPe(peno);
-      parray->procs[peno].setTotalLoad(parray->procs[peno].getTotalLoad() + pvertices[i]->getVertexLoad());
+      parray->procs[peno].totalLoad() += pvertices[i]->getVertexLoad();
     }
     peno++;
 
@@ -168,7 +231,7 @@ void RecursiveBiPart(ObjGraph *ogr, vector<Vertex *> &pvertices, int parent, int
   for(int i=0;i<vhelpers.size();i++)
     taken[i]=false;
   int start = pvertices[0]->getVertexId();
-  int nextPe = 0, count=0, n=0;
+  int count=0;
   double loadseen=0;
   double pload=0;
   bool getout=false;
@@ -299,12 +362,12 @@ void RecursiveBiPart(ObjGraph *ogr, vector<Vertex *> &pvertices, int parent, int
 //Fills in que1, que2 and adjusts their gains, calculates initial edgecut before KLFM
 void adjustqueues(ObjGraph *ogr, BQueue *que1, BQueue *que2, vector <Vertex *> &partition1, vector<Vertex *> &partition2, int *initialedgecut, int parent)
 {
-  int i,j,uid,wid;
+  int i,uid,wid;
   bool swap=true;
   int ei=-1;
   Edge *edge;
   int edgecut=0;
-  que2->setMingain(INT_MAX);
+  que2->setMingain(std::numeric_limits<int>::max());
   que2->setVertextoswap(-1);
   que2->setSwapid(-1);
 
@@ -407,7 +470,7 @@ void adjustgain(ObjGraph *ogr,vector<Vertex *> &partition, BQueue *que)
 {
   int i;
   int bdry=que->getBoundary();
-  que->setMingain(INT_MAX);
+  que->setMingain(std::numeric_limits<int>::max());
   que->setVertextoswap(-1);
   que->setSwapid(-1);
 
@@ -511,7 +574,7 @@ void swapQ1toQ2(ObjGraph *ogr, BQueue *q1, BQueue *q2, int parent)
 
 Vertex * removeinSwap(ObjGraph *ogr,BQueue *q1, BQueue *q2, int parent)
 {
-  int i,j,ei=-1, uid, wid, einested=-1;
+  int ei=-1, uid, wid, einested=-1;
   Edge *edge, *edgenested;
   bool swap=true, swapnested=true;
   Vertex *v=(Vertex *)&(ogr->vertices[q1->getVertextoswap()]);