For build under 32 bits, remove all use of long.
* Bug: In Hurricane::DbU, replace long by DbU::Unit (aka int64_t) in all remaining occurrences. * Change: In Hurricane::DbU::getValueString(), rewrite using ostringstream. * Change: In Hurricane, in PyHurricane.h, PyAny_AsLong<> template to convert any kind of Python integer into DbU, making sure we always use 64 bits integers (long long for 32 bits and long for 64 bits). PyDbU_FromLong<> template to peform the reverse, DbU to Python integer in 64 bits (either using PyLong_FromLong() or PyLong_FromLongLong()). * Bug: In Isobar, in PyArg_ParseTuple(), never use the "l" direct converter when reading a DbU. Instead read a PyObject then convert using PyAny_AsLong<>. This ensure to never do a truncature.
This commit is contained in:
parent
dde6e57521
commit
83382f252c
|
@ -39,6 +39,8 @@ namespace CRL {
|
|||
using Isobar::ParseOneArg;
|
||||
using Isobar::ParseTwoArg;
|
||||
using Isobar::__cs;
|
||||
using Isobar::PyAny_AsLong;
|
||||
using Isobar::PyDbU_FromLong;
|
||||
|
||||
|
||||
extern "C" {
|
||||
|
@ -69,23 +71,23 @@ extern "C" {
|
|||
HTRY
|
||||
char* name;
|
||||
char* pinLayerName;
|
||||
long pitch;
|
||||
long sliceHeight;
|
||||
long sliceStep;
|
||||
PyObject* pyPitch = NULL;
|
||||
PyObject* pySliceHeight = NULL;
|
||||
PyObject* pySliceStep = NULL;
|
||||
|
||||
if (PyArg_ParseTuple( args
|
||||
, "sslll:CellGauge.create"
|
||||
, "ssOOO:CellGauge.create"
|
||||
, &name
|
||||
, &pinLayerName
|
||||
, &pitch
|
||||
, &sliceHeight
|
||||
, &sliceStep
|
||||
, &pyPitch
|
||||
, &pySliceHeight
|
||||
, &pySliceStep
|
||||
)) {
|
||||
cg = CellGauge::create( name
|
||||
, pinLayerName
|
||||
, pitch
|
||||
, sliceHeight
|
||||
, sliceStep
|
||||
, PyAny_AsLong(pyPitch)
|
||||
, PyAny_AsLong(pySliceHeight)
|
||||
, PyAny_AsLong(pySliceStep)
|
||||
);
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "Bad parameters given to CellGauge.create()." );
|
||||
|
|
|
@ -43,6 +43,8 @@ namespace CRL {
|
|||
using Isobar::PyLayer;
|
||||
using Isobar::PyTypeLayer;
|
||||
using Isobar::PyLayer_LinkDerived;
|
||||
using Isobar::PyAny_AsLong;
|
||||
using Isobar::PyDbU_FromLong;
|
||||
|
||||
|
||||
extern "C" {
|
||||
|
@ -71,24 +73,24 @@ extern "C" {
|
|||
int type;
|
||||
int depth;
|
||||
double density;
|
||||
long offset;
|
||||
long pitch;
|
||||
long wireWidth;
|
||||
long viaWidth;
|
||||
long obsDw;
|
||||
PyObject* pyOffset = NULL;
|
||||
PyObject* pyPitch = NULL;
|
||||
PyObject* pyWireWidth = NULL;
|
||||
PyObject* pyViaWidth = NULL;
|
||||
PyObject* pyObsDw = NULL;
|
||||
|
||||
if (PyArg_ParseTuple( args
|
||||
, "OIIIdlllll:RoutingLayerGauge.create"
|
||||
, "OIIIdOOOOO:RoutingLayerGauge.create"
|
||||
, &pyLayer
|
||||
, &direction
|
||||
, &type
|
||||
, &depth
|
||||
, &density
|
||||
, &offset
|
||||
, &pitch
|
||||
, &wireWidth
|
||||
, &viaWidth
|
||||
, &obsDw
|
||||
, &pyOffset
|
||||
, &pyPitch
|
||||
, &pyWireWidth
|
||||
, &pyViaWidth
|
||||
, &pyObsDw
|
||||
)) {
|
||||
if ( not PyObject_IsInstance(pyLayer,(PyObject*)&PyTypeLayer) ) {
|
||||
PyErr_SetString ( ConstructorError, "Bad type for layer argument of RoutingLayerGauge.create()." );
|
||||
|
@ -114,11 +116,11 @@ extern "C" {
|
|||
, (Constant::LayerGaugeType)type
|
||||
, depth
|
||||
, density
|
||||
, offset
|
||||
, pitch
|
||||
, wireWidth
|
||||
, viaWidth
|
||||
, obsDw
|
||||
, PyAny_AsLong(pyOffset)
|
||||
, PyAny_AsLong(pyPitch)
|
||||
, PyAny_AsLong(pyWireWidth)
|
||||
, PyAny_AsLong(pyViaWidth)
|
||||
, PyAny_AsLong(pyObsDw)
|
||||
);
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "Bad parameters given to RoutingLayerGauge.create()." );
|
||||
|
@ -177,11 +179,11 @@ extern "C" {
|
|||
HTRY
|
||||
METHOD_HEAD("RoutingLayerGauge.getTrackNumber()")
|
||||
|
||||
long start = 0;
|
||||
long stop = 0;
|
||||
PyObject* pyStart = NULL;
|
||||
PyObject* pyStop = NULL;
|
||||
|
||||
if (PyArg_ParseTuple( args, "ll:RoutingLayerGauge.getTrackNumber", &start, &stop)) {
|
||||
trackNumber = rlg->getTrackNumber( (DbU::Unit)start, (DbU::Unit)stop );
|
||||
if (PyArg_ParseTuple( args, "OO:RoutingLayerGauge.getTrackNumber", &pyStart, &pyStop)) {
|
||||
trackNumber = rlg->getTrackNumber( PyAny_AsLong(pyStart), PyAny_AsLong(pyStop) );
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "Bad parameters given to RoutingLayerGauge.getTrackNumber()." );
|
||||
return NULL;
|
||||
|
@ -201,12 +203,12 @@ extern "C" {
|
|||
HTRY
|
||||
METHOD_HEAD("RoutingLayerGauge.getTrackIndex()")
|
||||
|
||||
long start = 0;
|
||||
long stop = 0;
|
||||
long position = 0;
|
||||
long mode = 0;
|
||||
PyObject* pyStart = NULL;
|
||||
PyObject* pyStop = NULL;
|
||||
PyObject* pyPosition = NULL;
|
||||
long mode = 0;
|
||||
|
||||
if (PyArg_ParseTuple( args, "lllI:RoutingLayerGauge.getTrackIndex", &start, &stop, &position, &mode)) {
|
||||
if (PyArg_ParseTuple( args, "OOOI:RoutingLayerGauge.getTrackIndex", &pyStart, &pyStop, &pyPosition, &mode)) {
|
||||
switch(mode) {
|
||||
case Constant::Superior:
|
||||
case Constant::Inferior:
|
||||
|
@ -216,9 +218,9 @@ extern "C" {
|
|||
PyErr_SetString ( ConstructorError, "RoutingLayerGauge.getTrackIndex(): The <mode> parameter has an invalid value ." );
|
||||
return NULL;
|
||||
}
|
||||
trackIndex = rlg->getTrackIndex( (DbU::Unit)start
|
||||
, (DbU::Unit)stop
|
||||
, (DbU::Unit)position
|
||||
trackIndex = rlg->getTrackIndex( PyAny_AsLong(pyStart)
|
||||
, PyAny_AsLong(pyStop)
|
||||
, PyAny_AsLong(pyPosition)
|
||||
, (unsigned int)mode );
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "Bad parameters given to RoutingLayerGauge.getTrackIndex()." );
|
||||
|
@ -239,18 +241,18 @@ extern "C" {
|
|||
HTRY
|
||||
METHOD_HEAD("RoutingLayerGauge.getTrackPosition()")
|
||||
|
||||
long start = 0;
|
||||
unsigned int depth = 0;
|
||||
PyObject* pyStart = NULL;
|
||||
unsigned int depth = 0;
|
||||
|
||||
if (PyArg_ParseTuple( args, "lI:RoutingLayerGauge.getTrackIndex", &start, &depth)) {
|
||||
trackPosition = rlg->getTrackNumber( (DbU::Unit)start , depth);
|
||||
if (PyArg_ParseTuple( args, "OI:RoutingLayerGauge.getTrackIndex", &pyStart, &depth)) {
|
||||
trackPosition = rlg->getTrackNumber( PyAny_AsLong(pyStart), depth);
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "Bad parameters given to RoutingLayerGauge.getTrackPosition()." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong((long)trackPosition);
|
||||
return PyDbU_FromLong(trackPosition);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -54,8 +54,8 @@ namespace Hurricane {
|
|||
DbU::UnitPower DbU::_stringModeUnitPower = DbU::Nano;
|
||||
DbU::Unit DbU::_symbolicSnapGridStep = DbU::fromLambda( 1.0);
|
||||
DbU::Unit DbU::_realSnapGridStep = DbU::fromGrid (10.0);
|
||||
const DbU::Unit DbU::Min = std::numeric_limits<long>::min();
|
||||
const DbU::Unit DbU::Max = std::numeric_limits<long>::max();
|
||||
const DbU::Unit DbU::Min = std::numeric_limits<DbU::Unit>::min();
|
||||
const DbU::Unit DbU::Max = std::numeric_limits<DbU::Unit>::max();
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
@ -301,17 +301,18 @@ namespace Hurricane {
|
|||
|
||||
string DbU::getValueString ( DbU::Unit u, int mode )
|
||||
{
|
||||
char buffer[1024];
|
||||
char unitPower = 'u';
|
||||
char unitSymbol = '\0';
|
||||
ostringstream os;
|
||||
char unitPower = ' ';
|
||||
char unitSymbol = 'u';
|
||||
|
||||
if ( _stringMode == Grid ) {
|
||||
unitPower = 'g';
|
||||
snprintf ( buffer, 1024, "%.1f", getGrid(u) );
|
||||
} else if ( _stringMode == Symbolic ) {
|
||||
unitPower = 'l';
|
||||
snprintf ( buffer, 1024, "%.1f", getLambda(u) );
|
||||
} else if ( _stringMode == Physical ) {
|
||||
os << fixed;
|
||||
if (_stringMode == Grid) {
|
||||
unitSymbol = 'g';
|
||||
os << setprecision(1) << toGrid(u);
|
||||
} else if (_stringMode == Symbolic) {
|
||||
unitSymbol = 'l';
|
||||
os << setprecision(1) << toLambda(u);
|
||||
} else if (_stringMode == Physical) {
|
||||
unitSymbol = 'm';
|
||||
switch ( _stringModeUnitPower ) {
|
||||
case Pico: unitPower = 'p'; break;
|
||||
|
@ -322,42 +323,46 @@ namespace Hurricane {
|
|||
case Kilo: unitPower = 'k'; break;
|
||||
default: unitPower = '?'; break;
|
||||
}
|
||||
snprintf ( buffer, 1024, "%.3f", getPhysical(u,_stringModeUnitPower) );
|
||||
os << setprecision(3) << toPhysical(u,_stringModeUnitPower);
|
||||
} else {
|
||||
if ( _stringMode != Db )
|
||||
if (_stringMode != Db)
|
||||
cerr << "[ERROR] Unknown Unit representation mode: " << _stringMode << endl;
|
||||
|
||||
snprintf ( buffer, 1024, "%ld", u );
|
||||
os << u;
|
||||
}
|
||||
|
||||
size_t length = strlen(buffer) - 1;
|
||||
if ( mode & SmartTruncate ) {
|
||||
for ( ; length > 0 ; length-- ) {
|
||||
if ( buffer[length] == '.' ) { length--; break; }
|
||||
if ( buffer[length] != '0' ) break;
|
||||
string s = os.str();
|
||||
if (mode & SmartTruncate) {
|
||||
|
||||
size_t dot = s.rfind( '.' );
|
||||
if (dot != string::npos) {
|
||||
size_t end = dot+1;
|
||||
for ( ; end < s.size() ; ++end ) if (s[end] != '0') break;
|
||||
if (end == s.size()) s.erase( dot );
|
||||
}
|
||||
}
|
||||
buffer[++length] = unitPower;
|
||||
if ( unitSymbol ) buffer[++length] = unitSymbol;
|
||||
buffer[++length] = '\0';
|
||||
|
||||
return buffer;
|
||||
if (unitPower != ' ') s += unitPower;
|
||||
s += unitSymbol;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
string DbU::getValueString ( double u, int mode )
|
||||
{
|
||||
char buffer[1024];
|
||||
char unitPower = 'u';
|
||||
char unitSymbol = '\0';
|
||||
ostringstream os;
|
||||
char unitPower = ' ';
|
||||
char unitSymbol = 'u';
|
||||
|
||||
if ( _stringMode == Grid ) {
|
||||
unitPower = 'g';
|
||||
snprintf ( buffer, 1024, "%.1f", getGrid(u) );
|
||||
} else if ( _stringMode == Symbolic ) {
|
||||
unitPower = 'l';
|
||||
snprintf ( buffer, 1024, "%.1f", getLambda(u) );
|
||||
} else if ( _stringMode == Physical ) {
|
||||
os << fixed;
|
||||
if (_stringMode == Grid) {
|
||||
unitSymbol = 'g';
|
||||
os << setprecision(1) << toGrid(u);
|
||||
} else if (_stringMode == Symbolic) {
|
||||
unitSymbol = 'l';
|
||||
os << setprecision(1) << toLambda(u);
|
||||
} else if (_stringMode == Physical) {
|
||||
unitSymbol = 'm';
|
||||
switch ( _stringModeUnitPower ) {
|
||||
case Pico: unitPower = 'p'; break;
|
||||
|
@ -368,26 +373,28 @@ namespace Hurricane {
|
|||
case Kilo: unitPower = 'k'; break;
|
||||
default: unitPower = '?'; break;
|
||||
}
|
||||
snprintf ( buffer, 1024, "%.3f", getPhysical(u,_stringModeUnitPower) );
|
||||
os << setprecision(3) << toPhysical(u,_stringModeUnitPower);
|
||||
} else {
|
||||
if ( _stringMode != Db )
|
||||
if (_stringMode != Db)
|
||||
cerr << "[ERROR] Unknown Unit representation mode: " << _stringMode << endl;
|
||||
|
||||
snprintf ( buffer, 1024, "%f", u );
|
||||
os << u;
|
||||
}
|
||||
|
||||
size_t length = strlen(buffer) - 1;
|
||||
if ( mode & SmartTruncate ) {
|
||||
for ( ; length > 0 ; length-- ) {
|
||||
if ( buffer[length] == '.' ) { length--; break; }
|
||||
if ( buffer[length] != '0' ) break;
|
||||
string s = os.str();
|
||||
if (mode & SmartTruncate) {
|
||||
size_t dot = s.rfind( '.' );
|
||||
if (dot != string::npos) {
|
||||
size_t end = dot+1;
|
||||
for ( ; end < s.size() ; ++end ) if (s[end] != '0') break;
|
||||
if (end == s.size()) s.erase( dot );
|
||||
}
|
||||
}
|
||||
buffer[++length] = unitPower;
|
||||
if ( unitSymbol ) buffer[++length] = unitSymbol;
|
||||
buffer[++length] = '\0';
|
||||
|
||||
return buffer;
|
||||
if (unitPower != ' ') s += unitPower;
|
||||
s += unitSymbol;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -71,12 +71,12 @@ namespace Hurricane {
|
|||
static void checkLambdaBound ( double value );
|
||||
static void checkPhysicalBound ( double value, UnitPower p );
|
||||
// User to DB Converters.
|
||||
static inline Unit fromDb ( long value );
|
||||
static inline Unit fromDb ( Unit value );
|
||||
static inline Unit fromGrid ( double value );
|
||||
static inline Unit fromLambda ( double value );
|
||||
static inline Unit fromPhysical ( double value, UnitPower p );
|
||||
// Old naming scheme (was not very clear).
|
||||
static inline Unit db ( long value );
|
||||
static inline Unit db ( Unit value );
|
||||
static inline Unit grid ( double value );
|
||||
static inline Unit lambda ( double value );
|
||||
static inline Unit physicalToDbu ( double value, UnitPower p );
|
||||
|
@ -103,7 +103,7 @@ namespace Hurricane {
|
|||
static DbU::Unit getOnCustomGrid ( DbU::Unit u, DbU::Unit step, SnapMode mode=Nearest );
|
||||
static inline DbU::Unit getOnPhysicalGrid ( DbU::Unit u, SnapMode mode=Superior );
|
||||
// Conversions.
|
||||
static inline long toDb ( Unit u );
|
||||
static inline Unit toDb ( Unit u );
|
||||
static inline double toGrid ( Unit u );
|
||||
static inline double toGrid ( double u );
|
||||
static inline double toLambda ( Unit u );
|
||||
|
@ -111,7 +111,7 @@ namespace Hurricane {
|
|||
static inline double toPhysical ( Unit u, UnitPower p );
|
||||
static inline double toPhysical ( double u, UnitPower p );
|
||||
// Old naming scheme (not very clear).
|
||||
static inline long getDb ( Unit u );
|
||||
static inline Unit getDb ( Unit u );
|
||||
static inline double getGrid ( Unit u );
|
||||
static inline double getGrid ( double u );
|
||||
static inline double getLambda ( Unit u );
|
||||
|
@ -150,11 +150,11 @@ namespace Hurricane {
|
|||
|
||||
// Inline Functions.
|
||||
// New converter naming scheme.
|
||||
inline DbU::Unit DbU::fromDb ( long value ) { return value; }
|
||||
inline DbU::Unit DbU::fromGrid ( double value ) { checkGridBound (value); return (long)rint( value/_resolution ); }
|
||||
inline DbU::Unit DbU::fromDb ( DbU::Unit value ) { return value; }
|
||||
inline DbU::Unit DbU::fromGrid ( double value ) { checkGridBound (value); return (Unit)rint( value/_resolution ); }
|
||||
inline DbU::Unit DbU::fromLambda ( double value ) { checkLambdaBound (value); return fromGrid(value*_gridsPerLambda); }
|
||||
inline DbU::Unit DbU::fromPhysical ( double value, UnitPower p ) { checkPhysicalBound(value,p); return fromGrid((value*getUnitPower(p))/_physicalsPerGrid); }
|
||||
inline long DbU::toDb ( DbU::Unit u ) { return u; }
|
||||
inline DbU::Unit DbU::toDb ( DbU::Unit u ) { return u; }
|
||||
inline double DbU::toGrid ( DbU::Unit u ) { return _resolution*(double)u; }
|
||||
inline double DbU::toGrid ( double u ) { return _resolution*u; }
|
||||
inline double DbU::toLambda ( DbU::Unit u ) { return toGrid(u)/_gridsPerLambda; }
|
||||
|
@ -163,11 +163,11 @@ namespace Hurricane {
|
|||
inline double DbU::toPhysical ( double u, UnitPower p ) { return (_physicalsPerGrid*_resolution*u)/getUnitPower(p); }
|
||||
|
||||
// Old converter naming scheme.
|
||||
inline DbU::Unit DbU::db ( long value ) { return fromDb(value); }
|
||||
inline DbU::Unit DbU::db ( DbU::Unit value ) { return fromDb(value); }
|
||||
inline DbU::Unit DbU::grid ( double value ) { return fromGrid(value); }
|
||||
inline DbU::Unit DbU::lambda ( double value ) { return fromLambda(value); }
|
||||
inline DbU::Unit DbU::physicalToDbu ( double value, UnitPower p ) { return fromPhysical(value,p); }
|
||||
inline long DbU::getDb ( DbU::Unit u ) { return toDb(u); }
|
||||
inline DbU::Unit DbU::getDb ( DbU::Unit u ) { return toDb(u); }
|
||||
inline double DbU::getGrid ( DbU::Unit u ) { return toGrid(u); }
|
||||
inline double DbU::getGrid ( double u ) { return toGrid(u); }
|
||||
inline double DbU::getLambda ( DbU::Unit u ) { return toLambda(u); }
|
||||
|
|
|
@ -52,21 +52,21 @@ extern "C" {
|
|||
BasicLayer* basicLayer = NULL;
|
||||
|
||||
HTRY
|
||||
PyObject* pyTechnology = NULL;
|
||||
char* name = NULL;
|
||||
PyObject* pyMaterial = NULL;
|
||||
unsigned int extractNumber = 0;
|
||||
long minimalSize = 0;
|
||||
long minimalSpacing = 0;
|
||||
PyObject* pyTechnology = NULL;
|
||||
char* name = NULL;
|
||||
PyObject* pyMaterial = NULL;
|
||||
unsigned int extractNumber = 0;
|
||||
PyObject* pyMinimalSize = NULL;
|
||||
PyObject* pyMinimalSpacing = NULL;
|
||||
|
||||
if (PyArg_ParseTuple( args
|
||||
, "OsO|Ill:BasicLayer.create"
|
||||
, "OsO|IOO:BasicLayer.create"
|
||||
, &pyTechnology
|
||||
, &name
|
||||
, &pyMaterial
|
||||
, &extractNumber
|
||||
, &minimalSize
|
||||
, &minimalSpacing
|
||||
, &pyMinimalSize
|
||||
, &pyMinimalSpacing
|
||||
)) {
|
||||
if (not IsPyTechnology(pyTechnology)) {
|
||||
PyErr_SetString ( ConstructorError, "Hurricane.create(): First argument is not of type Technology." );
|
||||
|
@ -81,8 +81,8 @@ extern "C" {
|
|||
, Name(name)
|
||||
, *PYMATERIAL_O(pyMaterial)
|
||||
, extractNumber
|
||||
, minimalSize
|
||||
, minimalSpacing
|
||||
, (pyMinimalSize) ? PyAny_AsLong(pyMinimalSize) : 0
|
||||
, (pyMinimalSpacing) ? PyAny_AsLong(pyMinimalSpacing) : 0
|
||||
);
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "Bad parameters given to BasicLayer.create()." );
|
||||
|
|
|
@ -368,11 +368,17 @@ extern "C" {
|
|||
|
||||
HTRY
|
||||
METHOD_HEAD ( "Box.translate()" )
|
||||
DbU::Unit dx=0, dy=0;
|
||||
if (PyArg_ParseTuple(args,"ll:Box.translate", &dx, &dy)) {
|
||||
box->translate(dx, dy);
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
__cs.init ("Box.translate");
|
||||
if (PyArg_ParseTuple(args,"O&O&:Box.translate", Converter, &arg0, Converter, &arg1)) {
|
||||
if (__cs.getObjectIds() == INTS2_ARG) box->translate( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "Box.translate(): Invalid type for parameter(s)." );
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Box.translate()" );
|
||||
PyErr_SetString ( ConstructorError, "Box.translate(): Invalid number of parameters." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
@ -432,9 +438,6 @@ extern "C" {
|
|||
// x=================================================================x
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// PyBox Object Definitions.
|
||||
|
||||
|
@ -442,14 +445,7 @@ extern "C" {
|
|||
|
||||
# endif // End of Shared Library Code Part.
|
||||
|
||||
|
||||
|
||||
|
||||
} // End of extern "C".
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} // End of Isobar namespace.
|
||||
|
||||
|
|
|
@ -103,11 +103,17 @@ extern "C" {
|
|||
|
||||
HTRY
|
||||
METHOD_HEAD ( "Contact.translate()" )
|
||||
DbU::Unit dx=0, dy=0;
|
||||
if (PyArg_ParseTuple(args,"ll:Contact.translate", &dx, &dy)) {
|
||||
contact->translate(dx, dy);
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
__cs.init ("Contact.translate");
|
||||
if (PyArg_ParseTuple(args,"O&O&:Contact.translate", Converter, &arg0, Converter, &arg1)) {
|
||||
if (__cs.getObjectIds() == INTS2_ARG) contact->translate( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "Contact.translate(): Invalid type for parameter(s)." );
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Contact.translate()" );
|
||||
PyErr_SetString ( ConstructorError, "Contact.translate(): Invalid number of parameters." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
|
|
@ -111,7 +111,7 @@ extern "C" {
|
|||
}
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong(result);
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -133,7 +133,7 @@ extern "C" {
|
|||
}
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong(result);
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -155,7 +155,7 @@ extern "C" {
|
|||
}
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong(result);
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -173,7 +173,7 @@ extern "C" {
|
|||
result = DbU::fromPhysical(value,(DbU::UnitPower)power);
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong(result);
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -282,37 +282,37 @@ extern "C" {
|
|||
|
||||
|
||||
extern PyObject* PyDbU_getRealSnapGridStep ( PyObject* )
|
||||
{ return PyLong_FromLong(DbU::getRealSnapGridStep()); }
|
||||
{ return PyDbU_FromLong(DbU::getRealSnapGridStep()); }
|
||||
|
||||
|
||||
extern PyObject* PyDbU_getOnRealSnapGrid ( PyObject* , PyObject* args )
|
||||
{
|
||||
long value = 0;
|
||||
int snap = DbU::Nearest;
|
||||
DbU::Unit result = 0;
|
||||
PyObject* value = NULL;
|
||||
int snap = DbU::Nearest;
|
||||
DbU::Unit result = 0;
|
||||
|
||||
HTRY
|
||||
if (not PyArg_ParseTuple(args,"l|i:DbU.getOnRealSnapGrid", &value, &snap) ) {
|
||||
if (not PyArg_ParseTuple(args,"O|i:DbU.getOnRealSnapGrid", &value, &snap) ) {
|
||||
PyErr_SetString ( ConstructorError, "DbU.getOnRealSnapGrid(): Invalid/bad type parameters ." );
|
||||
return NULL;
|
||||
}
|
||||
result = DbU::getOnRealSnapGrid(DbU::db(value),(DbU::SnapMode)snap);
|
||||
result = DbU::getOnRealSnapGrid(PyAny_AsLong(value),(DbU::SnapMode)snap);
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong(result);
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
extern PyObject* PyDbU_setRealSnapGridStep ( PyObject* , PyObject* args )
|
||||
{
|
||||
long step = 0;
|
||||
PyObject* step = NULL;
|
||||
|
||||
HTRY
|
||||
if (not PyArg_ParseTuple(args,"l:DbU.setRealSnapGridStep", &step) ) {
|
||||
if (not PyArg_ParseTuple(args,"O:DbU.setRealSnapGridStep", &step) ) {
|
||||
PyErr_SetString ( ConstructorError, "DbU.setRealSnapGridStep(): Invalid/bad type parameters ." );
|
||||
return NULL;
|
||||
}
|
||||
DbU::setRealSnapGridStep(DbU::db(step));
|
||||
DbU::setRealSnapGridStep(PyAny_AsLong(step));
|
||||
HCATCH
|
||||
|
||||
Py_RETURN_NONE;
|
||||
|
@ -320,37 +320,37 @@ extern "C" {
|
|||
|
||||
|
||||
extern PyObject* PyDbU_getSymbolicSnapGridStep ( PyObject* )
|
||||
{ return PyLong_FromLong(DbU::getSymbolicSnapGridStep()); }
|
||||
{ return PyDbU_FromLong(DbU::getSymbolicSnapGridStep()); }
|
||||
|
||||
|
||||
extern PyObject* PyDbU_getOnSymbolicSnapGrid ( PyObject* , PyObject* args )
|
||||
{
|
||||
long value = 0;
|
||||
PyObject* pyValue = NULL;
|
||||
int snap = DbU::Nearest;
|
||||
DbU::Unit result = 0;
|
||||
|
||||
HTRY
|
||||
if (not PyArg_ParseTuple(args,"l|i:DbU.getOnSymbolicSnapGrid", &value, &snap) ) {
|
||||
if (not PyArg_ParseTuple(args,"O|i:DbU.getOnSymbolicSnapGrid", &pyValue, &snap) ) {
|
||||
PyErr_SetString ( ConstructorError, "DbU.getOnSymbolicSnapGrid(): Invalid/bad type parameters ." );
|
||||
return NULL;
|
||||
}
|
||||
result = DbU::getOnSymbolicSnapGrid(DbU::db(value),(DbU::SnapMode)snap);
|
||||
result = DbU::getOnSymbolicSnapGrid(PyAny_AsLong(pyValue),(DbU::SnapMode)snap);
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong(result);
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
extern PyObject* PyDbU_setSymbolicSnapGridStep ( PyObject* , PyObject* args )
|
||||
{
|
||||
long step = 0;
|
||||
PyObject* step = NULL;
|
||||
|
||||
HTRY
|
||||
if (not PyArg_ParseTuple(args,"l:DbU.setSymbolicSnapGridStep", &step) ) {
|
||||
if (not PyArg_ParseTuple(args,"O:DbU.setSymbolicSnapGridStep", &step) ) {
|
||||
PyErr_SetString ( ConstructorError, "DbU.setSymbolicSnapGridStep(): Invalid/bad type parameters ." );
|
||||
return NULL;
|
||||
}
|
||||
DbU::setSymbolicSnapGridStep(DbU::db(step));
|
||||
DbU::setSymbolicSnapGridStep(PyAny_AsLong(step));
|
||||
HCATCH
|
||||
|
||||
Py_RETURN_NONE;
|
||||
|
@ -359,38 +359,38 @@ extern "C" {
|
|||
|
||||
extern PyObject* PyDbU_getOnCustomGrid ( PyObject* , PyObject* args )
|
||||
{
|
||||
long value = 0;
|
||||
long step = 1;
|
||||
int snap = DbU::Nearest;
|
||||
DbU::Unit result = 0;
|
||||
PyObject* pyValue = NULL;
|
||||
PyObject* pyStep = NULL;
|
||||
DbU::Unit result = 0;
|
||||
int snap = DbU::Nearest;
|
||||
|
||||
HTRY
|
||||
if (not PyArg_ParseTuple(args,"ll|i:DbU.getOnCustomGrid", &value, &step, &snap) ) {
|
||||
if (not PyArg_ParseTuple(args,"OO|i:DbU.getOnCustomGrid", &pyValue, &pyStep, &snap) ) {
|
||||
PyErr_SetString ( ConstructorError, "DbU.getOnCustomGrid(): Invalid/bad type parameters ." );
|
||||
return NULL;
|
||||
}
|
||||
result = DbU::getOnCustomGrid(DbU::db(value),DbU::db(step),(DbU::SnapMode)snap);
|
||||
result = DbU::getOnCustomGrid(PyAny_AsLong(pyValue),PyAny_AsLong(pyStep),(DbU::SnapMode)snap);
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong(result);
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
extern PyObject* PyDbU_getOnPhysicalGrid ( PyObject* , PyObject* args )
|
||||
{
|
||||
long value = 0;
|
||||
PyObject* pyValue = NULL;
|
||||
int snap = DbU::Superior;
|
||||
DbU::Unit result = 0;
|
||||
|
||||
HTRY
|
||||
if (not PyArg_ParseTuple(args,"l|i:DbU.getOnPhysicalGrid", &value, &snap) ) {
|
||||
if (not PyArg_ParseTuple(args,"O|i:DbU.getOnPhysicalGrid", &pyValue, &snap) ) {
|
||||
PyErr_SetString ( ConstructorError, "DbU.getOnPhysicalGrid(): Invalid/bad type parameters ." );
|
||||
return NULL;
|
||||
}
|
||||
result = DbU::getOnPhysicalGrid(DbU::db(value),(DbU::SnapMode)snap);
|
||||
result = DbU::getOnPhysicalGrid(PyAny_AsLong(pyValue),(DbU::SnapMode)snap);
|
||||
HCATCH
|
||||
|
||||
return PyLong_FromLong(result);
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -398,7 +398,7 @@ extern "C" {
|
|||
{
|
||||
PyObject* arg0;
|
||||
if ( not ParseOneArg( "DbU.toDb", args,INT_ARG, &arg0 ) ) return NULL;
|
||||
return PyLong_FromLong(DbU::toDb((DbU::Unit)PyAny_AsLong(arg0)));
|
||||
return PyDbU_FromLong(DbU::toDb((DbU::Unit)PyAny_AsLong(arg0)));
|
||||
}
|
||||
|
||||
|
||||
|
@ -429,16 +429,16 @@ extern "C" {
|
|||
|
||||
extern PyObject* PyDbU_getValueString ( PyObject* , PyObject* args )
|
||||
{
|
||||
long value = 0;
|
||||
int mode = DbU::SmartTruncate;
|
||||
string result = "";
|
||||
PyObject* value = NULL;
|
||||
int mode = DbU::SmartTruncate;
|
||||
string result = "";
|
||||
|
||||
HTRY
|
||||
if (not PyArg_ParseTuple(args,"l|i:DbU.getValueString", &value, &mode) ) {
|
||||
if (not PyArg_ParseTuple(args,"O|i:DbU.getValueString", &value, &mode) ) {
|
||||
PyErr_SetString ( ConstructorError, "DbU.getValueString(): Invalid/bad type parameters ." );
|
||||
return NULL;
|
||||
}
|
||||
result = DbU::getValueString(DbU::db(value),mode);
|
||||
result = DbU::getValueString(PyAny_AsLong(value),mode);
|
||||
HCATCH
|
||||
|
||||
return Py_BuildValue("s",result.c_str());
|
||||
|
|
|
@ -156,11 +156,17 @@ extern "C" {
|
|||
|
||||
HTRY
|
||||
METHOD_HEAD ( "Horizontal.translate()" )
|
||||
DbU::Unit dx=0, dy=0;
|
||||
if (PyArg_ParseTuple(args,"ll:Horizontal.translate", &dx, &dy)) {
|
||||
horizontal->translate(dx, dy);
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
__cs.init ("Horizontal.translate");
|
||||
if (PyArg_ParseTuple(args,"O&O&:Horizontal.translate", Converter, &arg0, Converter, &arg1)) {
|
||||
if (__cs.getObjectIds() == INTS2_ARG) horizontal->translate( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "Horizontal.translate(): Invalid type for parameter(s)." );
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Horizontal.translate()" );
|
||||
PyErr_SetString ( ConstructorError, "Horizontal.translate(): Invalid number of parameters." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
|
|
@ -129,26 +129,6 @@ using namespace Hurricane;
|
|||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
int PyAny_AsInt ( PyObject* object )
|
||||
{
|
||||
long value = 0;
|
||||
|
||||
if (PyObject_IsInstance(object,(PyObject*)&PyInt_Type )) value = PyInt_AsLong ( object );
|
||||
else if (PyObject_IsInstance(object,(PyObject*)&PyLong_Type)) value = PyLong_AsLong( object );
|
||||
return (int)value;
|
||||
}
|
||||
|
||||
|
||||
long PyAny_AsLong ( PyObject* object )
|
||||
{
|
||||
long value = 0;
|
||||
|
||||
if (PyObject_IsInstance(object,(PyObject*)&PyInt_Type )) value = PyInt_AsLong ( object );
|
||||
else if (PyObject_IsInstance(object,(PyObject*)&PyLong_Type)) value = PyLong_AsLong( object );
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Method : "::ConverterState::ObjectType::PyEqual ()"
|
||||
|
||||
|
|
|
@ -269,11 +269,16 @@ extern "C" {
|
|||
|
||||
HTRY
|
||||
METHOD_HEAD( "Interval.translate()" )
|
||||
DbU::Unit delta = 0;
|
||||
if (PyArg_ParseTuple(args,"l:Interval.translate", &delta)) {
|
||||
interval->translate(delta);
|
||||
PyObject* arg0 = NULL;
|
||||
__cs.init ("Contact.translate");
|
||||
if (PyArg_ParseTuple(args,"O&:Interval.translate", Converter, &arg0)) {
|
||||
if (__cs.getObjectIds() == INT_ARG) interval->translate( PyAny_AsLong(arg0) );
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "Interval.translate(): Invalid type for parameter." );
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString( ConstructorError, "invalid number of parameters for Interval.translate()" );
|
||||
PyErr_SetString ( ConstructorError, "Interval.translate(): Invalid number of parameters." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
|
|
@ -176,15 +176,15 @@ extern "C" {
|
|||
# define updatorFromDbu(FUNC_NAME,PY_SELF_TYPE,SELF_TYPE) \
|
||||
static PyObject* PY_SELF_TYPE##_##FUNC_NAME ( PY_SELF_TYPE* self, PyObject* args ) \
|
||||
{ \
|
||||
cdebug_log(20,0) << #PY_SELF_TYPE "_" #FUNC_NAME "()" << endl; \
|
||||
cdebug_log(20,0) << #PY_SELF_TYPE "_" #FUNC_NAME "()" << endl; \
|
||||
\
|
||||
HTRY \
|
||||
GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#SELF_TYPE"."#FUNC_NAME"()") \
|
||||
\
|
||||
long dimension = 0; \
|
||||
PyObject* pyDimension = NULL; \
|
||||
\
|
||||
if (PyArg_ParseTuple( args, "l:"#SELF_TYPE"."#FUNC_NAME"()", &dimension)) { \
|
||||
cobject->FUNC_NAME( dimension ); \
|
||||
if (PyArg_ParseTuple( args, "O:"#SELF_TYPE"."#FUNC_NAME"()", &pyDimension)) { \
|
||||
cobject->FUNC_NAME( PyAny_AsLong(pyDimension) ); \
|
||||
} else { \
|
||||
PyErr_SetString ( ConstructorError \
|
||||
, #SELF_TYPE"."#FUNC_NAME"(): Parameter is not of long (DbU) type" ); \
|
||||
|
@ -205,16 +205,16 @@ extern "C" {
|
|||
GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#SELF_TYPE"."#FUNC_NAME"()") \
|
||||
\
|
||||
PyObject* pyBasicLayer = NULL; \
|
||||
long dimension = 0; \
|
||||
PyObject* pyDimension = NULL; \
|
||||
\
|
||||
if (PyArg_ParseTuple( args, "Ol:"#SELF_TYPE"."#FUNC_NAME"()", &pyBasicLayer, &dimension)) { \
|
||||
if (PyArg_ParseTuple( args, "OO:"#SELF_TYPE"."#FUNC_NAME"()", &pyBasicLayer, &pyDimension)) { \
|
||||
BasicLayer* layer = PYBASICLAYER_O(pyBasicLayer); \
|
||||
if (layer == NULL) { \
|
||||
PyErr_SetString ( ConstructorError \
|
||||
, #SELF_TYPE"."#FUNC_NAME"(): First parameter is not of BasicLayer type" ); \
|
||||
return NULL; \
|
||||
} \
|
||||
cobject->FUNC_NAME( layer, dimension ); \
|
||||
cobject->FUNC_NAME( layer, PyAny_AsLong(pyDimension) ); \
|
||||
} else { \
|
||||
PyErr_SetString ( ConstructorError \
|
||||
, #SELF_TYPE"."#FUNC_NAME"(): Bad parameters types or numbers." ); \
|
||||
|
|
|
@ -133,11 +133,17 @@ extern "C" {
|
|||
|
||||
HTRY
|
||||
METHOD_HEAD ( "Pad.translate()" )
|
||||
DbU::Unit dx=0, dy=0;
|
||||
if (PyArg_ParseTuple(args,"ll:Pad.translate", &dx, &dy)) {
|
||||
pad->translate(dx, dy);
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
__cs.init ("Pad.translate");
|
||||
if (PyArg_ParseTuple(args,"O&O&:Pad.translate", Converter, &arg0, Converter, &arg1)) {
|
||||
if (__cs.getObjectIds() == INTS2_ARG) pad->translate( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "Pad.translate(): Invalid type for parameter(s)." );
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Pad.translate()" );
|
||||
PyErr_SetString ( ConstructorError, "Pad.translate(): Invalid number of parameters." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
|
|
@ -164,12 +164,17 @@ extern "C" {
|
|||
|
||||
HTRY
|
||||
METHOD_HEAD ( "RoutingPad.translate()" )
|
||||
DbU::Unit dx = 0;
|
||||
DbU::Unit dy = 0;
|
||||
if (PyArg_ParseTuple(args,"ll:RoutingPad.translate", &dx, &dy)) {
|
||||
rp->translate( dx, dy );
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
__cs.init ("RoutingPad.translate");
|
||||
if (PyArg_ParseTuple(args,"O&O&:RoutingPad.translate", Converter, &arg0, Converter, &arg1)) {
|
||||
if (__cs.getObjectIds() == INTS2_ARG) rp->translate( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "RoutingPad.translate(): Invalid type for parameter(s)." );
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString( ConstructorError, "invalid number of parameters for RoutingPad.translate()" );
|
||||
PyErr_SetString ( ConstructorError, "RoutingPad.translate(): Invalid number of parameters." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
@ -217,12 +222,17 @@ extern "C" {
|
|||
|
||||
HTRY
|
||||
METHOD_HEAD ( "RoutingPad.setOffset()" )
|
||||
DbU::Unit dx = 0;
|
||||
DbU::Unit dy = 0;
|
||||
if (PyArg_ParseTuple(args,"ll:RoutingPad.setOffset", &dx, &dy)) {
|
||||
rp->setOffset( dx, dy );
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
__cs.init ("RoutingPad.setOffset");
|
||||
if (PyArg_ParseTuple(args,"O&O&:RoutingPad.setOffset", Converter, &arg0, Converter, &arg1)) {
|
||||
if (__cs.getObjectIds() == INTS2_ARG) rp->setOffset( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "RoutingPad.setOffset(): Invalid type for parameter(s)." );
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString( ConstructorError, "invalid number of parameters for RoutingPad.setOffset()" );
|
||||
PyErr_SetString ( ConstructorError, "RoutingPad.setOffset(): Invalid number of parameters." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
|
|
@ -173,27 +173,25 @@ extern "C" {
|
|||
|
||||
METHOD_HEAD ( "Transformation.getX()" )
|
||||
|
||||
PyObject* arg0;
|
||||
PyObject* arg1;
|
||||
long result = 0;
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
DbU::Unit result = 0;
|
||||
|
||||
HTRY
|
||||
|
||||
__cs.init ("Transformation.getX");
|
||||
if ( ! PyArg_ParseTuple(args,"|O&O&:Transformation.getX",Converter,&arg0,Converter,&arg1) )
|
||||
return ( NULL );
|
||||
|
||||
if ( __cs.getObjectIds() == POINT_ARG ) { result = transf->getX ( *PYPOINT_O(arg0) ); }
|
||||
else if ( __cs.getObjectIds() == INTS2_ARG ) { result = transf->getX ( PyAny_AsLong(arg0)
|
||||
, PyAny_AsLong(arg1) ); }
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Tranformation.getX()." );
|
||||
return ( NULL );
|
||||
}
|
||||
|
||||
__cs.init ("Transformation.getX");
|
||||
if ( ! PyArg_ParseTuple(args,"|O&O&:Transformation.getX",Converter,&arg0,Converter,&arg1) )
|
||||
return NULL;
|
||||
|
||||
if ( __cs.getObjectIds() == POINT_ARG ) { result = transf->getX ( *PYPOINT_O(arg0) ); }
|
||||
else if ( __cs.getObjectIds() == INTS2_ARG ) { result = transf->getX ( PyAny_AsLong(arg0)
|
||||
, PyAny_AsLong(arg1) ); }
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Tranformation.getX()." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
||||
return ( (PyObject*)PyLong_FromLong(result) );
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -208,27 +206,25 @@ extern "C" {
|
|||
|
||||
METHOD_HEAD ( "Transformation.getY()" )
|
||||
|
||||
PyObject* arg0;
|
||||
PyObject* arg1;
|
||||
long result = 0;
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
DbU::Unit result = 0;
|
||||
|
||||
HTRY
|
||||
|
||||
__cs.init ("Transformation.getY");
|
||||
if ( ! PyArg_ParseTuple(args,"|O&O&:Transformation.getY",Converter,&arg0,Converter,&arg1) )
|
||||
return ( NULL );
|
||||
|
||||
if ( __cs.getObjectIds() == POINT_ARG ) { result = transf->getY ( *PYPOINT_O(arg0) ); }
|
||||
else if ( __cs.getObjectIds() == INTS2_ARG ) { result = transf->getY ( PyAny_AsLong(arg0)
|
||||
, PyAny_AsLong(arg1) ); }
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Tranformation.getY()." );
|
||||
return ( NULL );
|
||||
}
|
||||
|
||||
if ( ! PyArg_ParseTuple(args,"|O&O&:Transformation.getY",Converter,&arg0,Converter,&arg1) )
|
||||
return NULL;
|
||||
|
||||
if ( __cs.getObjectIds() == POINT_ARG ) { result = transf->getY ( *PYPOINT_O(arg0) ); }
|
||||
else if ( __cs.getObjectIds() == INTS2_ARG ) { result = transf->getY ( PyAny_AsLong(arg0)
|
||||
, PyAny_AsLong(arg1) ); }
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Tranformation.getY()." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
||||
return ( (PyObject*)PyLong_FromLong(result) );
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -243,18 +239,16 @@ extern "C" {
|
|||
|
||||
METHOD_HEAD ( "Transformation.getDx()" )
|
||||
|
||||
PyObject* arg0;
|
||||
PyObject* arg1;
|
||||
long result = 0;
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
DbU::Unit result = 0;
|
||||
|
||||
HTRY
|
||||
|
||||
if ( ! ParseTwoArg ( "Transformation.getDx", args, INTS2_ARG, &arg0, &arg1 ) ) return ( NULL );
|
||||
result = transf->getDx ( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
|
||||
if ( ! ParseTwoArg ( "Transformation.getDx", args, INTS2_ARG, &arg0, &arg1 ) ) return ( NULL );
|
||||
result = transf->getDx ( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
HCATCH
|
||||
|
||||
return ( (PyObject*)PyLong_FromLong(result) );
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
@ -269,18 +263,16 @@ extern "C" {
|
|||
|
||||
METHOD_HEAD ( "Transformation.getDy()" )
|
||||
|
||||
PyObject* arg0;
|
||||
PyObject* arg1;
|
||||
long result = 0;
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
DbU::Unit result = 0;
|
||||
|
||||
HTRY
|
||||
|
||||
if ( ! ParseTwoArg ( "Transformation.getDy", args, INTS2_ARG, &arg0, &arg1 ) ) return ( NULL );
|
||||
result = transf->getDy ( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
|
||||
if ( ! ParseTwoArg ( "Transformation.getDy", args, INTS2_ARG, &arg0, &arg1 ) ) return ( NULL );
|
||||
result = transf->getDy ( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
HCATCH
|
||||
|
||||
return ( (PyObject*)PyLong_FromLong(result) );
|
||||
return PyDbU_FromLong(result);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -153,11 +153,17 @@ extern "C" {
|
|||
|
||||
HTRY
|
||||
METHOD_HEAD ( "Vertical.translate()" )
|
||||
DbU::Unit dx=0, dy=0;
|
||||
if (PyArg_ParseTuple(args,"ll:Vertical.translate", &dx, &dy)) {
|
||||
vertical->translate(dx, dy);
|
||||
PyObject* arg0 = NULL;
|
||||
PyObject* arg1 = NULL;
|
||||
__cs.init ("Vertical.translate");
|
||||
if (PyArg_ParseTuple(args,"O&O&:Vertical.translate", Converter, &arg0, Converter, &arg1)) {
|
||||
if (__cs.getObjectIds() == INTS2_ARG) vertical->translate( PyAny_AsLong(arg0), PyAny_AsLong(arg1) );
|
||||
else {
|
||||
PyErr_SetString ( ConstructorError, "Vertical.translate(): Invalid type for parameter(s)." );
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
PyErr_SetString ( ConstructorError, "invalid number of parameters for Vertical.translate()" );
|
||||
PyErr_SetString ( ConstructorError, "Vertical.translate(): Invalid number of parameters." );
|
||||
return NULL;
|
||||
}
|
||||
HCATCH
|
||||
|
|
|
@ -31,12 +31,14 @@
|
|||
#include "hurricane/Bug.h"
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/Warning.h"
|
||||
#include "hurricane/DbU.h"
|
||||
#include "hurricane/isobar/ProxyProperty.h"
|
||||
|
||||
namespace Isobar {
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace std;
|
||||
using Hurricane::DbU;
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
@ -107,8 +109,48 @@ using namespace std;
|
|||
extern ConverterState __cs;
|
||||
extern int __objectOffset;
|
||||
|
||||
int PyAny_AsInt ( PyObject* object );
|
||||
long PyAny_AsLong ( PyObject* object );
|
||||
|
||||
inline int PyAny_AsInt ( PyObject* object )
|
||||
{
|
||||
long value = 0;
|
||||
if (PyObject_IsInstance(object,(PyObject*)&PyInt_Type )) value = PyInt_AsLong ( object );
|
||||
else if (PyObject_IsInstance(object,(PyObject*)&PyLong_Type)) value = PyLong_AsLong( object );
|
||||
return (int)value;
|
||||
}
|
||||
|
||||
|
||||
template< typename T = DbU::Unit, typename enable_if< is_same<T,long>::value, T >::type = 0 >
|
||||
inline T PyAny_AsLong ( PyObject* object )
|
||||
{
|
||||
T value = 0;
|
||||
if (PyObject_IsInstance(object,(PyObject*)&PyInt_Type )) value = PyInt_AsLong ( object );
|
||||
else if (PyObject_IsInstance(object,(PyObject*)&PyLong_Type)) value = PyLong_AsLong( object );
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
template< typename T = DbU::Unit, typename enable_if< is_same<T,long long>::value, T >::type = 0 >
|
||||
inline T PyAny_AsLong ( PyObject* object )
|
||||
{
|
||||
T value = 0;
|
||||
if (PyObject_IsInstance(object,(PyObject*)&PyInt_Type )) value = PyInt_AsLong ( object );
|
||||
else if (PyObject_IsInstance(object,(PyObject*)&PyLong_Type)) value = PyLong_AsLongLong( object );
|
||||
|
||||
if (value > numeric_limits<int>::max()) {
|
||||
throw Error( "PyAny_AsLong(): Suspiciously big int %s, db:%li"
|
||||
, DbU::getValueString(value).c_str(), value
|
||||
);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
template< typename T = DbU::Unit, typename enable_if< is_same<T,long>::value, T >::type = 0 >
|
||||
inline PyObject* PyDbU_FromLong ( T unit ) { return PyLong_FromLong( unit ); }
|
||||
|
||||
|
||||
template< typename T = DbU::Unit, typename enable_if< is_same<T,long long>::value, T >::type = 0 >
|
||||
inline PyObject* PyDbU_FromLong ( T unit ) { return PyLong_FromLongLong( unit ); }
|
||||
|
||||
|
||||
extern "C" {
|
||||
|
@ -316,7 +358,7 @@ extern "C" {
|
|||
static PyObject* PY_FUNC_NAME ( PY_SELF_TYPE *self, PyObject* args ) \
|
||||
{ \
|
||||
GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#FUNC_NAME"()") \
|
||||
return Py_BuildValue("l", cobject->FUNC_NAME()); \
|
||||
return Isobar::PyDbU_FromLong(cobject->FUNC_NAME()); \
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue