Skip to content

Commit fd6cdea

Browse files
authored
Merge pull request #7416 from The-OpenROAD-Project-staging/dpl-swig
dpl: cleanup the swig handing of dbMasterSeq
2 parents b010789 + 7502da8 commit fd6cdea

4 files changed

Lines changed: 12 additions & 51 deletions

File tree

src/dpl/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ swig_lib(NAME dpl
99
NAMESPACE dpl
1010
I_FILE src/Opendp.i
1111
SCRIPTS src/Opendp.tcl
12+
SWIG_INCLUDES ${ODB_HOME}/src/swig/common
13+
${ODB_HOME}/src/swig/tcl
14+
${ODB_HOME}/include
1215
)
1316

1417
add_library(dpl_lib

src/dpl/include/dpl/Opendp.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class Opendp
115115
int padRight(dbInst* inst) const;
116116

117117
void checkPlacement(bool verbose, const std::string& report_file_name = "");
118-
void fillerPlacement(dbMasterSeq* filler_masters,
118+
void fillerPlacement(const dbMasterSeq& filler_masters,
119119
const char* prefix,
120120
bool verbose);
121121
void removeFillers();
@@ -277,7 +277,7 @@ class Opendp
277277
DbuPt initialLocation(const Node* cell, bool padded) const;
278278
int disp(const Node* cell) const;
279279
// Place fillers
280-
MasterByImplant splitByImplant(dbMasterSeq* filler_masters);
280+
MasterByImplant splitByImplant(const dbMasterSeq& filler_masters);
281281
void setGridCells();
282282
dbMasterSeq& gapFillers(dbTechLayer* implant,
283283
GridX gap,

src/dpl/src/FillerPlacement.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,18 @@ static dbTechLayer* getImplant(dbMaster* master)
3737
return nullptr;
3838
}
3939

40-
Opendp::MasterByImplant Opendp::splitByImplant(dbMasterSeq* filler_masters)
40+
Opendp::MasterByImplant Opendp::splitByImplant(
41+
const dbMasterSeq& filler_masters)
4142
{
4243
MasterByImplant mapping;
43-
for (auto master : *filler_masters) {
44+
for (auto master : filler_masters) {
4445
mapping[getImplant(master)].emplace_back(master);
4546
}
4647

4748
return mapping;
4849
}
4950

50-
void Opendp::fillerPlacement(dbMasterSeq* filler_masters,
51+
void Opendp::fillerPlacement(const dbMasterSeq& filler_masters,
5152
const char* prefix,
5253
bool verbose)
5354
{

src/dpl/src/Opendp.i

Lines changed: 3 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,55 +10,12 @@
1010
#include "dpl/Opendp.h"
1111
#include "utl/Logger.h"
1212

13-
14-
15-
namespace dpl {
16-
17-
using std::vector;
18-
19-
// Swig vector type in does not seem to work at all.
20-
// (see odb/src/swig/common/polgon.i)
21-
// Copied from opensta/tcl/StaTcl.i
22-
template <class TYPE>
23-
vector<TYPE> *
24-
tclListSeq(Tcl_Obj *const source,
25-
swig_type_info *swig_type,
26-
Tcl_Interp *interp)
27-
{
28-
int argc;
29-
Tcl_Obj **argv;
30-
31-
if (Tcl_ListObjGetElements(interp, source, &argc, &argv) == TCL_OK
32-
&& argc > 0) {
33-
vector<TYPE> *seq = new vector<TYPE>;
34-
for (int i = 0; i < argc; i++) {
35-
void *obj;
36-
// Ignore returned TCL_ERROR because can't get swig_type_info.
37-
SWIG_ConvertPtr(argv[i], &obj, swig_type, false);
38-
seq->push_back(reinterpret_cast<TYPE>(obj));
39-
}
40-
return seq;
41-
}
42-
else
43-
return nullptr;
44-
}
45-
46-
dpl::dbMasterSeq *
47-
tclListSeqdbMaster(Tcl_Obj *const source,
48-
Tcl_Interp *interp)
49-
{
50-
return tclListSeq<odb::dbMaster*>(source, SWIGTYPE_p_odb__dbMaster, interp);
51-
}
52-
53-
}
54-
5513
%}
5614

5715
%include "../../Exception.i"
5816

59-
%typemap(in) dpl::dbMasterSeq * {
60-
$1 = dpl::tclListSeqdbMaster($input, interp);
61-
}
17+
%import <std_vector.i>
18+
%import "dbtypes.i"
6219

6320
%inline %{
6421

@@ -114,7 +71,7 @@ set_padding_inst(odb::dbInst *inst,
11471
}
11572

11673
void
117-
filler_placement_cmd(dpl::dbMasterSeq *filler_masters,
74+
filler_placement_cmd(const std::vector<odb::dbMaster*>& filler_masters,
11875
const char* prefix,
11976
bool verbose)
12077
{

0 commit comments

Comments
 (0)