mirror of https://github.com/KLayout/klayout.git
WIP: moved hierarchical processor into db.
This commit is contained in:
parent
04256a2753
commit
f29fd3dfc6
|
|
@ -137,7 +137,9 @@ SOURCES = \
|
||||||
dbOriginalLayerEdgePairs.cc \
|
dbOriginalLayerEdgePairs.cc \
|
||||||
dbEdgePairsDelegate.cc \
|
dbEdgePairsDelegate.cc \
|
||||||
dbDeepShapeStore.cc \
|
dbDeepShapeStore.cc \
|
||||||
dbHierarchyBuilder.cc
|
dbHierarchyBuilder.cc \
|
||||||
|
dbLocalOperation.cc \
|
||||||
|
dbHierProcessor.cc
|
||||||
|
|
||||||
HEADERS = \
|
HEADERS = \
|
||||||
dbArray.h \
|
dbArray.h \
|
||||||
|
|
@ -244,7 +246,9 @@ HEADERS = \
|
||||||
dbOriginalLayerEdgePairs.h \
|
dbOriginalLayerEdgePairs.h \
|
||||||
dbEdgePairsDelegate.h \
|
dbEdgePairsDelegate.h \
|
||||||
dbDeepShapeStore.h \
|
dbDeepShapeStore.h \
|
||||||
dbHierarchyBuilder.h
|
dbHierarchyBuilder.h \
|
||||||
|
dbLocalOperation.h \
|
||||||
|
dbHierProcessor.h
|
||||||
|
|
||||||
!equals(HAVE_QT, "0") {
|
!equals(HAVE_QT, "0") {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,9 @@
|
||||||
#ifndef HDR_dbHierProcessor
|
#ifndef HDR_dbHierProcessor
|
||||||
#define HDR_dbHierProcessor
|
#define HDR_dbHierProcessor
|
||||||
|
|
||||||
|
#include "dbCommon.h"
|
||||||
|
|
||||||
#include "dbLayout.h"
|
#include "dbLayout.h"
|
||||||
#include "dbPluginCommon.h"
|
|
||||||
#include "dbLocalOperation.h"
|
#include "dbLocalOperation.h"
|
||||||
#include "tlThreadedWorkers.h"
|
#include "tlThreadedWorkers.h"
|
||||||
|
|
||||||
|
|
@ -36,9 +37,9 @@
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
// @@@ should go into dbHash.h
|
|
||||||
#include "dbHash.h"
|
#include "dbHash.h"
|
||||||
|
|
||||||
|
// @@@ should go into dbHash.h
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
template <class C>
|
template <class C>
|
||||||
|
|
@ -82,7 +83,7 @@ class LocalProcessorCellContext;
|
||||||
class LocalProcessorContexts;
|
class LocalProcessorContexts;
|
||||||
|
|
||||||
// TODO: move this somewhere else?
|
// TODO: move this somewhere else?
|
||||||
class DB_PLUGIN_PUBLIC ShapeInteractions
|
class DB_PUBLIC ShapeInteractions
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::unordered_map<unsigned int, std::vector<unsigned int> > container;
|
typedef std::unordered_map<unsigned int, std::vector<unsigned int> > container;
|
||||||
|
|
@ -120,7 +121,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: should be hidden (private data?)
|
// TODO: should be hidden (private data?)
|
||||||
struct DB_PLUGIN_PUBLIC LocalProcessorCellDrop
|
struct DB_PUBLIC LocalProcessorCellDrop
|
||||||
{
|
{
|
||||||
LocalProcessorCellDrop (db::LocalProcessorCellContext *_parent_context, db::Cell *_parent, const db::ICplxTrans &_cell_inst)
|
LocalProcessorCellDrop (db::LocalProcessorCellContext *_parent_context, db::Cell *_parent, const db::ICplxTrans &_cell_inst)
|
||||||
: parent_context (_parent_context), parent (_parent), cell_inst (_cell_inst)
|
: parent_context (_parent_context), parent (_parent), cell_inst (_cell_inst)
|
||||||
|
|
@ -134,7 +135,7 @@ struct DB_PLUGIN_PUBLIC LocalProcessorCellDrop
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: should be hidden (private data?)
|
// TODO: should be hidden (private data?)
|
||||||
class DB_PLUGIN_PUBLIC LocalProcessorCellContext
|
class DB_PUBLIC LocalProcessorCellContext
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::pair<const db::Cell *, db::ICplxTrans> parent_inst_type;
|
typedef std::pair<const db::Cell *, db::ICplxTrans> parent_inst_type;
|
||||||
|
|
@ -170,7 +171,7 @@ private:
|
||||||
tl::Mutex m_lock;
|
tl::Mutex m_lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DB_PLUGIN_PUBLIC LocalProcessorCellContexts
|
class DB_PUBLIC LocalProcessorCellContexts
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::pair<std::unordered_set<CellInstArray>, std::unordered_set<db::PolygonRef> > key_type;
|
typedef std::pair<std::unordered_set<CellInstArray>, std::unordered_set<db::PolygonRef> > key_type;
|
||||||
|
|
@ -199,7 +200,7 @@ private:
|
||||||
std::unordered_map<key_type, db::LocalProcessorCellContext> m_contexts;
|
std::unordered_map<key_type, db::LocalProcessorCellContext> m_contexts;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DB_PLUGIN_PUBLIC LocalProcessorContexts
|
class DB_PUBLIC LocalProcessorContexts
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::unordered_map<db::Cell *, LocalProcessorCellContexts> contexts_per_cell_type;
|
typedef std::unordered_map<db::Cell *, LocalProcessorCellContexts> contexts_per_cell_type;
|
||||||
|
|
@ -271,7 +272,7 @@ private:
|
||||||
mutable tl::Mutex m_lock;
|
mutable tl::Mutex m_lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DB_PLUGIN_PUBLIC LocalProcessorContextComputationTask
|
class DB_PUBLIC LocalProcessorContextComputationTask
|
||||||
: public tl::Task
|
: public tl::Task
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -290,7 +291,7 @@ private:
|
||||||
db::Coord m_dist;
|
db::Coord m_dist;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DB_PLUGIN_PUBLIC LocalProcessorContextComputationWorker
|
class DB_PUBLIC LocalProcessorContextComputationWorker
|
||||||
: public tl::Worker
|
: public tl::Worker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -306,7 +307,7 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class DB_PLUGIN_PUBLIC LocalProcessorResultComputationTask
|
class DB_PUBLIC LocalProcessorResultComputationTask
|
||||||
: public tl::Task
|
: public tl::Task
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -322,7 +323,7 @@ private:
|
||||||
unsigned int m_output_layer;
|
unsigned int m_output_layer;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DB_PLUGIN_PUBLIC LocalProcessorResultComputationWorker
|
class DB_PUBLIC LocalProcessorResultComputationWorker
|
||||||
: public tl::Worker
|
: public tl::Worker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -338,7 +339,7 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class DB_PLUGIN_PUBLIC LocalProcessor
|
class DB_PUBLIC LocalProcessor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LocalProcessor (db::Layout *layout, db::Cell *top);
|
LocalProcessor (db::Layout *layout, db::Cell *top);
|
||||||
|
|
@ -25,8 +25,9 @@
|
||||||
#ifndef HDR_dbLocalOperation
|
#ifndef HDR_dbLocalOperation
|
||||||
#define HDR_dbLocalOperation
|
#define HDR_dbLocalOperation
|
||||||
|
|
||||||
|
#include "dbCommon.h"
|
||||||
|
|
||||||
#include "dbLayout.h"
|
#include "dbLayout.h"
|
||||||
#include "dbPluginCommon.h"
|
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
@ -48,7 +49,7 @@ class ShapeInteractions;
|
||||||
* This class implements the actual operation. It receives a
|
* This class implements the actual operation. It receives a
|
||||||
* cluster of subject shapes vs. corresponding intruder shapes.
|
* cluster of subject shapes vs. corresponding intruder shapes.
|
||||||
*/
|
*/
|
||||||
class DB_PLUGIN_PUBLIC LocalOperation
|
class DB_PUBLIC LocalOperation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
|
@ -109,7 +110,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief Implements a boolean AND or NOT operation
|
* @brief Implements a boolean AND or NOT operation
|
||||||
*/
|
*/
|
||||||
class DB_PLUGIN_PUBLIC BoolAndOrNotLocalOperation
|
class DB_PUBLIC BoolAndOrNotLocalOperation
|
||||||
: public LocalOperation
|
: public LocalOperation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -128,7 +129,7 @@ private:
|
||||||
* With a given wrap_count, the result will only contains shapes where
|
* With a given wrap_count, the result will only contains shapes where
|
||||||
* the original shapes overlap at least "wrap_count" times.
|
* the original shapes overlap at least "wrap_count" times.
|
||||||
*/
|
*/
|
||||||
class DB_PLUGIN_PUBLIC SelfOverlapMergeLocalOperation
|
class DB_PUBLIC SelfOverlapMergeLocalOperation
|
||||||
: public LocalOperation
|
: public LocalOperation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
static std::string testdata (const std::string &fn)
|
static std::string testdata (const std::string &fn)
|
||||||
{
|
{
|
||||||
return tl::testsrc () + "/src/plugins/tools/netx/testdata/" + fn;
|
return tl::testsrc () + "/testdata/algo/" + fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum TestMode
|
enum TestMode
|
||||||
|
|
@ -54,7 +54,8 @@ SOURCES = \
|
||||||
dbLoadLayoutOptionsTests.cc \
|
dbLoadLayoutOptionsTests.cc \
|
||||||
dbSaveLayoutOptionsTests.cc \
|
dbSaveLayoutOptionsTests.cc \
|
||||||
dbHierarchyBuilderTests.cc \
|
dbHierarchyBuilderTests.cc \
|
||||||
dbRecursiveShapeIteratorTests.cc
|
dbRecursiveShapeIteratorTests.cc \
|
||||||
|
dbHierProcessorTests.cc
|
||||||
|
|
||||||
INCLUDEPATH += $$TL_INC $$DB_INC $$GSI_INC
|
INCLUDEPATH += $$TL_INC $$DB_INC $$GSI_INC
|
||||||
DEPENDPATH += $$TL_INC $$DB_INC $$GSI_INC
|
DEPENDPATH += $$TL_INC $$DB_INC $$GSI_INC
|
||||||
|
|
|
||||||
|
|
@ -1,177 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
KLayout Layout Viewer
|
|
||||||
Copyright (C) 2006-2018 Matthias Koefferlein
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "dbNetExtractor.h"
|
|
||||||
#include "dbHierProcessor.h"
|
|
||||||
#include "dbLayoutUtils.h"
|
|
||||||
#include "dbCellMapping.h"
|
|
||||||
#include "dbPolygonTools.h"
|
|
||||||
#include "dbBoxScanner.h"
|
|
||||||
#include "dbRecursiveShapeIterator.h"
|
|
||||||
#include "dbBoxConvert.h"
|
|
||||||
#include "tlLog.h"
|
|
||||||
|
|
||||||
namespace db
|
|
||||||
{
|
|
||||||
|
|
||||||
NetExtractor::NetExtractor()
|
|
||||||
: mp_orig_layout (0), mp_layout (0), mp_top_cell (0), m_nthreads (0)
|
|
||||||
{
|
|
||||||
|
|
||||||
// @@@
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
NetExtractor::~NetExtractor ()
|
|
||||||
{
|
|
||||||
delete mp_layout;
|
|
||||||
mp_layout = 0;
|
|
||||||
mp_top_cell = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
NetExtractor::set_threads (unsigned int nthreads)
|
|
||||||
{
|
|
||||||
m_nthreads = nthreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
NetExtractor::open (const db::Layout &orig_layout, cell_index_type orig_top_cell)
|
|
||||||
{
|
|
||||||
tl::SelfTimer timer (tl::verbosity () >= 31, tl::to_string (tr ("Open layout")));
|
|
||||||
|
|
||||||
delete mp_layout;
|
|
||||||
mp_orig_layout = &orig_layout;
|
|
||||||
|
|
||||||
mp_layout = new db::Layout ();
|
|
||||||
mp_layout->dbu (orig_layout.dbu ());
|
|
||||||
mp_top_cell = &mp_layout->cell (mp_layout->add_cell (orig_layout.cell_name (orig_top_cell)));
|
|
||||||
|
|
||||||
// copy hierarchy
|
|
||||||
m_cm.clear ();
|
|
||||||
m_cm.create_from_names_full (*mp_layout, mp_top_cell->cell_index (), orig_layout, orig_top_cell);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
NetExtractor::output (NetLayer a, const LayerProperties &lp)
|
|
||||||
{
|
|
||||||
mp_layout->set_properties (a.layer_index (), lp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static double area_ratio (const db::Polygon &poly)
|
|
||||||
{
|
|
||||||
return double (poly.box ().area ()) / double (poly.area ());
|
|
||||||
}
|
|
||||||
|
|
||||||
static void split_polygon_into (const db::Polygon &poly, db::Shapes &dest, size_t max_points, double max_area_ratio)
|
|
||||||
{
|
|
||||||
size_t npoints = 0;
|
|
||||||
for (unsigned int c = 0; c < poly.holes () + 1; ++c) {
|
|
||||||
npoints += poly.contour (c).size ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (npoints > max_points || area_ratio (poly) > max_area_ratio) {
|
|
||||||
|
|
||||||
std::vector <db::Polygon> split_polygons;
|
|
||||||
db::split_polygon (poly, split_polygons);
|
|
||||||
for (std::vector <db::Polygon>::const_iterator sp = split_polygons.begin (); sp != split_polygons.end (); ++sp) {
|
|
||||||
split_polygon_into (*sp, dest, max_points, max_area_ratio);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
dest.insert (db::PolygonRef (poly, dest.layout ()->shape_repository ()));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NetLayer
|
|
||||||
NetExtractor::load (unsigned int layer_index)
|
|
||||||
{
|
|
||||||
tl::SelfTimer timer (tl::verbosity () >= 31, tl::to_string (tr ("Loading layer ")) + mp_orig_layout->get_properties (layer_index).to_string ());
|
|
||||||
|
|
||||||
const double max_area_ratio = 3.0;
|
|
||||||
const size_t max_points = 16;
|
|
||||||
|
|
||||||
NetLayer lt (mp_layout->insert_layer ());
|
|
||||||
mp_layout->set_properties (lt.layer_index(), mp_orig_layout->get_properties (layer_index));
|
|
||||||
|
|
||||||
for (db::Layout::const_iterator c = mp_orig_layout->begin (); c != mp_layout->end (); ++c) {
|
|
||||||
|
|
||||||
if (m_cm.has_mapping (c->cell_index ())) {
|
|
||||||
|
|
||||||
db::cell_index_type ct = m_cm.cell_mapping (c->cell_index ());
|
|
||||||
|
|
||||||
db::Shapes &dest_shapes = mp_layout->cell (ct).shapes (lt.layer_index());
|
|
||||||
const db::Shapes &orig_shapes = c->shapes (layer_index);
|
|
||||||
for (db::Shapes::shape_iterator s = orig_shapes.begin (db::ShapeIterator::Polygons | db::ShapeIterator::Paths | db::ShapeIterator::Boxes); ! s.at_end (); ++s) {
|
|
||||||
|
|
||||||
// @@@ TODO: cache splitting and path to polygon conversion
|
|
||||||
db::Polygon poly;
|
|
||||||
s->polygon (poly);
|
|
||||||
|
|
||||||
split_polygon_into (poly, dest_shapes, max_points, max_area_ratio);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return lt;
|
|
||||||
}
|
|
||||||
|
|
||||||
NetLayer
|
|
||||||
NetExtractor::bool_and (NetLayer a, NetLayer b)
|
|
||||||
{
|
|
||||||
return and_or_not (a, b, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
NetLayer
|
|
||||||
NetExtractor::bool_not (NetLayer a, NetLayer b)
|
|
||||||
{
|
|
||||||
return and_or_not (a, b, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
NetLayer
|
|
||||||
NetExtractor::and_or_not (NetLayer a, NetLayer b, bool is_and)
|
|
||||||
{
|
|
||||||
unsigned int lout = mp_layout->insert_layer ();
|
|
||||||
|
|
||||||
db::BoolAndOrNotLocalOperation op (is_and);
|
|
||||||
db::LocalProcessor proc (mp_layout, mp_top_cell);
|
|
||||||
proc.set_threads (m_nthreads);
|
|
||||||
proc.run (&op, a.layer_index (), b.layer_index (), lout);
|
|
||||||
|
|
||||||
return NetLayer (lout);
|
|
||||||
}
|
|
||||||
|
|
||||||
db::Layout *
|
|
||||||
NetExtractor::layout_copy () const
|
|
||||||
{
|
|
||||||
tl_assert (mp_layout != 0);
|
|
||||||
return new db::Layout (*mp_layout);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,120 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
KLayout Layout Viewer
|
|
||||||
Copyright (C) 2006-2018 Matthias Koefferlein
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef HDR_dbNetExtractor
|
|
||||||
#define HDR_dbNetExtractor
|
|
||||||
|
|
||||||
#include "dbPluginCommon.h"
|
|
||||||
#include "dbLayout.h"
|
|
||||||
#include "dbCellMapping.h"
|
|
||||||
#include "tlTypeTraits.h"
|
|
||||||
|
|
||||||
namespace db
|
|
||||||
{
|
|
||||||
|
|
||||||
class NetLayer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
NetLayer (unsigned int index)
|
|
||||||
: m_layer_index (index)
|
|
||||||
{
|
|
||||||
// .. nothing yet ..
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int layer_index () const
|
|
||||||
{
|
|
||||||
return m_layer_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
unsigned int m_layer_index;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief The net extractor
|
|
||||||
*
|
|
||||||
* ...
|
|
||||||
*/
|
|
||||||
class DB_PLUGIN_PUBLIC NetExtractor
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* @brief Constructs a net extractor
|
|
||||||
*/
|
|
||||||
NetExtractor ();
|
|
||||||
|
|
||||||
~NetExtractor ();
|
|
||||||
|
|
||||||
// @@@
|
|
||||||
void open (const db::Layout &orig_layout, db::cell_index_type orig_top_cell);
|
|
||||||
NetLayer load (unsigned int layer_index);
|
|
||||||
NetLayer bool_and (NetLayer a, NetLayer b);
|
|
||||||
NetLayer bool_not (NetLayer a, NetLayer b);
|
|
||||||
void output (NetLayer a, const db::LayerProperties &lp);
|
|
||||||
db::Layout *layout_copy () const;
|
|
||||||
|
|
||||||
void set_threads (unsigned int nthreads);
|
|
||||||
unsigned int threads () const
|
|
||||||
{
|
|
||||||
return m_nthreads;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
// no copying
|
|
||||||
NetExtractor (const db::NetExtractor &);
|
|
||||||
NetExtractor &operator= (const db::NetExtractor &);
|
|
||||||
|
|
||||||
NetLayer and_or_not (NetLayer a, NetLayer b, bool is_and);
|
|
||||||
|
|
||||||
// @@@
|
|
||||||
const db::Layout *mp_orig_layout; // @@@ should be a smart pointer
|
|
||||||
db::Layout *mp_layout;
|
|
||||||
db::Cell *mp_top_cell;
|
|
||||||
db::CellMapping m_cm;
|
|
||||||
unsigned int m_nthreads;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace tl
|
|
||||||
{
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct type_traits<db::NetLayer> : public tl::type_traits<void>
|
|
||||||
{
|
|
||||||
// mark "NetLayer" as not having a default ctor
|
|
||||||
typedef tl::false_tag has_default_constructor;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct type_traits<db::NetExtractor> : public tl::type_traits<void>
|
|
||||||
{
|
|
||||||
// mark "NetExtractor" as not copyable
|
|
||||||
typedef tl::false_tag has_copy_constructor;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
KLayout Layout Viewer
|
|
||||||
Copyright (C) 2006-2018 Matthias Koefferlein
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
namespace db
|
|
||||||
{
|
|
||||||
|
|
||||||
// @@@
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
|
|
||||||
TARGET = netx
|
|
||||||
DESTDIR = $$OUT_PWD/../../../../db_plugins
|
|
||||||
|
|
||||||
include($$PWD/../../../db_plugin.pri)
|
|
||||||
|
|
||||||
HEADERS = \
|
|
||||||
dbNetExtractor.h \
|
|
||||||
dbHierProcessor.h \
|
|
||||||
dbLocalOperation.h
|
|
||||||
|
|
||||||
SOURCES = \
|
|
||||||
dbNetExtractor.cc \
|
|
||||||
dbHierProcessor.cc \
|
|
||||||
dbNetExtractorPlugin.cc \
|
|
||||||
gsiDeclDbNetExtractor.cc \
|
|
||||||
dbLocalOperation.cc
|
|
||||||
|
|
||||||
|
|
@ -1,90 +0,0 @@
|
||||||
/*
|
|
||||||
|
|
||||||
KLayout Layout Viewer
|
|
||||||
Copyright (C) 2006-2018 Matthias Koefferlein
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "dbNetExtractor.h"
|
|
||||||
|
|
||||||
#include "gsiDecl.h"
|
|
||||||
|
|
||||||
namespace gsi
|
|
||||||
{
|
|
||||||
|
|
||||||
gsi::Class<db::NetLayer> decl_NetLayer ("db", "NetLayer",
|
|
||||||
gsi::method ("layer_index", &db::NetLayer::layer_index,
|
|
||||||
"@@@"
|
|
||||||
),
|
|
||||||
"@brief The net extractor\n"
|
|
||||||
"\n"
|
|
||||||
"This class has been introduced in version 0.26."
|
|
||||||
);
|
|
||||||
|
|
||||||
void open2 (db::NetExtractor *ex, const db::Layout *orig_layout, const db::Cell *cell)
|
|
||||||
{
|
|
||||||
ex->open (*orig_layout, cell->cell_index ());
|
|
||||||
}
|
|
||||||
|
|
||||||
void output1 (db::NetExtractor *ex, const db::NetLayer &nl, const db::LayerProperties &lp)
|
|
||||||
{
|
|
||||||
ex->output (nl, lp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void output2 (db::NetExtractor *ex, const db::NetLayer &nl, int layer, int datatype, const std::string &name)
|
|
||||||
{
|
|
||||||
ex->output (nl, db::LayerProperties (layer, datatype, name));
|
|
||||||
}
|
|
||||||
|
|
||||||
gsi::Class<db::NetExtractor> decl_NetNetExtractor ("db", "NetExtractor",
|
|
||||||
gsi::method ("open", &db::NetExtractor::open, gsi::arg ("orig_layout"), gsi::arg ("orig_top_cell_index"),
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::method ("threads=", &db::NetExtractor::set_threads, gsi::arg ("nthreads"),
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::method ("threads", &db::NetExtractor::threads,
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::method_ext ("open", &open2, gsi::arg ("orig_layout"), gsi::arg ("orig_top_cell"),
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::method_ext ("output", &output1, gsi::arg ("net_layer"), gsi::arg ("layer"),
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::method_ext ("output", &output2, gsi::arg ("net_layer"), gsi::arg ("layer"), gsi::arg ("datatype"), gsi::arg ("name", std::string ()),
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::method ("load", &db::NetExtractor::load, gsi::arg ("layer_index"),
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::method ("bool_and", &db::NetExtractor::bool_and, gsi::arg ("a"), gsi::arg ("b"),
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::method ("bool_not", &db::NetExtractor::bool_not, gsi::arg ("a"), gsi::arg ("b"),
|
|
||||||
"@@@"
|
|
||||||
) +
|
|
||||||
gsi::factory ("layout_copy", &db::NetExtractor::layout_copy,
|
|
||||||
"@@@"
|
|
||||||
),
|
|
||||||
"@brief The net extractor\n"
|
|
||||||
"\n"
|
|
||||||
"This class has been introduced in version 0.26."
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
|
||||||
|
|
||||||
SUBDIRS = db_plugin unit_tests
|
|
||||||
unit_tests.depends += db_plugin
|
|
||||||
|
|
||||||
#!equals(HAVE_QT, "0") {
|
|
||||||
# SUBDIRS += lay_plugin
|
|
||||||
# lay_plugin.depends += db_plugin
|
|
||||||
#}
|
|
||||||
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
KLayout Layout Viewer
|
|
||||||
Copyright (C) 2006-2018 Matthias Koefferlein
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "tlUnitTest.h"
|
|
||||||
|
|
||||||
TEST(1)
|
|
||||||
{
|
|
||||||
// .. nothing yet ..
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
DESTDIR_UT = $$OUT_PWD/../../../..
|
|
||||||
|
|
||||||
TARGET = net_tracer_tests
|
|
||||||
|
|
||||||
include($$PWD/../../../../lib_ut.pri)
|
|
||||||
|
|
||||||
SOURCES = \
|
|
||||||
dbNetExtractorTests.cc \
|
|
||||||
dbHierProcessorTests.cc \
|
|
||||||
|
|
||||||
INCLUDEPATH += $$LAY_INC $$TL_INC $$DB_INC $$GSI_INC $$PWD/../db_plugin $$PWD/../../../common
|
|
||||||
DEPENDPATH += $$LAY_INC $$TL_INC $$DB_INC $$GSI_INC $$PWD/../db_plugin $$PWD/../../../common
|
|
||||||
|
|
||||||
LIBS += -L$$DESTDIR_UT -lklayout_db -lklayout_tl -lklayout_gsi
|
|
||||||
|
|
||||||
# This makes the test pull the mebes library for testing (not installed)
|
|
||||||
PLUGINPATH = $$OUT_PWD/../../../../db_plugins
|
|
||||||
QMAKE_RPATHDIR += $$PLUGINPATH
|
|
||||||
|
|
||||||
LIBS += -L$$PLUGINPATH -lnetx
|
|
||||||
Loading…
Reference in New Issue