Main Page | Namespace List | Class Hierarchy | Compound List | File List | Namespace Members | Compound Members | File Members

BTree Class Reference

#include <btree.h>

Inheritance diagram for BTree:

Inheritance graph
[legend]
Collaboration diagram for BTree:

Collaboration graph
[legend]
List of all members.

Public Types

enum  MoveType { SWAP, ROTATE, MOVE }

Public Member Functions

 BTree (const HardBlockInfoType &blockinfo)
 BTree (const HardBlockInfoType &blockinfo, double nTolerance)
 BTree (const BTree &newBTree)
bool operator= (const BTree &newBTree)
const vector< double > & xloc () const
const vector< double > & yloc () const
double xloc (int index) const
double yloc (int index) const
double width (int index) const
double height (int index) const
double blockArea () const
double totalArea () const
double totalWidth () const
double totalHeight () const
void setTree (const vector< BTreeNode > &ntree)
void evaluate (const vector< BTreeNode > &ntree)
void evaluate (const vector< int > &tree_bits, const vector< int > &perm, const vector< int > &orient)
void swap (int indexOne, int indexTwo)
void rotate (int index, int newOrient)
void move (int index, int target, bool leftChild)
void save_bbb (const string &filename) const

Static Public Member Functions

void bits2tree (const vector< int > &tree_bits, const vector< int > &perm, const vector< int > &orient, vector< BTreeNode > &ntree)
void clean_tree (vector< BTreeNode > &otree)
void clean_contour (vector< ContourNode > &oContour)

Public Attributes

const vector< BTreeNode > & tree
const vector< ContourNode > & contour
const int NUM_BLOCKS

Static Public Attributes

const int UNDEFINED = Dimension::UNDEFINED

Protected Member Functions

void contour_evaluate ()
void contour_add_block (int treePtr)
void swap_parent_child (int parent, bool isLeft)
void remove_left_up_right_down (int index)

Protected Attributes

const HardBlockInfoTypein_blockinfo
vector< BTreeNodein_tree
vector< ContourNodein_contour
vector< double > in_xloc
vector< double > in_yloc
vector< double > in_width
vector< double > in_height
double in_blockArea
double in_totalArea
double in_totalWidth
double in_totalHeight
const double TOLERANCE

Member Enumeration Documentation

enum BTree::MoveType
 

Enumeration values:
SWAP 
ROTATE 
MOVE 

Definition at line 83 of file btree.h.

Referenced by BTreeAreaWireAnnealer::get_move(), and BTreeAreaWireAnnealer::makeMove().

00083 {SWAP, ROTATE, MOVE};


Constructor & Destructor Documentation

BTree::BTree const HardBlockInfoType blockinfo  ) 
 

Definition at line 51 of file btree.cxx.

References in_contour, in_height, in_tree, in_width, in_xloc, in_yloc, NUM_BLOCKS, and UNDEFINED.

00052    : tree(in_tree),
00053      contour(in_contour),
00054      NUM_BLOCKS(blockinfo.blocknum()),
00055      in_blockinfo(blockinfo),
00056      in_tree(blockinfo.blocknum()+2),
00057      in_contour(blockinfo.blocknum()+2),
00058      
00059      in_xloc(blockinfo.blocknum()+2, UNDEFINED),
00060      in_yloc(blockinfo.blocknum()+2, UNDEFINED),
00061      in_width(blockinfo.blocknum()+2, UNDEFINED),
00062      in_height(blockinfo.blocknum()+2, UNDEFINED),
00063      
00064      in_blockArea(blockinfo.blockArea()),
00065      in_totalArea(0),
00066      in_totalWidth(0),
00067      in_totalHeight(0),
00068 
00069      TOLERANCE(0)
00070 {
00071    int vec_size = NUM_BLOCKS+2;
00072    for (int i = 0; i < vec_size; i++)
00073    {
00074       in_tree[i].parent = UNDEFINED;
00075       in_tree[i].left = UNDEFINED;
00076       in_tree[i].right = UNDEFINED;
00077       in_tree[i].block_index = i;
00078       in_tree[i].orient = UNDEFINED;
00079 
00080       in_contour[i].next = UNDEFINED;
00081       in_contour[i].prev = UNDEFINED;
00082       in_contour[i].begin = UNDEFINED;
00083       in_contour[i].end = UNDEFINED;
00084       in_contour[i].CTL = UNDEFINED;
00085    }
00086 
00087    in_contour[NUM_BLOCKS].next = NUM_BLOCKS+1;
00088    in_contour[NUM_BLOCKS].prev = UNDEFINED;
00089    in_contour[NUM_BLOCKS].begin = 0;
00090    in_contour[NUM_BLOCKS].end = 0;
00091    in_contour[NUM_BLOCKS].CTL = Dimension::INFTY;
00092 
00093    in_xloc[NUM_BLOCKS] = 0;
00094    in_yloc[NUM_BLOCKS] = 0;
00095    in_width[NUM_BLOCKS] = 0;
00096    in_height[NUM_BLOCKS] = Dimension::INFTY;
00097    
00098    in_contour[NUM_BLOCKS+1].next = UNDEFINED;
00099    in_contour[NUM_BLOCKS+1].prev = NUM_BLOCKS;
00100    in_contour[NUM_BLOCKS+1].begin = 0;
00101    in_contour[NUM_BLOCKS+1].end = Dimension::INFTY;
00102    in_contour[NUM_BLOCKS+1].CTL = 0;
00103 
00104    in_xloc[NUM_BLOCKS+1] = 0;
00105    in_yloc[NUM_BLOCKS+1] = 0;
00106    in_width[NUM_BLOCKS+1] = Dimension::INFTY;
00107    in_height[NUM_BLOCKS+1] = 0;
00108 }

