Merge pull request #23 from klayoutmatthias/master

Sync with master
This commit is contained in:
Kazunari Sekigawa 2018-01-18 06:49:40 +09:00 committed by GitHub
commit 3a3273fd9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 304 additions and 169 deletions

View File

@ -1361,6 +1361,7 @@ drop_method "QXmlAttributes", /QXmlAttributes::index\(\s*const\s+QLatin1String/
drop_method "QXmlInputSource", /QXmlInputSource::setData\(.*QByteArray/ # clashes with QString version
drop_method "QXmlEntityResolver", /QXmlEntityResolver::resolveEntity/ # requires pointer return value
drop_method "QXmlDefaultHandler", /QXmlDefaultHandler::resolveEntity/ # requires pointer return value
drop_method "QXmlSimpleReader", /QXmlSimpleReader::parse\(.*QXmlInputSource\s*&/ # clashes with QXmlInputSource * version
rename "QDomElement", /QDomElement::setAttribute\(.*qulonglong/, "setAttribute_ull|attribute_ull="
rename "QDomElement", /QDomElement::setAttribute\(.*qlonglong/, "setAttribute_ll|attribute_ll="
rename "QDomElement", /QDomElement::setAttribute\(.*unsigned int/, "setAttribute_ui|attribute_ui="

View File

@ -1499,6 +1499,7 @@ no_imports "QXmlStreamAttributes" # base class is a template.
drop_method "QXmlStreamAttributes", /QXmlStreamAttributes::append\(const\s+QVector/ # QVector is a template
drop_method "QXmlStreamAttributes", /QXmlStreamAttributes::hasAttribute\(\s*QLatin1String/ # QLatin1String is not available
drop_method "QXmlStreamAttributes", /QXmlStreamAttributes::value\(.*QLatin1String/ # QLatin1String is not available
drop_method "QXmlSimpleReader", /QXmlSimpleReader::parse\(.*QXmlInputSource\s*&/ # clashes with QXmlInputSource * version
drop_method "QAbstractXmlNodeModel", /QAbstractXmlNodeModel::sequencedTypedValue/ # QExplicitlySharedDataPointer template not available
drop_method "QAbstractXmlNodeModel", /QAbstractXmlNodeModel::type/ # QExplicitlySharedDataPointer template not available
drop_method "QAbstractXmlNodeModel", /QAbstractXmlNodeModel::iterate/ # QExplicitlySharedDataPointer template not available

View File

@ -113,7 +113,7 @@ bool euclidian_near_part_of_edge (bool include_zero, db::Coord d, const db::Edge
// handle the parallel case
if (e.parallel (g)) {
if (abs (e.distance (g.p1 ())) >= d) {
if (std::abs (e.distance (g.p1 ())) >= d) {
return false;
}
} else {
@ -243,7 +243,7 @@ static bool var_near_part_of_edge (bool include_zero, db::Coord d, db::Coord dd,
// handle the parallel case
if (e.parallel (g)) {
if (abs (e.distance (g.p1 ())) >= d) {
if (std::abs (e.distance (g.p1 ())) >= d) {
return false;
}
} else {

View File

@ -26,6 +26,7 @@
#include "dbPolygonTools.h"
#include "dbPolygonGenerators.h"
#include "tlLog.h"
#include "tlInt128Support.h"
#include <algorithm>
#include <cmath>
@ -706,7 +707,7 @@ smooth_contour (db::Polygon::polygon_contour_iterator from, db::Polygon::polygon
}
for (size_t j = pi0; can_drop; ) {
if (abs (db::Edge (p0, p2).distance (org_points [j])) > d) {
if (std::abs (db::Edge (p0, p2).distance (org_points [j])) > d) {
can_drop = false;
}
if (j == pi2) {

View File

@ -828,8 +828,13 @@ Region::selected_interacting_generic (const Region &other, int mode, bool touchi
db::EdgeProcessor ep (m_report_progress, m_progress_desc);
// shortcut
if (empty () || other.empty ()) {
if (mode <= 0) {
if (empty ()) {
return *this;
} else if (other.empty ()) {
// clear, if b is empty and
// * mode is inside or interacting and inverse is false ("inside" or "interacting")
// * mode is outside and inverse is true ("not outside")
if ((mode <= 0) != inverse) {
return Region ();
} else {
return *this;
@ -879,8 +884,13 @@ void
Region::select_interacting_generic (const Region &other, int mode, bool touching, bool inverse)
{
// shortcut
if (empty () || other.empty ()) {
if (mode <= 0) {
if (empty ()) {
return;
} else if (other.empty ()) {
// clear, if b is empty and
// * mode is inside or interacting and inverse is false ("inside" or "interacting")
// * mode is outside and inverse is true ("not outside")
if ((mode <= 0) != inverse) {
clear ();
}
return;

View File

@ -176,7 +176,7 @@ TEST(3)
layout_read, top_read, j,
top_org.shapes (xor_layer), db::BooleanOp::Xor, true, false);
EXPECT_EQ (top_org.shapes (xor_layer).size () > 210, true);
sp.size (layout_org, top_org, xor_layer, top_org.shapes (xor_layer), -1, -1);
sp.size (layout_org, top_org, xor_layer, top_org.shapes (xor_layer), db::Coord (-1), db::Coord (-1));
EXPECT_EQ (top_org.shapes (xor_layer).size () == 0, true);
}
}
@ -236,7 +236,7 @@ TEST(4)
sp.boolean (layout_org, top_org, i,
layout_read, top_read, j,
top_org.shapes (xor_layer), db::BooleanOp::Xor, true, false);
sp.size (layout_org, top_org, xor_layer, top_org.shapes (xor_layer), -1, -1);
sp.size (layout_org, top_org, xor_layer, top_org.shapes (xor_layer), db::Coord (-1), db::Coord (-1));
EXPECT_EQ (top_org.shapes (xor_layer).size () == 0, true);
}
}

View File

@ -81,7 +81,7 @@ TEST(1)
sp.boolean (layout_org, top_org, i,
layout_read, top_read, j,
top_org.shapes (xor_layer), db::BooleanOp::Xor, true, false);
sp.size (layout_org, top_org, xor_layer, top_org.shapes (xor_layer), -1, -1);
sp.size (layout_org, top_org, xor_layer, top_org.shapes (xor_layer), db::Coord (-1), db::Coord (-1));
EXPECT_EQ (top_org.shapes (xor_layer).size () == 0, true);
}
}

View File

@ -1026,19 +1026,19 @@ TEST(20)
EXPECT_EQ (poly.to_string (), "(100,100;200,100;200,400;100,400;100,300;400,300;400,400;300,400;300,100;400,100;400,200;100,200)");
poly.assign_hull (pts, pts + sizeof (pts) / sizeof (pts[0]));
poly.size (100, 0);
poly.size (db::Coord (100), db::Coord (0));
EXPECT_EQ (poly.to_string (), "(0,100;0,400;500,400;500,100)");
poly.assign_hull (pts, pts + sizeof (pts) / sizeof (pts[0]));
poly.size (0, 100);
poly.size (db::Coord (0), db::Coord (100));
EXPECT_EQ (poly.to_string (), "(100,0;100,500;400,500;400,0)");
poly.assign_hull (pts, pts + sizeof (pts) / sizeof (pts[0]));
poly.size (-100, 0);
poly.size (db::Coord (-100), db::Coord (0));
EXPECT_EQ (poly.to_string (), "(100,100;200,100;200,400;100,400;400,400;300,400;300,100;400,100)");
poly.assign_hull (pts, pts + sizeof (pts) / sizeof (pts[0]));
poly.size (0, -100);
poly.size (db::Coord (0), db::Coord (-100));
EXPECT_EQ (poly.to_string (), "(100,100;100,400;100,300;400,300;400,400;400,100;400,200;100,200)");
poly.assign_hull (pts, pts + sizeof (pts) / sizeof (pts[0]));

View File

@ -122,7 +122,7 @@ TEST(1)
r.set_merged_semantics (false);
EXPECT_EQ (r.sized (10).to_string (), "(-10,-10;-10,60;60,60;60,-10);(40,40;40,110;110,110;110,40)");
EXPECT_EQ (r.sized (10, 20).to_string (), "(-10,-20;-10,70;60,70;60,-20);(40,30;40,120;110,120;110,30)");
EXPECT_EQ (r.sized (db::Coord (10), db::Coord (20)).to_string (), "(-10,-20;-10,70;60,70;60,-20);(40,30;40,120;110,120;110,30)");
EXPECT_EQ (r.sized (10, 20, 0).to_string (), "(0,-20;-10,0;-10,50;0,70;50,70;60,50;60,0;50,-20);(50,30;40,50;40,100;50,120;100,120;110,100;110,50;100,30)");
r.size (10, 20, 2);
EXPECT_EQ (r.to_string (), "(-10,-20;-10,70;60,70;60,-20);(40,30;40,120;110,120;110,30)");
@ -289,13 +289,13 @@ TEST(8)
EXPECT_EQ (r.sized (10).to_string (), "(-10,-10;-10,210;110,210;110,-10)");
EXPECT_EQ (r.sized (10).is_box (), true);
EXPECT_EQ (r.sized (10).is_merged (), true);
EXPECT_EQ (r.sized (10, 20).to_string (), "(-10,-20;-10,220;110,220;110,-20)");
EXPECT_EQ (r.sized (10, 20).is_box (), true);
EXPECT_EQ (r.sized (10, 20).is_merged (), true);
EXPECT_EQ (r.sized (db::Coord (10), db::Coord (20)).to_string (), "(-10,-20;-10,220;110,220;110,-20)");
EXPECT_EQ (r.sized (db::Coord (10), db::Coord (20)).is_box (), true);
EXPECT_EQ (r.sized (db::Coord (10), db::Coord (20)).is_merged (), true);
r.size (10);
EXPECT_EQ (r.to_string (), "(-10,-10;-10,210;110,210;110,-10)");
r.size (10, 20);
r.size (db::Coord (10), db::Coord (20));
EXPECT_EQ (r.to_string (), "(-20,-30;-20,230;120,230;120,-30)");
}
@ -307,9 +307,9 @@ TEST(9)
EXPECT_EQ (r.sized (10).to_string (), "(-110,-110;-110,410;210,410;210,-110)");
EXPECT_EQ (r.sized (10).is_box (), true);
EXPECT_EQ (r.sized (10).is_merged (), false);
EXPECT_EQ (r.sized (10, 20).to_string (), "(-110,-120;-110,420;210,420;210,-120)");
EXPECT_EQ (r.sized (10, 20).is_box (), true);
EXPECT_EQ (r.sized (10, 20).is_merged (), false);
EXPECT_EQ (r.sized (db::Coord (10), db::Coord (20)).to_string (), "(-110,-120;-110,420;210,420;210,-120)");
EXPECT_EQ (r.sized (db::Coord (10), db::Coord (20)).is_box (), true);
EXPECT_EQ (r.sized (db::Coord (10), db::Coord (20)).is_merged (), false);
}
TEST(10a)
@ -1141,12 +1141,12 @@ TEST(27)
db::Region r;
r.insert (db::Box (db::Point (0, 0), db::Point (100, 200)));
EXPECT_EQ (r.sized (-10, -20).to_string (), "(10,20;10,180;90,180;90,20)");
EXPECT_EQ (r.sized (-50, -20).to_string (), "");
EXPECT_EQ (r.sized (-50, -100).to_string (), "");
EXPECT_EQ (r.sized (-55, -20).to_string (), "");
EXPECT_EQ (r.sized (-10, -105).to_string (), "");
EXPECT_EQ (r.sized (-55, -105).to_string (), "");
EXPECT_EQ (r.sized (db::Coord (-10), db::Coord (-20)).to_string (), "(10,20;10,180;90,180;90,20)");
EXPECT_EQ (r.sized (db::Coord (-50), db::Coord (-20)).to_string (), "");
EXPECT_EQ (r.sized (db::Coord (-50), db::Coord (-100)).to_string (), "");
EXPECT_EQ (r.sized (db::Coord (-55), db::Coord (-20)).to_string (), "");
EXPECT_EQ (r.sized (db::Coord (-10), db::Coord (-105)).to_string (), "");
EXPECT_EQ (r.sized (db::Coord (-55), db::Coord (-105)).to_string (), "");
}
TEST(28)
@ -1159,7 +1159,7 @@ TEST(28)
r2.insert (db::Box (db::Point (100, 100), db::Point (200, 300)));
EXPECT_EQ ((r1 & r2).to_string (), "");
EXPECT_EQ ((r1 & r2.sized (5, 5)).to_string (), "(95,95;95,200;100,200;100,95)");
EXPECT_EQ ((r1 & r2.sized (db::Coord (5), db::Coord (5))).to_string (), "(95,95;95,200;100,200;100,95)");
}
TEST(29)

View File

@ -184,7 +184,7 @@ TEST(10)
EXPECT_EQ (t.is_ortho (), true);
EXPECT_EQ (t.to_string (), recomposed (t).to_string ());
t = db::DCplxTrans (db::ICplxTrans (db::disp_trans<int> (db::Vector (100, -256))));
t = db::DCplxTrans (db::ICplxTrans (db::disp_trans<db::Coord> (db::Vector (100, -256))));
EXPECT_EQ (t.is_unity (), false);
EXPECT_EQ (t.to_string (), "r0 *1 100,-256");
EXPECT_EQ (t.is_ortho (), true);
@ -202,7 +202,7 @@ TEST(10)
EXPECT_EQ (t.to_string (), "r0 *1 -0.5,1.25");
EXPECT_EQ (t.to_string (), recomposed (t).to_string ());
t = db::DCplxTrans (db::DTrans (db::simple_trans<int> (db::FTrans::m135, db::Vector (128, -256))));
t = db::DCplxTrans (db::DTrans (db::simple_trans<db::Coord> (db::FTrans::m135, db::Vector (128, -256))));
EXPECT_EQ (t.is_unity (), false);
EXPECT_EQ (t.to_string (), "m135 *1 128,-256");
EXPECT_EQ (t.to_string (), recomposed (t).to_string ());

View File

@ -30,7 +30,7 @@ TEST(1)
std::string input = tl::testsrc ();
input += "/testdata/drc/drctest.gds";
std::string au = tl::testsrc ();
au += "/testdata/drc/drcBasicTests_au.gds";
au += "/testdata/drc/drcBasicTests_au.oas";
std::string output = this->tmp_file ("tmp.gds");

View File

@ -31,7 +31,7 @@ TEST(1)
rs += "/testdata/drc/drcSimpleTests_1.drc";
std::string au = tl::testsrc ();
au += "/testdata/drc/drcSimpleTests_au1.gds";
au += "/testdata/drc/drcSimpleTests_au1.oas";
std::string output = this->tmp_file ("tmp.gds");
@ -71,7 +71,7 @@ TEST(2)
input += "/testdata/drc/drctest.gds";
std::string au = tl::testsrc ();
au += "/testdata/drc/drcSimpleTests_au2.gds";
au += "/testdata/drc/drcSimpleTests_au2.oas";
std::string output = this->tmp_file ("tmp.gds");
@ -111,7 +111,7 @@ TEST(3)
input += "/testdata/drc/drctest.gds";
std::string au = tl::testsrc ();
au += "/testdata/drc/drcSimpleTests_au3.gds";
au += "/testdata/drc/drcSimpleTests_au3.oas";
std::string output = this->tmp_file ("tmp.gds");

View File

@ -36,7 +36,7 @@ void runtest (tl::TestBase *_this, int mode)
std::string au = tl::testsrc ();
au += "/testdata/drc/drcSuiteTests_au";
au += tl::to_string (mode);
au += ".gds";
au += ".oas";
std::string output = _this->tmp_file ("tmp.gds");

View File

@ -66,6 +66,10 @@ ArgType::to_string () const
s += "long long"; break;
case T_ulonglong:
s += "unsigned long long"; break;
#if defined(HAVE_64BIT_COORD)
case T_int128:
s += "int128"; break;
#endif
case T_double:
s += "double"; break;
case T_float:

View File

@ -193,25 +193,6 @@ static void _call_f_lexicalHandler_c0 (const qt_gsi::GenericMethod * /*decl*/, v
}
// (const QXmlInputSource &)
static void _init_f_parse_2852 (qt_gsi::GenericMethod *decl)
{
static gsi::ArgSpecBase argspec_0 ("input");
decl->add_arg<const QXmlInputSource & > (argspec_0);
decl->set_return<bool > ();
}
static void _call_f_parse_2852 (const qt_gsi::GenericMethod * /*decl*/, void *cls, gsi::SerialArgs &args, gsi::SerialArgs &ret)
{
__SUPPRESS_UNUSED_WARNING(args);
tl::Heap heap;
const QXmlInputSource &arg1 = args.read<const QXmlInputSource & > (heap);
ret.write<bool > ((bool)((QXmlSimpleReader *)cls)->parse (arg1));
}
// (const QXmlInputSource *)
@ -470,7 +451,6 @@ static gsi::Methods methods_QXmlSimpleReader () {
methods += new qt_gsi::GenericMethod ("hasFeature", "@brief Method (const QString &) const\nThis is a reimplementation of QXmlReader::hasFeature", true, &_init_f_hasFeature_c2025, &_call_f_hasFeature_c2025);
methods += new qt_gsi::GenericMethod ("hasProperty", "@brief Method (const QString &) const\nThis is a reimplementation of QXmlReader::hasProperty", true, &_init_f_hasProperty_c2025, &_call_f_hasProperty_c2025);
methods += new qt_gsi::GenericMethod (":lexicalHandler", "@brief Method () const\nThis is a reimplementation of QXmlReader::lexicalHandler", true, &_init_f_lexicalHandler_c0, &_call_f_lexicalHandler_c0);
methods += new qt_gsi::GenericMethod ("parse", "@brief Method (const QXmlInputSource &)\nThis is a reimplementation of QXmlReader::parse", false, &_init_f_parse_2852, &_call_f_parse_2852);
methods += new qt_gsi::GenericMethod ("parse", "@brief Method (const QXmlInputSource *)\nThis is a reimplementation of QXmlReader::parse", false, &_init_f_parse_2856, &_call_f_parse_2856);
methods += new qt_gsi::GenericMethod ("parse", "@brief Method (const QXmlInputSource *, bool)\n", false, &_init_f_parse_3612, &_call_f_parse_3612);
methods += new qt_gsi::GenericMethod ("parseContinue", "@brief Method bool QXmlSimpleReader::parseContinue()\n", false, &_init_f_parseContinue_0, &_call_f_parseContinue_0);
@ -644,21 +624,6 @@ public:
}
}
// [adaptor impl] bool QXmlSimpleReader::parse(const QXmlInputSource &input)
bool cbs_parse_2852_0(const QXmlInputSource &input)
{
return QXmlSimpleReader::parse(input);
}
virtual bool parse(const QXmlInputSource &input)
{
if (cb_parse_2852_0.can_issue()) {
return cb_parse_2852_0.issue<QXmlSimpleReader_Adaptor, bool, const QXmlInputSource &>(&QXmlSimpleReader_Adaptor::cbs_parse_2852_0, input);
} else {
return QXmlSimpleReader::parse(input);
}
}
// [adaptor impl] bool QXmlSimpleReader::parse(const QXmlInputSource *input)
bool cbs_parse_2856_0(const QXmlInputSource *input)
{
@ -848,7 +813,6 @@ public:
gsi::Callback cb_hasFeature_c2025_0;
gsi::Callback cb_hasProperty_c2025_0;
gsi::Callback cb_lexicalHandler_c0_0;
gsi::Callback cb_parse_2852_0;
gsi::Callback cb_parse_2856_0;
gsi::Callback cb_parse_3612_0;
gsi::Callback cb_parseContinue_0_0;
@ -1065,29 +1029,6 @@ static void _set_callback_cbs_lexicalHandler_c0_0 (void *cls, const gsi::Callbac
}
// bool QXmlSimpleReader::parse(const QXmlInputSource &input)
static void _init_cbs_parse_2852_0 (qt_gsi::GenericMethod *decl)
{
static gsi::ArgSpecBase argspec_0 ("input");
decl->add_arg<const QXmlInputSource & > (argspec_0);
decl->set_return<bool > ();
}
static void _call_cbs_parse_2852_0 (const qt_gsi::GenericMethod * /*decl*/, void *cls, gsi::SerialArgs &args, gsi::SerialArgs &ret)
{
__SUPPRESS_UNUSED_WARNING(args);
tl::Heap heap;
const QXmlInputSource &arg1 = args.read<const QXmlInputSource & > (heap);
ret.write<bool > ((bool)((QXmlSimpleReader_Adaptor *)cls)->cbs_parse_2852_0 (arg1));
}
static void _set_callback_cbs_parse_2852_0 (void *cls, const gsi::Callback &cb)
{
((QXmlSimpleReader_Adaptor *)cls)->cb_parse_2852_0 = cb;
}
// bool QXmlSimpleReader::parse(const QXmlInputSource *input)
static void _init_cbs_parse_2856_0 (qt_gsi::GenericMethod *decl)
@ -1406,8 +1347,6 @@ static gsi::Methods methods_QXmlSimpleReader_Adaptor () {
methods += new qt_gsi::GenericMethod ("hasProperty", "@brief Virtual method bool QXmlSimpleReader::hasProperty(const QString &name)\nThis method can be reimplemented in a derived class.", true, &_init_cbs_hasProperty_c2025_0, &_call_cbs_hasProperty_c2025_0, &_set_callback_cbs_hasProperty_c2025_0);
methods += new qt_gsi::GenericMethod ("lexicalHandler", "@hide", true, &_init_cbs_lexicalHandler_c0_0, &_call_cbs_lexicalHandler_c0_0);
methods += new qt_gsi::GenericMethod ("lexicalHandler", "@brief Virtual method QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler()\nThis method can be reimplemented in a derived class.", true, &_init_cbs_lexicalHandler_c0_0, &_call_cbs_lexicalHandler_c0_0, &_set_callback_cbs_lexicalHandler_c0_0);
methods += new qt_gsi::GenericMethod ("parse", "@hide", false, &_init_cbs_parse_2852_0, &_call_cbs_parse_2852_0);
methods += new qt_gsi::GenericMethod ("parse", "@brief Virtual method bool QXmlSimpleReader::parse(const QXmlInputSource &input)\nThis method can be reimplemented in a derived class.", false, &_init_cbs_parse_2852_0, &_call_cbs_parse_2852_0, &_set_callback_cbs_parse_2852_0);
methods += new qt_gsi::GenericMethod ("parse", "@hide", false, &_init_cbs_parse_2856_0, &_call_cbs_parse_2856_0);
methods += new qt_gsi::GenericMethod ("parse", "@brief Virtual method bool QXmlSimpleReader::parse(const QXmlInputSource *input)\nThis method can be reimplemented in a derived class.", false, &_init_cbs_parse_2856_0, &_call_cbs_parse_2856_0, &_set_callback_cbs_parse_2856_0);
methods += new qt_gsi::GenericMethod ("parse", "@hide", false, &_init_cbs_parse_3612_0, &_call_cbs_parse_3612_0);

View File

@ -193,25 +193,6 @@ static void _call_f_lexicalHandler_c0 (const qt_gsi::GenericMethod * /*decl*/, v
}
// (const QXmlInputSource &)
static void _init_f_parse_2852 (qt_gsi::GenericMethod *decl)
{
static gsi::ArgSpecBase argspec_0 ("input");
decl->add_arg<const QXmlInputSource & > (argspec_0);
decl->set_return<bool > ();
}
static void _call_f_parse_2852 (const qt_gsi::GenericMethod * /*decl*/, void *cls, gsi::SerialArgs &args, gsi::SerialArgs &ret)
{
__SUPPRESS_UNUSED_WARNING(args);
tl::Heap heap;
const QXmlInputSource &arg1 = args.read<const QXmlInputSource & > (heap);
ret.write<bool > ((bool)((QXmlSimpleReader *)cls)->parse (arg1));
}
// (const QXmlInputSource *)
@ -470,7 +451,6 @@ static gsi::Methods methods_QXmlSimpleReader () {
methods += new qt_gsi::GenericMethod ("hasFeature", "@brief Method (const QString &) const\nThis is a reimplementation of QXmlReader::hasFeature", true, &_init_f_hasFeature_c2025, &_call_f_hasFeature_c2025);
methods += new qt_gsi::GenericMethod ("hasProperty", "@brief Method (const QString &) const\nThis is a reimplementation of QXmlReader::hasProperty", true, &_init_f_hasProperty_c2025, &_call_f_hasProperty_c2025);
methods += new qt_gsi::GenericMethod (":lexicalHandler", "@brief Method () const\nThis is a reimplementation of QXmlReader::lexicalHandler", true, &_init_f_lexicalHandler_c0, &_call_f_lexicalHandler_c0);
methods += new qt_gsi::GenericMethod ("parse", "@brief Method (const QXmlInputSource &)\nThis is a reimplementation of QXmlReader::parse", false, &_init_f_parse_2852, &_call_f_parse_2852);
methods += new qt_gsi::GenericMethod ("parse", "@brief Method (const QXmlInputSource *)\nThis is a reimplementation of QXmlReader::parse", false, &_init_f_parse_2856, &_call_f_parse_2856);
methods += new qt_gsi::GenericMethod ("parse", "@brief Method (const QXmlInputSource *, bool)\n", false, &_init_f_parse_3612, &_call_f_parse_3612);
methods += new qt_gsi::GenericMethod ("parseContinue", "@brief Method bool QXmlSimpleReader::parseContinue()\n", false, &_init_f_parseContinue_0, &_call_f_parseContinue_0);
@ -644,21 +624,6 @@ public:
}
}
// [adaptor impl] bool QXmlSimpleReader::parse(const QXmlInputSource &input)
bool cbs_parse_2852_0(const QXmlInputSource &input)
{
return QXmlSimpleReader::parse(input);
}
virtual bool parse(const QXmlInputSource &input)
{
if (cb_parse_2852_0.can_issue()) {
return cb_parse_2852_0.issue<QXmlSimpleReader_Adaptor, bool, const QXmlInputSource &>(&QXmlSimpleReader_Adaptor::cbs_parse_2852_0, input);
} else {
return QXmlSimpleReader::parse(input);
}
}
// [adaptor impl] bool QXmlSimpleReader::parse(const QXmlInputSource *input)
bool cbs_parse_2856_0(const QXmlInputSource *input)
{
@ -848,7 +813,6 @@ public:
gsi::Callback cb_hasFeature_c2025_0;
gsi::Callback cb_hasProperty_c2025_0;
gsi::Callback cb_lexicalHandler_c0_0;
gsi::Callback cb_parse_2852_0;
gsi::Callback cb_parse_2856_0;
gsi::Callback cb_parse_3612_0;
gsi::Callback cb_parseContinue_0_0;
@ -1065,29 +1029,6 @@ static void _set_callback_cbs_lexicalHandler_c0_0 (void *cls, const gsi::Callbac
}
// bool QXmlSimpleReader::parse(const QXmlInputSource &input)
static void _init_cbs_parse_2852_0 (qt_gsi::GenericMethod *decl)
{
static gsi::ArgSpecBase argspec_0 ("input");
decl->add_arg<const QXmlInputSource & > (argspec_0);
decl->set_return<bool > ();
}
static void _call_cbs_parse_2852_0 (const qt_gsi::GenericMethod * /*decl*/, void *cls, gsi::SerialArgs &args, gsi::SerialArgs &ret)
{
__SUPPRESS_UNUSED_WARNING(args);
tl::Heap heap;
const QXmlInputSource &arg1 = args.read<const QXmlInputSource & > (heap);
ret.write<bool > ((bool)((QXmlSimpleReader_Adaptor *)cls)->cbs_parse_2852_0 (arg1));
}
static void _set_callback_cbs_parse_2852_0 (void *cls, const gsi::Callback &cb)
{
((QXmlSimpleReader_Adaptor *)cls)->cb_parse_2852_0 = cb;
}
// bool QXmlSimpleReader::parse(const QXmlInputSource *input)
static void _init_cbs_parse_2856_0 (qt_gsi::GenericMethod *decl)
@ -1406,8 +1347,6 @@ static gsi::Methods methods_QXmlSimpleReader_Adaptor () {
methods += new qt_gsi::GenericMethod ("hasProperty", "@brief Virtual method bool QXmlSimpleReader::hasProperty(const QString &name)\nThis method can be reimplemented in a derived class.", true, &_init_cbs_hasProperty_c2025_0, &_call_cbs_hasProperty_c2025_0, &_set_callback_cbs_hasProperty_c2025_0);
methods += new qt_gsi::GenericMethod ("lexicalHandler", "@hide", true, &_init_cbs_lexicalHandler_c0_0, &_call_cbs_lexicalHandler_c0_0);
methods += new qt_gsi::GenericMethod ("lexicalHandler", "@brief Virtual method QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler()\nThis method can be reimplemented in a derived class.", true, &_init_cbs_lexicalHandler_c0_0, &_call_cbs_lexicalHandler_c0_0, &_set_callback_cbs_lexicalHandler_c0_0);
methods += new qt_gsi::GenericMethod ("parse", "@hide", false, &_init_cbs_parse_2852_0, &_call_cbs_parse_2852_0);
methods += new qt_gsi::GenericMethod ("parse", "@brief Virtual method bool QXmlSimpleReader::parse(const QXmlInputSource &input)\nThis method can be reimplemented in a derived class.", false, &_init_cbs_parse_2852_0, &_call_cbs_parse_2852_0, &_set_callback_cbs_parse_2852_0);
methods += new qt_gsi::GenericMethod ("parse", "@hide", false, &_init_cbs_parse_2856_0, &_call_cbs_parse_2856_0);
methods += new qt_gsi::GenericMethod ("parse", "@brief Virtual method bool QXmlSimpleReader::parse(const QXmlInputSource *input)\nThis method can be reimplemented in a derived class.", false, &_init_cbs_parse_2856_0, &_call_cbs_parse_2856_0, &_set_callback_cbs_parse_2856_0);
methods += new qt_gsi::GenericMethod ("parse", "@hide", false, &_init_cbs_parse_3612_0, &_call_cbs_parse_3612_0);

View File

@ -577,6 +577,10 @@ type_to_s (const gsi::ArgType &a, bool linked, bool for_return)
s += "unsigned short"; break;
case gsi::T_int:
s += "int"; break;
#if defined(HAVE_64BIT_COORD)
case gsi::T_int128:
s += "int128"; break;
#endif
case gsi::T_uint:
s += "unsigned int"; break;
case gsi::T_long:

View File

@ -145,6 +145,10 @@ LayoutHandle::rename (const std::string &name, bool force) throw (tl::Exception)
tl::info << "Renamed layout from " << m_name << " to " << n;
}
if (find (m_name) == this) {
ms_dict.erase (m_name);
}
m_name = n;
ms_dict.insert (std::make_pair (n, this));
return;

View File

@ -42,7 +42,8 @@ SOURCES = \
tlWebDAV.cc \
tlArch.cc \
tlCommandLineParser.cc \
tlUnitTest.cc
tlUnitTest.cc \
tlInt128Support.cc
HEADERS = \
tlAlgorithm.h \
@ -90,7 +91,8 @@ HEADERS = \
tlWebDAV.h \
tlArch.h \
tlCommandLineParser.h \
tlUnitTest.h
tlUnitTest.h \
tlInt128Support.h
INCLUDEPATH =
DEPENDPATH =

View File

@ -0,0 +1,29 @@
/*
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
*/
#if defined(HAVE_64BIT_COORD)
#include "tlInt128Support.h"
// .. nothing yet ..
#endif

View File

@ -0,0 +1,58 @@
/*
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_tlInt128Support
#define HDR_tlInt128Support
#if defined(HAVE_64BIT_COORD)
#include "tlCommon.h"
#include "tlString.h"
#include <inttypes.h>
#include <ostream>
namespace std
{
#if !defined(__GLIBCXX_BITSIZE_INT_N_0) || __GLIBCXX_BITSIZE_INT_N_0 != 128
// Provide an implementation for abs(__int128_t) if there isn't one
inline __int128 abs (__int128 x)
{
return x < 0 ? -x : x;
}
#endif
// Provide ostream serialization for 128bit values
inline std::ostream &operator<< (std::ostream &os, __int128 x)
{
os << tl::to_string (x);
return os;
}
}
#endif
#endif

View File

@ -232,29 +232,52 @@ tl::to_string (const unsigned long long &d)
}
#if defined(HAVE_64BIT_COORD)
template <>
std::string
tl::to_string (const __int128 &d)
{
if (d < 0 ) {
return "-" + tl::to_string(static_cast<unsigned __int128>(-d));
return "-" + tl::to_string(static_cast<unsigned __int128> (-d));
} else {
return tl::to_string(static_cast<unsigned __int128>(d));
return tl::to_string(static_cast<unsigned __int128> (d));
}
}
template <>
std::string
tl::to_string (const unsigned __int128 &d)
tl::to_string (const unsigned __int128 &_x)
{
if (static_cast<uint64_t>(d) == d) {
return tl::to_string(static_cast<uint64_t>(d));
std::string r;
unsigned __int128 x = _x;
// this is the max. power of 10 that can be represented with __int128
unsigned __int128 m = (unsigned long long) 0x4b3b4ca85a86c47a;
m <<= 64;
m |= (unsigned long long) 0x98a224000000000;
if (x == 0) {
return "0";
}
std::ostringstream os;
os.imbue (c_locale);
os << "0x" << std::hex << static_cast<uint64_t> (d>>64) << static_cast<uint64_t> (d);
return os.str ();
bool first = true;
while (m > 1) {
int d = 0;
while (x >= m) {
d += 1;
x -= m;
}
if (d > 0 || !first) {
r += char ('0' + d);
first = false;
}
m /= 10;
}
r += char('0' + int(x));
return r;
}
#endif
template <>

View File

@ -27,6 +27,7 @@
#include "tlLog.h"
#include "tlException.h"
#include "tlString.h"
#include "tlInt128Support.h"
#include <string>
#include <vector>

View File

@ -0,0 +1,62 @@
/*
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
*/
#if defined(HAVE_64BIT_COORD)
#include "tlInt128Support.h"
#include "tlUnitTest.h"
#include <cstdio>
TEST(1)
{
EXPECT_EQ (tl::to_string (__int128 (0)), "0");
EXPECT_EQ (tl::to_string (__int128 (42)), "42");
EXPECT_EQ (tl::to_string (__int128 (-42)), "-42");
__int128 x = 1;
for (int i = 0; i < 30; ++i) {
x *= 10;
}
EXPECT_EQ (tl::to_string (x), "1000000000000000000000000000000");
EXPECT_EQ (tl::to_string (-x), "-1000000000000000000000000000000");
EXPECT_EQ (tl::to_string (x + 1), "1000000000000000000000000000001");
EXPECT_EQ (tl::to_string (x - 1), "999999999999999999999999999999");
}
TEST(2)
{
EXPECT_EQ (tl::to_string ((unsigned __int128) 0), "0");
EXPECT_EQ (tl::to_string ((unsigned __int128) 42), "42");
unsigned __int128 x = 1;
for (int i = 0; i < 30; ++i) {
x *= 10;
}
EXPECT_EQ (tl::to_string (x), "1000000000000000000000000000000");
EXPECT_EQ (tl::to_string (x + 1), "1000000000000000000000000000001");
EXPECT_EQ (tl::to_string (x - 1), "999999999999999999999999999999");
}
#endif

View File

@ -32,6 +32,7 @@ SOURCES = \
tlVariant.cc \
tlWebDAV.cc \
tlXMLParser.cc \
tlInt128Support.cc
INCLUDEPATH += $$TL_INC
DEPENDPATH += $$TL_INC

View File

@ -13,6 +13,7 @@ def run_testsuite(dm, ic, tiled = false)
c = input(3)
x = input(10)
y = input(11)
empty = input(1000)
h = {}
layers.each { |l| h[l] = true }
@ -123,6 +124,9 @@ def run_testsuite(dm, ic, tiled = false)
message "--- interacting, in, not_in #{lb}"
b.interacting(a).output(lb, dm)
b.not_interacting(a).output(lb, dm + 1)
b.interacting(empty).output(lb, dm + 2)
b.not_interacting(empty).output(lb, dm + 3)
b.interacting(a).in(b).output(lb + 1, dm)
(b|a).not_in(b).output(lb + 2, dm)
x.in(b).output(lb + 3, dm)
@ -132,21 +136,73 @@ def run_testsuite(dm, ic, tiled = false)
message "--- inside, outside, overlapping, interacting #{lb}"
b.inside(c).output(lb, dm)
b.not_inside(c).output(lb, dm + 1)
b.inside(empty).output(lb, dm + 2)
b.not_inside(empty).output(lb, dm + 3)
b.outside(c).output(lb + 1, dm)
b.not_outside(c).output(lb + 1, dm + 1)
b.outside(empty).output(lb + 1, dm + 2)
b.not_outside(empty).output(lb + 1, dm + 3)
b.overlapping(c).output(lb + 2, dm)
b.not_overlapping(c).output(lb + 2, dm + 1)
b.overlapping(empty).output(lb + 2, dm + 2)
b.not_overlapping(empty).output(lb + 2, dm + 3)
b.interacting(c).output(lb + 3, dm)
b.not_interacting(c).output(lb + 3, dm + 1)
b.interacting(empty).output(lb + 3, dm + 2)
b.not_interacting(empty).output(lb + 3, dm + 3)
bdup = b.dup
bdup.select_inside(c)
bdup.xor(b.inside(c)).output(lb + 4, dm)
bdup = b.dup
bdup.select_not_inside(c)
bdup.output(lb + 4, dm + 1)
bdup = b.dup
bdup.select_inside(empty)
bdup.output(lb + 4, dm + 2)
bdup = b.dup
bdup.select_not_inside(empty)
bdup.output(lb + 4, dm + 3)
bdup = b.dup
bdup.select_outside(c)
bdup.xor(b.outside(c)).output(lb + 5, dm)
bdup = b.dup
bdup.select_not_outside(c)
bdup.output(lb + 5, dm + 1)
bdup = b.dup
bdup.select_outside(empty)
bdup.output(lb + 5, dm + 2)
bdup = b.dup
bdup.select_not_outside(empty)
bdup.output(lb + 5, dm + 3)
bdup = b.dup
bdup.select_overlapping(c)
bdup.xor(b.overlapping(c)).output(lb + 6, dm)
bdup = b.dup
bdup.select_not_overlapping(c)
bdup.output(lb + 6, dm + 1)
bdup = b.dup
bdup.select_overlapping(empty)
bdup.output(lb + 6, dm + 2)
bdup = b.dup
bdup.select_not_overlapping(empty)
bdup.output(lb + 6, dm + 3)
bdup = b.dup
bdup.select_interacting(c)
bdup.xor(b.interacting(c)).output(lb + 7, dm)
bdup = b.dup
bdup.select_not_interacting(c)
bdup.output(lb + 7, dm + 1)
bdup = b.dup
bdup.select_interacting(empty)
bdup.output(lb + 7, dm + 2)
bdup = b.dup
bdup.select_not_interacting(empty)
bdup.output(lb + 7, dm + 3)
b.inside(empty).output(lb + 8, dm)
b.not_inside(empty).output(lb + 8, dm + 1)
b.outside(empty).output(lb + 9, dm)
b.not_outside(empty).output(lb + 9, dm + 1)
lb += 10
message "--- merge #{lb}"