mirror of
https://github.com/KLayout/klayout.git
synced 2026-09-02 02:47:48 +02:00
Small refactoring, added persisted flag for meta info
This commit is contained in:
@@ -185,8 +185,8 @@ GDS2ReaderBase::do_read (db::Layout &layout)
|
||||
unsigned int mod_time[6] = { 0, 0, 0, 0, 0, 0 };
|
||||
unsigned int access_time[6] = { 0, 0, 0, 0, 0, 0 };
|
||||
get_time (mod_time, access_time);
|
||||
layout.add_meta_info (MetaInfo ("mod_time", tl::to_string (tr ("Modification Time")), tl::sprintf ("%d/%d/%d %d:%02d:%02d", mod_time[1], mod_time[2], mod_time[0], mod_time[3], mod_time[4], mod_time[5])));
|
||||
layout.add_meta_info (MetaInfo ("access_time", tl::to_string (tr ("Access Time")), tl::sprintf ("%d/%d/%d %d:%02d:%02d", access_time[1], access_time[2], access_time[0], access_time[3], access_time[4], access_time[5])));
|
||||
layout.add_meta_info ("mod_time", MetaInfo (tl::to_string (tr ("Modification Time")), tl::sprintf ("%d/%d/%d %d:%02d:%02d", mod_time[1], mod_time[2], mod_time[0], mod_time[3], mod_time[4], mod_time[5])));
|
||||
layout.add_meta_info ("access_time", MetaInfo (tl::to_string (tr ("Access Time")), tl::sprintf ("%d/%d/%d %d:%02d:%02d", access_time[1], access_time[2], access_time[0], access_time[3], access_time[4], access_time[5])));
|
||||
|
||||
long attr = 0;
|
||||
db::PropertiesRepository::properties_set layout_properties;
|
||||
@@ -234,9 +234,9 @@ GDS2ReaderBase::do_read (db::Layout &layout)
|
||||
double dbuu = get_double ();
|
||||
double dbum = get_double ();
|
||||
|
||||
layout.add_meta_info (MetaInfo ("dbuu", tl::to_string (tr ("Database unit in user units")), tl::to_string (dbuu)));
|
||||
layout.add_meta_info (MetaInfo ("dbum", tl::to_string (tr ("Database unit in meter")), tl::to_string (dbum)));
|
||||
layout.add_meta_info (MetaInfo ("libname", tl::to_string (tr ("Library name")), m_libname));
|
||||
layout.add_meta_info ("dbuu", MetaInfo (tl::to_string (tr ("Database unit in user units")), tl::to_string (dbuu)));
|
||||
layout.add_meta_info ("dbum", MetaInfo (tl::to_string (tr ("Database unit in meter")), tl::to_string (dbum)));
|
||||
layout.add_meta_info ("libname", MetaInfo (tl::to_string (tr ("Library name")), m_libname));
|
||||
|
||||
m_dbuu = dbuu;
|
||||
m_dbu = dbum * 1e6; /*in micron*/
|
||||
|
||||
@@ -86,9 +86,9 @@ GDS2WriterBase::write (db::Layout &layout, tl::OutputStream &stream, const db::S
|
||||
|
||||
db::GDS2WriterOptions gds2_options = options.get_options<db::GDS2WriterOptions> ();
|
||||
|
||||
layout.add_meta_info (MetaInfo ("dbuu", tl::to_string (tr ("Database unit in user units")), tl::to_string (dbu / std::max (1e-9, gds2_options.user_units))));
|
||||
layout.add_meta_info (MetaInfo ("dbum", tl::to_string (tr ("Database unit in meter")), tl::to_string (dbu * 1e-6)));
|
||||
layout.add_meta_info (MetaInfo ("libname", tl::to_string (tr ("Library name")), gds2_options.libname));
|
||||
layout.add_meta_info ("dbuu", MetaInfo (tl::to_string (tr ("Database unit in user units")), tl::to_string (dbu / std::max (1e-9, gds2_options.user_units))));
|
||||
layout.add_meta_info ("dbum", MetaInfo (tl::to_string (tr ("Database unit in meter")), tl::to_string (dbu * 1e-6)));
|
||||
layout.add_meta_info ("libname", MetaInfo (tl::to_string (tr ("Library name")), gds2_options.libname));
|
||||
|
||||
std::vector <std::pair <unsigned int, db::LayerProperties> > layers;
|
||||
options.get_valid_layers (layout, layers, db::SaveLayoutOptions::LP_AssignNumber);
|
||||
@@ -123,8 +123,8 @@ GDS2WriterBase::write (db::Layout &layout, tl::OutputStream &stream, const db::S
|
||||
}
|
||||
|
||||
std::string str_time = tl::sprintf ("%d/%d/%d %d:%02d:%02d", time_data[1], time_data[2], time_data[0], time_data[3], time_data[4], time_data[5]);
|
||||
layout.add_meta_info (MetaInfo ("mod_time", tl::to_string (tr ("Modification Time")), str_time));
|
||||
layout.add_meta_info (MetaInfo ("access_time", tl::to_string (tr ("Access Time")), str_time));
|
||||
layout.add_meta_info ("mod_time", MetaInfo (tl::to_string (tr ("Modification Time")), str_time));
|
||||
layout.add_meta_info ("access_time", MetaInfo (tl::to_string (tr ("Access Time")), str_time));
|
||||
|
||||
bool multi_xy = gds2_options.multi_xy_records;
|
||||
size_t max_cellname_length = std::max (gds2_options.max_cellname_length, (unsigned int)8);
|
||||
|
||||
@@ -145,9 +145,10 @@ public:
|
||||
// Initialize the libname property from meta data with key "libname".
|
||||
db::GDS2WriterOptions *options = dynamic_cast<db::GDS2WriterOptions *> (o);
|
||||
if (options) {
|
||||
db::Layout::meta_info_name_id_type libname_name_id = lh.layout().meta_info_name_id ("libname");
|
||||
for (db::Layout::meta_info_iterator meta = lh.layout().begin_meta (); meta != lh.layout().end_meta (); ++meta) {
|
||||
if (meta->name == "libname" && !meta->value.empty ()) {
|
||||
options->libname = meta->value;
|
||||
if (meta->first == libname_name_id && !meta->second.value.is_nil ()) {
|
||||
options->libname = meta->second.value.to_string ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ TEST(1)
|
||||
db::LayerMap map = reader.read (layout);
|
||||
|
||||
EXPECT_EQ (fabs (layout.dbu () / 0.001 - 1.0) < 1e-6, true);
|
||||
EXPECT_EQ (layout.meta_info_value ("libname"), "LIB.DB");
|
||||
EXPECT_EQ (layout.meta_info ("libname").value.to_string (), "LIB.DB");
|
||||
|
||||
EXPECT_EQ (layout.layers (), size_t (11));
|
||||
EXPECT_EQ (map.mapping_str (0), "2/0 : 2/0");
|
||||
@@ -289,7 +289,7 @@ TEST(2)
|
||||
db::Reader reader (file);
|
||||
map = reader.read (layout_none, options);
|
||||
EXPECT_EQ (fabs (layout_none.dbu () / 0.001 - 1.0) < 1e-6, true);
|
||||
EXPECT_EQ (layout.meta_info_value ("libname"), "LIB.DB");
|
||||
EXPECT_EQ (layout.meta_info ("libname").value.to_string (), "LIB.DB");
|
||||
}
|
||||
|
||||
EXPECT_EQ (layout_none.layers (), size_t (0));
|
||||
|
||||
@@ -316,7 +316,7 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
|
||||
error (tl::to_string (tr ("Could not find 'magic' header line - is this a MAGIC file?")));
|
||||
}
|
||||
|
||||
layout.add_meta_info (db::MetaInfo ("lambda", "lambda value (tech scaling)", tl::to_string (m_lambda)));
|
||||
layout.add_meta_info ("lambda", db::MetaInfo ("lambda value (tech scaling)", tl::to_string (m_lambda)));
|
||||
|
||||
bool valid_layer = false;
|
||||
unsigned int current_layer = 0;
|
||||
@@ -339,11 +339,11 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
|
||||
if (&m_stream == &stream) {
|
||||
|
||||
// initial file - store technology
|
||||
layout.add_meta_info (db::MetaInfo ("magic_technology", tl::to_string (tr ("MAGIC technology string")), m_tech));
|
||||
layout.add_meta_info ("magic_technology", db::MetaInfo (tl::to_string (tr ("MAGIC technology string")), m_tech));
|
||||
|
||||
// propose this is the KLayout technology unless a good one is given
|
||||
if (! mp_klayout_tech) {
|
||||
layout.add_meta_info (db::MetaInfo ("technology", tl::to_string (tr ("Technology name")), m_tech));
|
||||
layout.add_meta_info ("technology", db::MetaInfo (tl::to_string (tr ("Technology name")), m_tech));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -357,7 +357,7 @@ MAGReader::do_read_part (db::Layout &layout, db::cell_index_type cell_index, tl:
|
||||
|
||||
if (&m_stream == &stream) {
|
||||
// initial file - store timestamp
|
||||
layout.add_meta_info (db::MetaInfo ("magic_timestamp", "MAGIC main file timestamp", tl::to_string (ts)));
|
||||
layout.add_meta_info ("magic_timestamp", db::MetaInfo ("MAGIC main file timestamp", tl::to_string (ts)));
|
||||
}
|
||||
|
||||
ex.expect_end ();
|
||||
|
||||
@@ -82,11 +82,14 @@ MAGWriter::write (db::Layout &layout, tl::OutputStream &stream, const db::SaveLa
|
||||
|
||||
double lambda = m_options.lambda;
|
||||
if (lambda <= 0.0) {
|
||||
const std::string &lv = layout.meta_info_value ("lambda");
|
||||
if (lv.empty ()) {
|
||||
const tl::Variant &lv = layout.meta_info ("lambda").value;
|
||||
if (lv.is_nil ()) {
|
||||
throw tl::Exception (tl::to_string (tr ("No lambda value configured for MAG writer and no 'lambda' metadata present in layout.")));
|
||||
} else if (lv.is_a_string ()) {
|
||||
tl::from_string (lv.to_string (), lambda);
|
||||
} else if (lv.can_convert_to_double ()) {
|
||||
lambda = lv.to_double ();
|
||||
}
|
||||
tl::from_string (lv, lambda);
|
||||
}
|
||||
|
||||
m_sf = layout.dbu () / lambda;
|
||||
|
||||
@@ -1146,7 +1146,7 @@ public:
|
||||
|
||||
std::string lyr_file = data.get_layer_properties_file ();
|
||||
if (! lyr_file.empty ()) {
|
||||
layout.add_meta_info (db::MetaInfo ("layer-properties-file", "Layer Properties File", lyr_file));
|
||||
layout.add_meta_info ("layer-properties-file", db::MetaInfo ("Layer Properties File", lyr_file));
|
||||
}
|
||||
|
||||
return m_layers;
|
||||
|
||||
Reference in New Issue
Block a user