BTree::BTree const HardBlockInfoType blockinfo,
double  nTolerance
 

Definition at line 110 of file btree.cxx.

References in_contour, in_height, in_tree, in_width, in_xloc, in_yloc, NUM_BLOCKS, and UNDEFINED.

00112    : tree(in_tree),
00113      contour(in_contour),
00114      NUM_BLOCKS(blockinfo.blocknum()),
00115      in_blockinfo(blockinfo),
00116      in_tree(blockinfo.blocknum()+2),
00117      in_contour(blockinfo.blocknum()+2),
00118      
00119      in_xloc(blockinfo.blocknum()+2, UNDEFINED),
00120      in_yloc(blockinfo.blocknum()+2, UNDEFINED),
00121      in_width(blockinfo.blocknum()+2, UNDEFINED),
00122      in_height(blockinfo.blocknum()+2, UNDEFINED),
00123      
00124      in_blockArea(blockinfo.blockArea()),
00125      in_totalArea(0),
00126      in_totalWidth(0),
00127      in_totalHeight(0),
00128 
00129      TOLERANCE(nTolerance)
00130 {
00131    int vec_size = NUM_BLOCKS+2;
00132    for (int i = 0; i < vec_size; i++)
00133    {
00134       in_tree[i].parent = UNDEFINED;
00135       in_tree[i].left = UNDEFINED;
00136       in_tree[i].right = UNDEFINED;
00137       in_tree[i].block_index = i;
00138       in_tree[i].orient = UNDEFINED;
00139 
00140       in_contour[i].next = UNDEFINED;
00141       in_contour[i].prev = UNDEFINED;
00142       in_contour[i].begin = UNDEFINED;
00143       in_contour[i].end = UNDEFINED;
00144       in_contour[i].CTL = UNDEFINED;
00145    }
00146 
00147    in_contour[NUM_BLOCKS].next = NUM_BLOCKS+1;
00148    in_contour[NUM_BLOCKS].prev = UNDEFINED;
00149    in_contour[NUM_BLOCKS].begin = 0;
00150    in_contour[NUM_BLOCKS].end = 0;
00151    in_contour[NUM_BLOCKS].CTL = Dimension::INFTY;
00152 
00153    in_xloc[NUM_BLOCKS] = 0;
00154    in_yloc[NUM_BLOCKS] = 0;
00155    in_width[NUM_BLOCKS] = 0;
00156    in_height[NUM_BLOCKS] = Dimension::INFTY;
00157    
00158    in_contour[NUM_BLOCKS+1].next = UNDEFINED;
00159    in_contour[NUM_BLOCKS+1].prev = NUM_BLOCKS;
00160    in_contour[NUM_BLOCKS+1].begin = 0;
00161    in_contour[NUM_BLOCKS+1].end = Dimension::INFTY;
00162    in_contour[NUM_BLOCKS+1].CTL = 0;
00163 
00164    in_xloc[NUM_BLOCKS+1] = 0;
00165    in_yloc[NUM_BLOCKS+1] = 0;
00166    in_width[NUM_BLOCKS+1] = Dimension::INFTY;
00167    in_height[NUM_BLOCKS+1] = 0;
00168 }

BTree::BTree const BTree newBTree  )  [inline]
 

Definition at line 155 of file btree.h.

00156    : tree(in_tree),
00157      contour(in_contour),
00158      NUM_BLOCKS(newBtree.NUM_BLOCKS),
00159      in_blockinfo(newBtree.in_blockinfo),
00160      in_tree(newBtree.in_tree),
00161      in_contour(newBtree.in_contour),
00162      
00163      in_xloc(newBtree.in_xloc),
00164      in_yloc(newBtree.in_yloc),
00165      in_width(newBtree.in_width),
00166      in_height(newBtree.in_height),
00167      
00168      in_blockArea(newBtree.in_blockArea),
00169      in_totalArea(newBtree.in_totalArea),
00170      in_totalWidth(newBtree.in_totalWidth),
00171      in_totalHeight(newBtree.in_totalHeight),
00172 
00173      TOLERANCE(newBtree.TOLERANCE)
00174 {}


Member Function Documentation

void BTree::bits2tree const vector< int > &  tree_bits,
const vector< int > &  perm,
const vector< int > &  orient,
vector< BTreeNode > &  ntree
[static]
 

Definition at line 197 of file btree.cxx.

References clean_tree(), and UNDEFINED.

Referenced by evaluate().

