#include <basepacking.h>
Inheritance diagram for HardBlockInfoType:


Public Member Functions | |
| HardBlockInfoType (ifstream &ins, const string &format) | |
| const basepacking_h::Dimension & | operator[] (int index) const |
| int | blocknum () const |
| double | blockArea () const |
Public Attributes | |
| const vector< basepacking_h::Dimension > & | blocks |
| const vector< string > & | block_names |
Static Public Attributes | |
| const int | ORIENT_NUM = Dimension::ORIENT_NUM |
Protected Member Functions | |
| void | set_dimensions (int i, double w, double h) |
| void | ParseTxt (ifstream &ins) |
| void | ParseBlocks (ifstream &ins) |
| HardBlockInfoType (int blocknum) | |
| HardBlockInfoType (const HardBlockInfoType &) | |
Protected Attributes | |
| vector< basepacking_h::Dimension > | in_blocks |
| vector< string > | in_block_names |
Friends | |
| class | MixedBlockInfoType |
| class | MixedBlockInfoTypeFromDB |
|
||||||||||||
|
Definition at line 75 of file basepacking.cxx. References ParseBlocks(), and ParseTxt().
00077 : blocks(in_blocks), 00078 block_names(in_block_names) 00079 { 00080 if (format == "txt") 00081 ParseTxt(ins); 00082 else if (format == "blocks") 00083 ParseBlocks(ins); 00084 else 00085 { 00086 cout << "ERROR: invalid format: " << format << endl; 00087 exit(1); 00088 } 00089 } |
Here is the call graph for this function:

|
|
Definition at line 110 of file basepacking.h. References block_names, blocks, in_block_names, and in_blocks.
00111 : blocks(in_blocks), 00112 block_names(in_block_names), 00113 in_blocks(blocknum+2), 00114 in_block_names(blocknum+2) {} |
|
|
|
|
|
Definition at line 293 of file basepacking.h. References blocknum(), and in_blocks.
|
Here is the call graph for this function:

|
|
Definition at line 290 of file basepacking.h. References in_blocks. Referenced by blockArea(), BTreeAreaWireAnnealer::constructor_core(), NetListType::get_index(), getTolerance(), OutputHardBlockInfoType(), NetListType::ParsePl(), ParseTxt(), BTreeAreaWireAnnealer::perform_move(), BTreeAreaWireAnnealer::perform_rotate(), BTreeAreaWireAnnealer::perform_swap(), and SoftPackingHardBlockInfoType::SoftPackingHardBlockInfoType().
00291 { return (in_blocks.size()-2); }
|
|
|
Definition at line 287 of file basepacking.h. References in_blocks.
00288 { return in_blocks[index]; }
|
|
|
Definition at line 131 of file basepacking.cxx. References block_names, eatblank(), eathash(), in_block_names, in_blocks, parquetfp::needCaseChar(), set_dimensions(), and skiptoeol(). Referenced by HardBlockInfoType().
00132 {
00133 char block_name[100];
00134 char block_type[100];
00135 char tempWord[100];
00136
00137 int numSoftBl=0;
00138 int numHardBl=0;
00139 int numTerm=0;
00140
00141 int indexBlock=0;
00142
00143 if(!ins)
00144 {
00145 cout << "ERROR: .blocks file could not be opened successfully"
00146 << endl;
00147 exit(1);
00148 }
00149
00150 skiptoeol(ins);
00151 while(!ins.eof())
00152 {
00153 ins >> tempWord;
00154 if(!(strcmp(tempWord,"NumSoftRectangularBlocks")))
00155 break;
00156 }
00157
00158 if (!ins.good())
00159 {
00160 cout << "ERROR in parsing .blocks file." << endl;
00161 exit(1);
00162 }
00163
00164 ins >> tempWord;
00165 ins >> numSoftBl;
00166 if (numSoftBl != 0)
00167 {
00168 cout << "ERROR: soft block packing is not supported for now." << endl;
00169 exit(0);
00170 }
00171
00172 while(!ins.eof())
00173 {
00174 ins >> tempWord;
00175 if (!(strcmp(tempWord, "NumHardRectilinearBlocks")))
00176 break;
00177 }
00178 ins >> tempWord;
00179 ins >> numHardBl;
00180
00181 while(!ins.eof())
00182 {
00183 ins >> tempWord;
00184 if (!(strcmp(tempWord, "NumTerminals")))
00185 break;
00186 }
00187 ins >> tempWord;
00188 ins >> numTerm;
00189
00190 in_blocks.resize(numHardBl+2);
00191 in_block_names.resize(numHardBl+2);
00192 while(ins.good())
00193 {
00194 block_type[0] = '\0';
00195 eatblank(ins);
00196
00197 if (ins.eof())
00198 break;
00199 if (ins.peek() == '#')
00200 eathash(ins);
00201 else
00202 {
00203 eatblank(ins);
00204 if (ins.peek() == '\n' || ins.peek() == '\r')
00205 {
00206 ins.get();
00207 continue;
00208 }
00209
00210 ins >> block_name;
00211 ins >> block_type;
00212
00213 if (!strcmp(block_type, "softrectangular"))
00214 {
00215 cout << "ERROR: soft block packing is not supported now." << endl;
00216 exit(1);
00217 }
00218 else if (!strcmp(block_type,"hardrectilinear"))
00219 {
00220 Point tempPoint;
00221 vector<Point> vertices;
00222 int numVertices;
00223 bool success;
00224 double width, height;
00225
00226 ins >> numVertices;
00227 success = true;
00228 if (numVertices != 4)
00229 {
00230 cout << "ERROR in parsing .blocks file. "
00231 << "rectilinear blocks can be only rectangles for now"
00232 << endl;
00233 exit(1);
00234 }
00235
00236 for (int i=0; i < numVertices; ++i)
00237 {
00238 success &= needCaseChar(ins, '('); ins.get();
00239 ins >> tempPoint.x;
00240 success &= needCaseChar(ins, ','); ins.get();
00241 ins >> tempPoint.y;
00242 success &= needCaseChar(ins, ')'); ins.get();
00243 vertices.push_back(tempPoint);
00244 }
00245 if (!success)
00246 {
00247 cout << "ERROR in parsing .blocks file while processing "
00248 << "hardrectilinear blocks." << endl;
00249 exit(1);
00250 }
00251
00252 width = vertices[2].x - vertices[0].x;
00253 height = vertices[2].y - vertices[0].y;
00254
00255 // consider a block
00256 // cout << "[" << indexBlock << "] "
00257 // << setw(10) << block_name
00258 // << " width: " << width
00259 // << " height: " << height << endl;
00260 set_dimensions(indexBlock, width, height);
00261 if (indexBlock >= int(block_names.size()))
00262 {
00263 cout << "ERROR: too many hard block specified." << endl;
00264 exit(1);
00265 }
00266 in_block_names[indexBlock] = block_name;
00267 ++indexBlock;
00268 }
00269 else if (!strcmp(block_type,"terminal"))
00270 { /* a pad */ }
00271 else if (ins.good())
00272 {
00273 cout << "ERROR: invalid block type: " << block_type << endl;
00274 exit(1);
00275 }
00276 }
00277 } // end of while-loop
00278 ins.close();
00279
00280 if (numSoftBl+numHardBl != indexBlock)
00281 {
00282 cout << "ERROR in parsing .blocks file. # blocks do not tally "
00283 << (indexBlock) << " vs. "
00284 << (numSoftBl+numHardBl) << endl;
00285 exit(1);
00286 }
00287 set_dimensions(numHardBl, 0, Dimension::INFTY);
00288 in_block_names[numHardBl] = "LEFT";
00289
00290 set_dimensions(numHardBl+1, Dimension::INFTY, 0);
00291 in_block_names[numHardBl+1] = "BOTTOM";
00292 }
|
Here is the call graph for this function:

