Limbo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
LefDataBase.h
Go to the documentation of this file.
1 
8 #ifndef LEFPARSER_DATABASE_H
9 #define LEFPARSER_DATABASE_H
10 
11 #include <string>
12 #include <vector>
13 #include <iostream>
14 #include <fstream>
15 #include <sstream>
16 #include <cassert>
17 #include <limbo/thirdparty/lefdef/5.8/lef/lef/lefrReader.hpp>
18 #include <limbo/thirdparty/lefdef/5.8/lef/lef/lefwWriter.hpp>
19 #include <limbo/thirdparty/lefdef/5.8/lef/lef/lefiDebug.hpp>
20 #include <limbo/thirdparty/lefdef/5.8/lef/lef/lefiEncryptInt.hpp>
21 #include <limbo/thirdparty/lefdef/5.8/lef/lef/lefiUtil.hpp>
22 
24 namespace LefParser {
25 
27 using std::cout;
28 using std::endl;
29 using std::cerr;
30 using std::string;
31 using std::vector;
32 using std::pair;
33 using std::make_pair;
34 using std::ostringstream;
36 
38 typedef LefDefParser::lefiArrayFloorPlan lefiArrayFloorPlan;
39 typedef LefDefParser::lefiArray lefiArray;
40 typedef LefDefParser::lefiNoiseVictim lefiNoiseVictim;
41 typedef LefDefParser::lefiNoiseResistance lefiNoiseResistance;
42 typedef LefDefParser::lefiNoiseEdge lefiNoiseEdge;
43 typedef LefDefParser::lefiNoiseTable lefiNoiseTable;
44 typedef LefDefParser::lefiCorrectionVictim lefiCorrectionVictim;
45 typedef LefDefParser::lefiCorrectionResistance lefiCorrectionResistance;
46 typedef LefDefParser::lefiCorrectionEdge lefiCorrectionEdge;
47 typedef LefDefParser::lefiCorrectionTable lefiCorrectionTable;
48 typedef LefDefParser::lefiAntennaPWL lefiAntennaPWL;
49 typedef LefDefParser::lefiLayerDensity lefiLayerDensity;
50 typedef LefDefParser::lefiParallel lefiParallel;
51 typedef LefDefParser::lefiInfluence lefiInfluence;
52 typedef LefDefParser::lefiTwoWidths lefiTwoWidths;
53 typedef LefDefParser::lefiSpacingTable lefiSpacingTable;
54 typedef LefDefParser::lefiOrthogonal lefiOrthogonal;
55 typedef LefDefParser::lefiAntennaModel lefiAntennaModel;
56 typedef LefDefParser::lefiLayer lefiLayer;
57 typedef LefDefParser::lefiObstruction lefiObstruction;
58 typedef LefDefParser::lefiPinAntennaModel lefiPinAntennaModel;
59 typedef LefDefParser::lefiPin lefiPin;
60 typedef LefDefParser::lefiDensity lefiDensity;
61 typedef LefDefParser::lefiMacro lefiMacro;
62 typedef LefDefParser::lefiTiming lefiTiming;
63 typedef LefDefParser::lefiGeometries lefiGeometries;
64 typedef LefDefParser::lefiSpacing lefiSpacing;
65 typedef LefDefParser::lefiIRDrop lefiIRDrop;
66 typedef LefDefParser::lefiMinFeature lefiMinFeature;
67 typedef LefDefParser::lefiSite lefiSite;
68 typedef LefDefParser::lefiSitePattern lefiSitePattern;
69 typedef LefDefParser::lefiTrackPattern lefiTrackPattern;
70 typedef LefDefParser::lefiGcellPattern lefiGcellPattern;
71 typedef LefDefParser::lefiUseMinSpacing lefiUseMinSpacing;
72 typedef LefDefParser::lefiMaxStackVia lefiMaxStackVia;
73 typedef LefDefParser::lefiNonDefault lefiNonDefault;
74 typedef LefDefParser::lefiProp lefiProp;
75 typedef LefDefParser::lefiPropType lefiPropType;
76 typedef LefDefParser::lefiUnits lefiUnits;
77 typedef LefDefParser::lefiViaLayer lefiViaLayer;
78 typedef LefDefParser::lefiVia lefiVia;
79 typedef LefDefParser::lefiViaRuleLayer lefiViaRuleLayer;
80 typedef LefDefParser::lefiViaRule lefiViaRule;
81 
82 typedef LefDefParser::lefiNoiseMargin lefiNoiseMargin;
83 typedef LefDefParser::lefiGeomRect lefiGeomRect;
84 typedef LefDefParser::lefiGeomRectIter lefiGeomRectIter;
85 typedef LefDefParser::lefiGeomPath lefiGeomPath;
86 typedef LefDefParser::lefiGeomPathIter lefiGeomPathIter;
87 typedef LefDefParser::lefiGeomPolygon lefiGeomPolygon;
88 typedef LefDefParser::lefiGeomPolygonIter lefiGeomPolygonIter;
89 typedef LefDefParser::lefiGeomVia lefiGeomVia;
90 typedef LefDefParser::lefiGeomViaIter lefiGeomViaIter;
91 typedef LefDefParser::lefiPoints lefiPoints;
92 
93 enum lefiGeomEnum {
94  lefiGeomUnknown = LefDefParser::lefiGeomUnknown,
95  lefiGeomLayerE = LefDefParser::lefiGeomLayerE,
96  lefiGeomLayerExceptPgNetE = LefDefParser::lefiGeomLayerExceptPgNetE,
97  lefiGeomLayerMinSpacingE = LefDefParser::lefiGeomLayerMinSpacingE,
98  lefiGeomLayerRuleWidthE = LefDefParser::lefiGeomLayerRuleWidthE,
99  lefiGeomWidthE = LefDefParser::lefiGeomWidthE,
100  lefiGeomPathE = LefDefParser::lefiGeomPathE,
101  lefiGeomPathIterE = LefDefParser::lefiGeomPathIterE,
102  lefiGeomRectE = LefDefParser::lefiGeomRectE,
103  lefiGeomRectIterE = LefDefParser::lefiGeomRectIterE,
104  lefiGeomPolygonE = LefDefParser::lefiGeomPolygonE,
105  lefiGeomPolygonIterE = LefDefParser::lefiGeomPolygonIterE,
106  lefiGeomViaE = LefDefParser::lefiGeomViaE,
107  lefiGeomViaIterE = LefDefParser::lefiGeomViaIterE,
108  lefiGeomClassE = LefDefParser::lefiGeomClassE,
109  lefiGeomEnd = LefDefParser::lefiGeomEnd
110 };
112 
113 // forward declaration
124 {
125  public:
127  LefDataBase();
129  double current_version() const;
132  void current_version(double cv);
133 
134  // Although it is true that I can use pure virtual functions for all callbacks,
135  // run-time information is better than compile-time errors.
136  // Because most LEF files are so simple that we only need several callbacks.
137  // Then user does not need to provide some callbacks.
138 
141  virtual void lef_version_cbk(string const& v);
144  virtual void lef_version_cbk(double v);
147  virtual void lef_dividerchar_cbk(string const& v);
150  virtual void lef_casesensitive_cbk(int v);
153  virtual void lef_nowireextension_cbk(string const& v);
156  virtual void lef_manufacturing_cbk(double v);
159  virtual void lef_useminspacing_cbk(lefiUseMinSpacing const& v);
162  virtual void lef_clearancemeasure_cbk(string const& v);
165  virtual void lef_units_cbk(lefiUnits const& v);
168  virtual void lef_busbitchars_cbk(string const& v);
171  virtual void lef_layer_cbk(lefiLayer const& v);
174  virtual void lef_maxstackvia_cbk(lefiMaxStackVia const& v);
177  virtual void lef_via_cbk(lefiVia const& v);
180  virtual void lef_viarule_cbk(lefiViaRule const& v);
183  virtual void lef_spacing_cbk(lefiSpacing const& v);
186  virtual void lef_irdrop_cbk(lefiIRDrop const& v);
189  virtual void lef_minfeature_cbk(lefiMinFeature const& v);
192  virtual void lef_dielectric_cbk(double v);
195  virtual void lef_nondefault_cbk(lefiNonDefault const& v);
198  virtual void lef_site_cbk(lefiSite const& v);
201  virtual void lef_macrobegin_cbk(std::string const& v);
204  virtual void lef_macro_cbk(lefiMacro const& v);
207  virtual void lef_pin_cbk(lefiPin const& v);
210  virtual void lef_obstruction_cbk(lefiObstruction const& v);
213  virtual void lef_density_cbk(lefiDensity const& v);
216  virtual void lef_timing_cbk(lefiTiming const& v);
219  virtual void lef_array_cbk(lefiArray const& v);
222  virtual void lef_prop_cbk(lefiProp const& v);
225  virtual void lef_noisemargin_cbk(lefiNoiseMargin const& v);
228  virtual void lef_edgeratethreshold1_cbk(double v);
231  virtual void lef_edgeratethreshold2_cbk(double v);
234  virtual void lef_edgeratescalefactor_cbk(double v);
237  virtual void lef_noisetable_cbk(lefiNoiseTable const& v);
240  virtual void lef_correctiontable_cbk(lefiCorrectionTable const& v);
243  virtual void lef_inputantenna_cbk(double v);
246  virtual void lef_outputantenna_cbk(double v);
249  virtual void lef_inoutantenna_cbk(double v);
252  virtual void lef_antennainput_cbk(double v);
255  virtual void lef_antennaoutput_cbk(double v);
258  virtual void lef_antennainout_cbk(double v);
261  virtual void lef_extension_cbk(string const& v);
262  protected:
264  public:
266  static int lefrShiftCase;
267  private:
270  void lef_user_cbk_reminder(const char* str) const;
271 };
272 
273 } // namespace LefParser
274 
275 #endif
virtual void lef_busbitchars_cbk(string const &v)
set bus bit characters
virtual void lef_noisetable_cbk(lefiNoiseTable const &v)
noise table callback
static int lefNamesCaseSensitive
Definition: LefDataBase.h:265
virtual void lef_minfeature_cbk(lefiMinFeature const &v)
min feature callback
virtual void lef_casesensitive_cbk(int v)
set case sensitive flag
virtual void lef_layer_cbk(lefiLayer const &v)
add layer
virtual void lef_maxstackvia_cbk(lefiMaxStackVia const &v)
max stack via
virtual void lef_edgeratethreshold2_cbk(double v)
edge rate threshold 2
namespace for LefParser
Definition: LefDataBase.h:24
virtual void lef_units_cbk(lefiUnits const &v)
set unit
virtual void lef_spacing_cbk(lefiSpacing const &v)
spacing callback
virtual void lef_dividerchar_cbk(string const &v)
set divider characters
virtual void lef_density_cbk(lefiDensity const &v)
density callback
virtual void lef_antennainout_cbk(double v)
antenna inout callback
virtual void lef_outputantenna_cbk(double v)
output antenna callback
virtual void lef_site_cbk(lefiSite const &v)
site callback
virtual void lef_prop_cbk(lefiProp const &v)
property callback
virtual void lef_correctiontable_cbk(lefiCorrectionTable const &v)
correction table callback
virtual void lef_extension_cbk(string const &v)
extension callback
double current_version() const
virtual void lef_irdrop_cbk(lefiIRDrop const &v)
IR drop callback.
virtual void lef_inputantenna_cbk(double v)
input antenna callback
virtual void lef_useminspacing_cbk(lefiUseMinSpacing const &v)
set use min space
virtual void lef_manufacturing_cbk(double v)
set manufacturing entry
virtual void lef_dielectric_cbk(double v)
dielectric callback
virtual void lef_edgeratethreshold1_cbk(double v)
edge rate threshold 1
virtual void lef_macrobegin_cbk(std::string const &v)
macro begin callback, describe standard cell type
virtual void lef_antennainput_cbk(double v)
antenna input callback
virtual void lef_version_cbk(string const &v)
set LEF version
virtual void lef_timing_cbk(lefiTiming const &v)
timing callback
virtual void lef_clearancemeasure_cbk(string const &v)
set clearance measure
virtual void lef_array_cbk(lefiArray const &v)
array callback
virtual void lef_nowireextension_cbk(string const &v)
set no wire extension flag
virtual void lef_viarule_cbk(lefiViaRule const &v)
add via rule
virtual void lef_inoutantenna_cbk(double v)
inout antenna callback
virtual void lef_antennaoutput_cbk(double v)
antenna output callback
Base class for lef database. Only pure virtual functions are defined. User needs to inheritate this c...
Definition: LefDataBase.h:123
virtual void lef_noisemargin_cbk(lefiNoiseMargin const &v)
noise margin callback
virtual void lef_macro_cbk(lefiMacro const &v)
macro callback, describe standard cell type
virtual void lef_pin_cbk(lefiPin const &v)
pin callback, describe pins in a standard cell
virtual void lef_via_cbk(lefiVia const &v)
add via
virtual void lef_nondefault_cbk(lefiNonDefault const &v)
non-default rule callback
virtual void lef_edgeratescalefactor_cbk(double v)
edge rate scale factor
static int lefrShiftCase
Definition: LefDataBase.h:266
virtual void lef_obstruction_cbk(lefiObstruction const &v)
obstruction callback, describe obstructions in a standard cell
LefDataBase()
constructor