00201 {
00202    int perm_size = perm.size();
00203    ntree.resize(perm_size+2);
00204    clean_tree(ntree);
00205 
00206    int treePtr = perm_size;
00207    int bitsPtr = 0;
00208 
00209    int lastAct = -1;
00210    for (int i = 0; i < perm_size; i++)
00211    {
00212       int currAct = tree_bits[bitsPtr];
00213       while (currAct == 1)
00214       {
00215          // move up a level/sibling
00216          if (lastAct == 1)
00217             treePtr = ntree[treePtr].parent;
00218 
00219          // move among siblings
00220          while (ntree[treePtr].right != UNDEFINED)
00221             treePtr = ntree[treePtr].parent;
00222          bitsPtr++;
00223          lastAct = 1;
00224          currAct = tree_bits[bitsPtr];
00225       }
00226 
00227       if (lastAct != 1)
00228          ntree[treePtr].left = perm[i];
00229       else // lastAct == 1
00230          ntree[treePtr].right = perm[i];
00231       
00232       ntree[perm[i]].parent = treePtr;
00233       ntree[perm[i]].block_index = perm[i];
00234       ntree[perm[i]].orient = orient[i];
00235 
00236       treePtr = perm[i];
00237       lastAct = 0;
00238       bitsPtr++;
00239    }         
00240 }

Here is the call graph for this function:

double BTree::blockArea  )  const [inline]
 

Definition at line 217 of file btree.h.

References in_blockArea.

Referenced by BTreeCompactSlice(), OutputBTree(), BTreeAreaWireAnnealer::packOneBlock(), and BTreeCompactor::slimAssign().

00218 {  return in_blockArea; }

void BTree::clean_contour vector< ContourNode > &  oContour  )  [inline, static]
 

Definition at line 248 of file btree.h.

References basepacking_h::Dimension::INFTY, and UNDEFINED.

Referenced by BTreeCompactor::build_orth_tree(), and contour_evaluate().

00249 {
00250    int vec_size = oContour.size();
00251    int Ledge = vec_size-2;
00252    int Bedge = vec_size-1;
00253 
00254    oContour[Ledge].next = Bedge;
00255    oContour[Ledge].prev = UNDEFINED;
00256    oContour[Ledge].begin = 0;
00257    oContour[Ledge].end = 0;
00258    oContour[Ledge].CTL = basepacking_h::Dimension::INFTY;
00259 
00260    oContour[Bedge].next = UNDEFINED;
00261    oContour[Bedge].prev = Ledge;
00262    oContour[Bedge].begin = 0;
00263    oContour[Bedge].end = basepacking_h::Dimension::INFTY;
00264    oContour[Bedge].CTL = 0;
00265 }

void BTree::clean_tree vector< BTreeNode > &  otree  )  [inline, static]
 

Definition at line 232 of file btree.h.

References UNDEFINED.

Referenced by bits2tree(), BTreeSlackEval::BTreeSlackEval(), BTreeCompactor::build_orth_tree(), and BTreeSlackEval::reverse_tree().

00233 {
00234    int vec_size = otree.size();
00235    for (int i = 0; i < vec_size; i++)
00236    {
00237       otree[i].parent = UNDEFINED;
00238       otree[i].left = UNDEFINED;
00239       otree[i].right = UNDEFINED;
00240    }
00241    otree[vec_size-2].block_index = vec_size-2;
00242    otree[vec_size-1].block_index = vec_size-1;
00243 
00244    otree[vec_size-2].orient = UNDEFINED;
00245    otree[vec_size-1].orient = UNDEFINED;
00246 }

void BTree::contour_add_block int  treePtr  )  [protected]
 

Definition at line 484 of file btree.cxx.

References in_blockinfo, in_contour, in_height, in_tree, in_width, in_xloc, in_yloc, TOLERANCE, and UNDEFINED.

Referenced by contour_evaluate().

00485 {
00486    int tree_parent = in_tree[tree_ptr].parent;
00487    double maxCTL = -1;
00488    int contour_ptr = UNDEFINED;
00489    int contour_prev = UNDEFINED;
00490    
00491    if (tree_ptr == in_tree[in_tree[tree_ptr].parent].left)
00492    {
00493       in_contour[tree_ptr].begin = in_contour[tree_parent].end;
00494       contour_ptr = in_contour[tree_parent].next;
00495    }
00496    else
00497    {
00498       in_contour[tree_ptr].begin = in_contour[tree_parent].begin;
00499       contour_ptr = tree_parent;
00500    }
00501    contour_prev = in_contour[contour_ptr].prev; // begins of cPtr/tPtr match
00502    maxCTL = in_contour[contour_ptr].CTL;
00503 
00504    int block = in_tree[tree_ptr].block_index;
00505    int theta = in_tree[tree_ptr].orient;
00506    in_contour[tree_ptr].end =
00507       in_contour[tree_ptr].begin + in_blockinfo[block].width[theta];
00508 
00509    while (in_contour[contour_ptr].end <=
00510           in_contour[tree_ptr].end + TOLERANCE)
00511    {
00512       maxCTL = max(maxCTL, in_contour[contour_ptr].CTL);
00513       contour_ptr = in_contour[contour_ptr].next;
00514    }
00515 
00516    if (in_contour[contour_ptr].begin + TOLERANCE < in_contour[tree_ptr].end)
00517       maxCTL = max(maxCTL, in_contour[contour_ptr].CTL);
00518    
00519    in_xloc[tree_ptr] = in_contour[tree_ptr].begin;
00520    in_yloc[tree_ptr] = maxCTL;
00521    in_width[tree_ptr] = in_blockinfo[block].width[theta];
00522    in_height[tree_ptr] = in_blockinfo[block].height[theta];
00523       
00524    in_contour[tree_ptr].CTL =  maxCTL + in_blockinfo[block].height[theta];
00525    in_contour[tree_ptr].next = contour_ptr;
00526    in_contour[contour_ptr].prev = tree_ptr;
00527    in_contour[contour_ptr].begin = in_contour[tree_ptr].end;
00528 
00529    in_contour[tree_ptr].prev = contour_prev;
00530    in_contour[contour_prev].next = tree_ptr;
00531    in_contour[tree_ptr].begin = in_contour[contour_prev].end;
00532 }