|
|
Definition at line 91 of file basepacking.cxx. References blocknum(), in_block_names, in_blocks, and set_dimensions(). Referenced by HardBlockInfoType().
00092 {
00093 int blocknum = -1;
00094 ins >> blocknum;
00095
00096 if (!ins.good())
00097 {
00098 cout << "ERROR: cannot read the block count." << endl;
00099 exit(1);
00100 }
00101
00102 in_blocks.resize(blocknum+2);
00103 in_block_names.resize(blocknum+2);
00104 for (int i = 0; i < blocknum; i++)
00105 {
00106 double w, h;
00107 ins >> w >> h;
00108
00109 if (!ins.good())
00110 {
00111 cout << "ERROR: cannot read block no." << i << endl;
00112 exit(1);
00113 }
00114
00115 set_dimensions(i, w, h);
00116
00117 char temp[100];
00118 temp[0] = '\0';
00119 sprintf(temp, "%d", i);
00120 in_block_names[i] = temp;
00121 }
00122 set_dimensions(blocknum, 0, Dimension::INFTY);
00123 in_block_names[blocknum] = "LEFT";
00124
00125 set_dimensions(blocknum+1, Dimension::INFTY, 0);
00126 in_block_names[blocknum+1] = "BOTTOM";
00127 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Definition at line 56 of file basepacking.cxx. References in_blocks, and ORIENT_NUM. Referenced by MixedBlockInfoTypeFromDB::MixedBlockInfoTypeFromDB(), MixedBlockInfoType::ParseBlocks(), ParseBlocks(), ParseTxt(), MixedBlockInfoType::setBlockDimensions(), and SoftPackingHardBlockInfoType::SoftPackingHardBlockInfoType().
00059 {
00060 in_blocks[i].width.resize(ORIENT_NUM);
00061 in_blocks[i].height.resize(ORIENT_NUM);
00062 for (int j = 0; j < ORIENT_NUM; j++)
00063 if (j % 2 == 0)
00064 {
00065 in_blocks[i].width[j] = w;
00066 in_blocks[i].height[j] = h;
00067 }
00068 else
00069 {
00070 in_blocks[i].width[j] = h;
00071 in_blocks[i].height[j] = w;
00072 }
00073 }
|
|
|
Definition at line 99 of file basepacking.h. |
|
|
Definition at line 100 of file basepacking.h. |
|
|
Definition at line 92 of file basepacking.h. Referenced by NetListType::get_index(), HardBlockInfoType(), OutputMixedBlockInfoType(), MixedBlockInfoType::ParseBlocks(), and ParseBlocks(). |
|
|
Definition at line 91 of file basepacking.h. Referenced by HardBlockInfoType(). |
|
|
Definition at line 104 of file basepacking.h. Referenced by HardBlockInfoType(), MixedBlockInfoTypeFromDB::MixedBlockInfoTypeFromDB(), MixedBlockInfoType::ParseBlocks(), ParseBlocks(), ParseTxt(), and SoftPackingHardBlockInfoType::SoftPackingHardBlockInfoType(). |
|
|
Definition at line 103 of file basepacking.h. Referenced by blockArea(), blocknum(), HardBlockInfoType(), operator[](), MixedBlockInfoType::ParseBlocks(), ParseBlocks(), ParseTxt(), set_dimensions(), and SoftPackingHardBlockInfoType::SoftPackingHardBlockInfoType(). |
|
|
Definition at line 54 of file basepacking.cxx. Referenced by OutputHardBlockInfoType(), and set_dimensions(). |
1.3.2