void BTree::contour_evaluate  )  [protected]
 

Definition at line 438 of file btree.cxx.

References clean_contour(), contour_add_block(), in_contour, in_totalArea, in_totalHeight, in_totalWidth, in_tree, NUM_BLOCKS, and UNDEFINED.

Referenced by evaluate(), move(), rotate(), and swap().

00439 {
00440    clean_contour(in_contour);
00441    
00442    int tree_prev = NUM_BLOCKS;
00443    int tree_curr = in_tree[NUM_BLOCKS].left; // start with first block
00444    while (tree_curr != NUM_BLOCKS) // until reach the root again
00445    {
00446 //      cout << "tree_curr: " << tree_curr << endl;
00447       if (tree_prev == in_tree[tree_curr].parent)
00448       {
00449          contour_add_block(tree_curr);
00450          tree_prev = tree_curr;
00451          if (in_tree[tree_curr].left != UNDEFINED)
00452             tree_curr = in_tree[tree_curr].left;
00453          else if (in_tree[tree_curr].right != UNDEFINED)
00454             tree_curr = in_tree[tree_curr].right;
00455          else
00456             tree_curr = in_tree[tree_curr].parent;
00457       }
00458       else if (tree_prev == in_tree[tree_curr].left)
00459       {
00460          tree_prev = tree_curr;
00461          if (in_tree[tree_curr].right != UNDEFINED)
00462             tree_curr = in_tree[tree_curr].right;
00463          else
00464             tree_curr = in_tree[tree_curr].parent;
00465       }
00466       else
00467       {
00468          tree_prev = tree_curr;
00469          tree_curr = in_tree[tree_curr].parent;
00470       }
00471    }
00472    in_totalWidth = in_contour[NUM_BLOCKS+1].begin;
00473 
00474    int contour_ptr = in_contour[NUM_BLOCKS].next;
00475    in_totalHeight = 0;
00476    while (contour_ptr != NUM_BLOCKS+1)
00477    {
00478       in_totalHeight = max(in_totalHeight, in_contour[contour_ptr].CTL);
00479       contour_ptr = in_contour[contour_ptr].next;
00480    }
00481    in_totalArea = in_totalWidth * in_totalHeight;
00482 }

Here is the call graph for this function:

void BTree::evaluate const vector< int > &  tree_bits,
const vector< int > &  perm,
const vector< int > &  orient
 

Definition at line 182 of file btree.cxx.

References bits2tree(), contour_evaluate(), in_tree, and NUM_BLOCKS.

00185 {
00186    if (int(perm.size()) != NUM_BLOCKS)
00187    {
00188       cout << "ERROR: the permutation length doesn't match with "
00189            << "size of the tree." << endl;
00190       exit(1);
00191    }
00192    bits2tree(tree_bits, perm, orient, in_tree);
00193 //   OutputBTree(cout, in_tree);
00194    contour_evaluate();
00195 }

Here is the call graph for this function:

void BTree::evaluate const vector< BTreeNode > &  ntree  ) 
 

Definition at line 170 of file btree.cxx.

References contour_evaluate(), and in_tree.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeFromSoftPacking::BTreeFromSoftPacking(), BTreeSlackEval::evaluateXSlacks(), BTreeSlackEval::evaluateYSlacks(), BTreeAreaWireAnnealer::GenerateRandomSoln(), BTreeAreaWireAnnealer::packSoftBlocks(), and BTreeAreaWireAnnealer::takePlfromDB().

00171 {
00172    if (ntree.size() != in_tree.size())
00173    {
00174       cout << "ERROR: size of btree's doesn't match." << endl;
00175       exit(1);
00176    }
00177 
00178    in_tree = ntree;
00179    contour_evaluate();
00180 }  

Here is the call graph for this function:

double BTree::height int  index  )  const [inline]
 

Definition at line 214 of file btree.h.

References in_height.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeOrientedPacking::BTreeOrientedPacking(), BTreeAreaWireAnnealer::DBfromSoln(), BTreeSlackEval::evaluateYSlacks(), BTreeAreaWireAnnealer::getSoftBlIndex(), BTreeAreaWireAnnealer::getSoftBlNewDimensions(), BTreeOrientedPacking::operator=(), OutputBTree(), BTreeAreaWireAnnealer::packOneBlock(), and BTreeAreaWireAnnealer::packSoftBlocks().

00215 {  return in_height[index]; }

void BTree::move int  index,
int  target,
bool  leftChild
 

Definition at line 355 of file btree.cxx.

References contour_evaluate(), in_tree, remove_left_up_right_down(), and UNDEFINED.

Referenced by BTreeAreaWireAnnealer::makeARWLMove(), BTreeAreaWireAnnealer::makeHPWLMove(), BTreeAreaWireAnnealer::makeMoveSlacksCore(), and BTreeAreaWireAnnealer::perform_move().

00358 {
00359    int index_parent = in_tree[index].parent;
00360    int index_left = in_tree[index].left;
00361    int index_right = in_tree[index].right;
00362 
00363    // remove "index" from the tree
00364    if ((index_left != UNDEFINED) && (index_right != UNDEFINED))
00365       remove_left_up_right_down(index);
00366    else if (index_left != UNDEFINED)
00367    {
00368       in_tree[index_left].parent = index_parent;
00369       if (index == in_tree[index_parent].left)
00370          in_tree[index_parent].left = index_left;
00371       else
00372          in_tree[index_parent].right = index_left;
00373    }
00374    else if (index_right != UNDEFINED)
00375    {
00376       in_tree[index_right].parent = index_parent;
00377       if (index == in_tree[index_parent].left)
00378          in_tree[index_parent].left = index_right;
00379       else
00380          in_tree[index_parent].right = index_right;
00381    }
00382    else
00383    {
00384       if (index == in_tree[index_parent].left)
00385          in_tree[index_parent].left = UNDEFINED;
00386       else
00387          in_tree[index_parent].right = UNDEFINED;
00388    }
00389 
00390    int target_left = in_tree[target].left;
00391    int target_right = in_tree[target].right;
00392    
00393    // add "index" to the required location
00394    if (leftChild)
00395    {
00396       in_tree[target].left = index;
00397       if (target_left != UNDEFINED)
00398          in_tree[target_left].parent = index;
00399          
00400       in_tree[index].parent = target;
00401       in_tree[index].left = target_left;
00402       in_tree[index].right = UNDEFINED;
00403    }
00404    else
00405    {
00406       in_tree[target].right = index;
00407       if (target_right != UNDEFINED)
00408          in_tree[target_right].parent = index;
00409 
00410       in_tree[index].parent = target;
00411       in_tree[index].left = UNDEFINED;
00412       in_tree[index].right = target_right;
00413    }
00414    
00415    contour_evaluate();
00416 }

Here is the call graph for this function:

bool BTree::operator= const BTree newBTree  )  [inline]
 

Reimplemented in BTreeCompactor.

Definition at line 176 of file btree.h.

References in_blockArea, in_contour, in_height, in_totalArea, in_totalHeight, in_totalWidth, in_tree, in_width, in_xloc, in_yloc, and NUM_BLOCKS.

Referenced by BTreeCompactor::operator=().

00177 {
00178    if (NUM_BLOCKS == newBtree.NUM_BLOCKS)
00179    {
00180       in_tree = newBtree.in_tree;
00181       in_contour = newBtree.in_contour;
00182 
00183       in_xloc = newBtree.in_xloc;
00184       in_yloc = newBtree.in_yloc;
00185       in_width = newBtree.in_width;
00186       in_height = newBtree.in_height;
00187 
00188       in_blockArea = newBtree.in_blockArea;
00189       in_totalArea = newBtree.in_totalArea;
00190       in_totalWidth = newBtree.in_totalWidth;
00191       in_totalHeight = newBtree.in_totalHeight;
00192       
00193       return true;
00194    }
00195    else
00196       return false;
00197 }

void BTree::remove_left_up_right_down int  index  )  [protected]
 

Definition at line 418 of file btree.cxx.

References in_tree, and UNDEFINED.

Referenced by move().

00419 {
00420    int index_parent = in_tree[index].parent;
00421    int index_left = in_tree[index].left;
00422    int index_right = in_tree[index].right;
00423 
00424    in_tree[index_left].parent = index_parent;
00425    if (index == in_tree[index_parent].left)
00426       in_tree[index_parent].left = index_left;
00427    else
00428       in_tree[index_parent].right = index_left;
00429 
00430    int ptr = index_left;
00431    while (in_tree[ptr].right != UNDEFINED)
00432       ptr = in_tree[ptr].right;
00433 
00434    in_tree[ptr].right = index_right;
00435    in_tree[index_right].parent = ptr;
00436 }

void BTree::rotate int  index,
int  newOrient
[inline]
 

Definition at line 267 of file btree.h.

References contour_evaluate(), and in_tree.

Referenced by BTreeAreaWireAnnealer::packOneBlock(), and BTreeAreaWireAnnealer::perform_rotate().

00269 {
00270    in_tree[index].orient = newOrient;
00271    contour_evaluate();
00272 }

Here is the call graph for this function:

void BTree::save_bbb const string &  filename  )  const
 

Definition at line 534 of file btree.cxx.

References in_height, in_totalHeight, in_totalWidth, in_width, in_xloc, in_yloc, and NUM_BLOCKS.

Referenced by DebugBTreeAnnealerFromDB().

00535 {
00536    ofstream outfile;
00537    outfile.open(filename.c_str());
00538    if (!outfile.good())
00539    {
00540       cout << "ERROR: cannot open file" << filename << endl;
00541       exit(1);
00542    }
00543 
00544    outfile.setf(ios::fixed);
00545    outfile.precision(3);
00546 
00547    outfile << in_totalWidth << endl;
00548    outfile << in_totalHeight << endl;
00549    outfile << NUM_BLOCKS << endl;
00550    for (int i = 0; i < NUM_BLOCKS; i++)
00551       outfile << in_width[i] << " " << in_height[i] << endl;
00552    outfile << endl;
00553 
00554    for (int i = 0; i < NUM_BLOCKS; i++)
00555       outfile << in_xloc[i] << " " << in_yloc[i] << endl;
00556    outfile << endl;
00557 }

void BTree::setTree const vector< BTreeNode > &  ntree  )  [inline]
 

Definition at line 229 of file btree.h.

References in_tree.

Referenced by BTreeAreaWireAnnealer::perform_move(), and BTreeAreaWireAnnealer::perform_rotate().

00230 {   in_tree = ntree; }

void BTree::swap int  indexOne,
int  indexTwo
 

Definition at line 242 of file btree.cxx.

References contour_evaluate(), in_tree, swap_parent_child(), and UNDEFINED.

Referenced by BTreeAreaWireAnnealer::perform_swap().

00244 {
00245    int indexOne_left = in_tree[indexOne].left;
00246    int indexOne_right = in_tree[indexOne].right;
00247    int indexOne_parent = in_tree[indexOne].parent;
00248 
00249    int indexTwo_left = in_tree[indexTwo].left;
00250    int indexTwo_right = in_tree[indexTwo].right;
00251    int indexTwo_parent = in_tree[indexTwo].parent;
00252 
00253    if (indexOne == indexTwo_parent)
00254       swap_parent_child(indexOne, (indexTwo == in_tree[indexOne].left));
00255    else if (indexTwo == indexOne_parent)
00256       swap_parent_child(indexTwo, (indexOne == in_tree[indexTwo].left));
00257    else
00258    {
00259       // update around indexOne
00260       in_tree[indexOne].parent = indexTwo_parent;
00261       in_tree[indexOne].left = indexTwo_left;
00262       in_tree[indexOne].right = indexTwo_right;
00263 
00264       if (indexOne == in_tree[indexOne_parent].left)
00265          in_tree[indexOne_parent].left = indexTwo;
00266       else
00267          in_tree[indexOne_parent].right = indexTwo;
00268 
00269       if (indexOne_left != UNDEFINED)
00270          in_tree[indexOne_left].parent = indexTwo;
00271       
00272       if (indexOne_right != UNDEFINED)
00273          in_tree[indexOne_right].parent = indexTwo;
00274       
00275       // update around indexTwo
00276       in_tree[indexTwo].parent = indexOne_parent;
00277       in_tree[indexTwo].left = indexOne_left;
00278       in_tree[indexTwo].right = indexOne_right;
00279       
00280       if (indexTwo == in_tree[indexTwo_parent].left)
00281          in_tree[indexTwo_parent].left = indexOne;
00282       else
00283          in_tree[indexTwo_parent].right = indexOne;
00284       
00285       if (indexTwo_left != UNDEFINED)
00286          in_tree[indexTwo_left].parent = indexOne;
00287       
00288       if (indexTwo_right != UNDEFINED)
00289          in_tree[indexTwo_right].parent = indexOne;
00290    }
00291    contour_evaluate();   
00292 }

Here is the call graph for this function:

void BTree::swap_parent_child int  parent,
bool  isLeft
[protected]
 

Definition at line 294 of file btree.cxx.

References in_tree, and UNDEFINED.

Referenced by swap().

00296 {
00297    int parent_parent = in_tree[parent].parent;
00298    int parent_left = in_tree[parent].left;
00299    int parent_right = in_tree[parent].right;
00300 
00301    int child = (isLeft)? in_tree[parent].left : in_tree[parent].right;
00302    int child_left = in_tree[child].left;
00303    int child_right = in_tree[child].right;
00304 
00305    if (isLeft)
00306    {
00307       in_tree[parent].parent = child;
00308       in_tree[parent].left = child_left;
00309       in_tree[parent].right = child_right;
00310 
00311       if (parent == in_tree[parent_parent].left)
00312          in_tree[parent_parent].left = child;
00313       else
00314          in_tree[parent_parent].right = child;
00315 
00316       if (parent_right != UNDEFINED)
00317          in_tree[parent_right].parent = child;
00318 
00319       in_tree[child].parent = parent_parent;
00320       in_tree[child].left = parent;
00321       in_tree[child].right = parent_right;
00322 
00323       if (child_left != UNDEFINED)
00324          in_tree[child_left].parent = parent;
00325 
00326       if (child_right != UNDEFINED)
00327          in_tree[child_right].parent = parent;
00328    }
00329    else
00330    {
00331       in_tree[parent].parent = child;
00332       in_tree[parent].left = child_left;
00333       in_tree[parent].right = child_right;
00334 
00335       if (parent == in_tree[parent_parent].left)
00336          in_tree[parent_parent].left = child;
00337       else
00338          in_tree[parent_parent].right = child;
00339 
00340       if (parent_left != UNDEFINED)
00341          in_tree[parent_left].parent = child;
00342 
00343       in_tree[child].parent = parent_parent;
00344       in_tree[child].left = parent_left;
00345       in_tree[child].right = parent;
00346 
00347       if (child_left != UNDEFINED)
00348          in_tree[child_left].parent = parent;
00349 
00350       if (child_right != UNDEFINED)
00351          in_tree[child_right].parent = parent;
00352    }
00353 }

double BTree::totalArea  )  const [inline]
 

Definition at line 220 of file btree.h.

References in_totalArea.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeCompactSlice(), BTreeAreaWireAnnealer::compactSoln(), BTreeAreaWireAnnealer::go(), OutputBTree(), and BTreeAreaWireAnnealer::packSoftBlocks().

00221 {  return in_totalArea; }

double BTree::totalHeight  )  const [inline]
 

Definition at line 226 of file btree.h.

References in_totalHeight.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeCompactSlice(), BTreeAreaWireAnnealer::DBfromSoln(), DebugBTreeAnnealerFromDB(), BTreeSlackEval::evaluateYSlacks(), BTreeAreaWireAnnealer::locateSearchBlocks(), BTreeAreaWireAnnealer::makeARMove(), BTreeAreaWireAnnealer::makeARWLMove(), and OutputBTree().

00227 {  return in_totalHeight; }

double BTree::totalWidth  )  const [inline]
 

Definition at line 223 of file btree.h.

References in_totalWidth.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeCompactSlice(), BTreeAreaWireAnnealer::DBfromSoln(), DebugBTreeAnnealerFromDB(), BTreeSlackEval::evaluateXSlacks(), BTreeAreaWireAnnealer::locateSearchBlocks(), BTreeAreaWireAnnealer::makeARMove(), BTreeAreaWireAnnealer::makeARWLMove(), and OutputBTree().

00224 {  return in_totalWidth; }

double BTree::width int  index  )  const [inline]
 

Definition at line 211 of file btree.h.

References in_width.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeOrientedPacking::BTreeOrientedPacking(), BTreeAreaWireAnnealer::DBfromSoln(), BTreeSlackEval::evaluateXSlacks(), BTreeAreaWireAnnealer::getSoftBlIndex(), BTreeAreaWireAnnealer::getSoftBlNewDimensions(), BTreeOrientedPacking::operator=(), OutputBTree(), BTreeAreaWireAnnealer::packOneBlock(), and BTreeAreaWireAnnealer::packSoftBlocks().

00212 {  return in_width[index]; }

double BTree::xloc int  index  )  const [inline]
 

Definition at line 205 of file btree.h.

References in_xloc.

00206 {  return in_xloc[index]; }

const vector< double > & BTree::xloc  )  const [inline]
 

Definition at line 199 of file btree.h.

References in_xloc.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeOrientedPacking::BTreeOrientedPacking(), BTreeAreaWireAnnealer::DBfromSoln(), BTreeSlackEval::evaluateXSlacks(), BTreeAreaWireAnnealer::locateSearchBlocks(), BTreeOrientedPacking::operator=(), and OutputBTree().

00200 {  return in_xloc; }

double BTree::yloc int  index  )  const [inline]
 

Definition at line 208 of file btree.h.

References in_yloc.

00209 {  return in_yloc[index]; }

const vector< double > & BTree::yloc  )  const [inline]
 

Definition at line 202 of file btree.h.

References in_yloc.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeOrientedPacking::BTreeOrientedPacking(), BTreeAreaWireAnnealer::DBfromSoln(), BTreeSlackEval::evaluateXSlacks(), BTreeSlackEval::evaluateYSlacks(), BTreeAreaWireAnnealer::locateSearchBlocks(), BTreeOrientedPacking::operator=(), and OutputBTree().

00203 {  return in_yloc; }


Member Data Documentation

const vector<ContourNode>& BTree::contour
 

Definition at line 56 of file btree.h.

Referenced by OutputBTree().

double BTree::in_blockArea [protected]
 

Definition at line 128 of file btree.h.

Referenced by blockArea(), operator=(), and BTreeCompactor::slimAssign().

const HardBlockInfoType& BTree::in_blockinfo [protected]
 

Definition at line 118 of file btree.h.

Referenced by BTreeCompactor::build_orth_tree_add_block(), and contour_add_block().

vector<ContourNode> BTree::in_contour [protected]
 

Definition at line 120 of file btree.h.

Referenced by BTree(), BTreeCompactor::build_orth_tree(), BTreeCompactor::build_orth_tree_add_block(), contour_add_block(), contour_evaluate(), and operator=().

vector<double> BTree::in_height [protected]
 

Definition at line 126 of file btree.h.

Referenced by BTree(), BTreeCompactor::build_orth_tree_add_block(), contour_add_block(), height(), operator=(), and save_bbb().

double BTree::in_totalArea [protected]
 

Definition at line 129 of file btree.h.

Referenced by BTreeCompactor::build_orth_tree(), contour_evaluate(), operator=(), and totalArea().

double BTree::in_totalHeight [protected]
 

Definition at line 131 of file btree.h.

Referenced by BTreeCompactor::build_orth_tree(), contour_evaluate(), operator=(), save_bbb(), and totalHeight().

double BTree::in_totalWidth [protected]
 

Definition at line 130 of file btree.h.

Referenced by BTreeCompactor::build_orth_tree(), contour_evaluate(), operator=(), save_bbb(), and totalWidth().

vector<BTreeNode> BTree::in_tree [protected]
 

Definition at line 119 of file btree.h.

Referenced by BTree(), BTreeFromSoftPacking::BTreeFromSoftPacking(), BTreeCompactor::build_orth_tree(), BTreeCompactor::build_orth_tree_add_block(), BTreeCompactor::compact(), contour_add_block(), contour_evaluate(), evaluate(), BTreeFromSoftPacking::EvaluateTree(), move(), operator=(), remove_left_up_right_down(), rotate(), setTree(), BTreeCompactor::slimAssign(), swap(), and swap_parent_child().

vector<double> BTree::in_width [protected]
 

Definition at line 125 of file btree.h.

Referenced by BTree(), BTreeCompactor::build_orth_tree_add_block(), contour_add_block(), operator=(), save_bbb(), and width().

vector<double> BTree::in_xloc [protected]
 

Definition at line 123 of file btree.h.

Referenced by BTree(), BTreeCompactor::build_orth_tree_add_block(), BTreeCompactor::compact(), contour_add_block(), operator=(), save_bbb(), and xloc().

vector<double> BTree::in_yloc [protected]
 

Definition at line 124 of file btree.h.

Referenced by BTree(), BTreeCompactor::build_orth_tree_add_block(), BTreeCompactor::compact(), contour_add_block(), operator=(), save_bbb(), and yloc().

const int BTree::NUM_BLOCKS
 

Definition at line 89 of file btree.h.

Referenced by BTreeAreaWireAnnealer::anneal(), BTree(), BTreeOrientedPacking::BTreeOrientedPacking(), BTreeCompactor::build_orth_tree(), BTreeCompactor::build_orth_tree_add_block(), BTreeCompactor::compact(), BTreeAreaWireAnnealer::constructor_core(), contour_evaluate(), BTreeAreaWireAnnealer::DBfromSoln(), evaluate(), BTreeSlackEval::evaluateXSlacks(), BTreeSlackEval::evaluateYSlacks(), BTreeCompactor::fix_orth_tree(), BTreeAreaWireAnnealer::getSoftBlIndex(), BTreeAreaWireAnnealer::go(), BTreeAreaWireAnnealer::locateSearchBlocks(), BTreeAreaWireAnnealer::makeARWLMove(), BTreeAreaWireAnnealer::makeHPWLMove(), BTreeAreaWireAnnealer::makeMoveSlacksCore(), BTreeOrientedPacking::operator=(), operator=(), OutputBTree(), BTreeAreaWireAnnealer::packSoftBlocks(), and save_bbb().

const double BTree::TOLERANCE [protected]
 

Definition at line 133 of file btree.h.

Referenced by BTreeCompactor::build_orth_tree_add_block(), and contour_add_block().

const vector<BTreeNode>& BTree::tree
 

Definition at line 55 of file btree.h.

Referenced by BTreeAreaWireAnnealer::anneal(), BTreeOrientedPacking::BTreeOrientedPacking(), BTreeAreaWireAnnealer::DBfromSoln(), BTreeSlackEval::evaluateYSlacks(), BTreeAreaWireAnnealer::getSoftBlIndex(), BTreeAreaWireAnnealer::getSoftBlNewDimensions(), BTreeCompactor::operator=(), BTreeOrientedPacking::operator=(), OutputBTree(), BTreeAreaWireAnnealer::packSoftBlocks(), BTreeAreaWireAnnealer::perform_move(), BTreeAreaWireAnnealer::perform_rotate(), and BTreeCompactor::slimAssign().

const int BTree::UNDEFINED = Dimension::UNDEFINED [static]
 

Definition at line 49 of file btree.cxx.

Referenced by bits2tree(), BTree(), BTreeCompactor::BTreeCompactor(), BTreeCompactor::build_orth_tree(), BTreeCompactor::build_orth_tree_add_block(), clean_contour(), clean_tree(), contour_add_block(), contour_evaluate(), BTreeFromSoftPacking::EvaluateTree(), move(), BTreeCompactor::operator=(), OutputBTree(), remove_left_up_right_down(), BTreeSlackEval::reverse_tree(), BTreeCompactor::slimAssign(), swap(), and swap_parent_child().


The documentation for this class was generated from the following files:
Generated on Mon Apr 25 01:13:04 2005 for Parquete by doxygen 1.3.2