// -*- C++ -*- // // This file is part of the Coriolis Software. // Copyright (c) SU 2021-2021, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | // | C o n f i g u r a t i o n D a t a - B a s e | // | | // | Author : Jean-Paul CHAPUT | // | E-mail : Jean-Paul.Chaput@lip6.fr | // | =============================================================== | // | C++ Module : "./PyHurricane3.cpp" | // +-----------------------------------------------------------------+ #include "hurricane/configuration/PyTypeManager.h" #include "hurricane/configuration/PyCollection.h" #include "hurricane/configuration/PyDbU.h" #include "hurricane/configuration/PyPoint.h" #include "hurricane/configuration/PyBox.h" #include "hurricane/configuration/PyDataBase.h" #include "hurricane/configuration/PyTechnology.h" #include "hurricane/configuration/PyLayerMask.h" #include "hurricane/configuration/PyLayer.h" #include "hurricane/configuration/PyBasicLayer.h" #include "hurricane/configuration/PyViaLayer.h" #include "hurricane/configuration/PyRegularLayer.h" #include "hurricane/configuration/PyDiffusionLayer.h" #include "hurricane/configuration/PyTransistorLayer.h" namespace Isobar3 { using std::cerr; using std::endl; using std::string; extern "C" { static PyMethodDef PyHurricane3_Methods[] = { {NULL, NULL, 0, NULL} /* sentinel */ }; static PyModuleDef PyHurricane3_ModuleDef = { PyModuleDef_HEAD_INIT , .m_name = "Hurricane3" , .m_doc = "Hurricane database." , .m_size = -1 , .m_methods = PyHurricane3_Methods }; PyMODINIT_FUNC PyInit_Hurricane3 ( void ) { cdebug_log(20,0) << "PyInit_Hurricane3() (Python3+template)" << endl; cerr << "PyInit_Hurricane3() (Python3+template)" << endl; PyObject* module = PyModule_Create( &PyHurricane3_ModuleDef ); if (not module) { cerr << "[ERROR]\n" << " Failed to initialize Hurricane3 module." << endl; return NULL; } PyObject* dictionnary = PyModule_GetDict( module ); try { PyTypeManagerNonDBo::create ( module , PyDbU_Methods , NULL , PyTypeManager::NoFlags ); PyTypeManagerNonDBo::create( module , PyPoint_Methods , NULL , PyTypeManager::NoFlags , "" , PyPoint_NEW , PyPoint_Init , tpRichCompareByValue ); PyTypeManagerNonDBo::create ( module , PyBox_Methods , NULL , PyTypeManager::NoFlags , "" , PyBox_NEW , PyBox_Init , tpRichCompareByValue ); PyTypeManagerDBo::create( module , PyDataBase_Methods , NULL , PyTypeManager::NoCppDelete ); PyTypeManagerDBo::create( module , PyTechnology_Methods , NULL , PyTypeManager::NoCppDelete ); PyTypeManagerNonDBo::create( module , PyLayerMask_Methods , NULL , PyTypeManager::NoFlags , "LayerMask" , PyLayerMask_NEW , PyLayerMask_Init , tpRichCompareLayerMask , &PyLayerMask_NumberMethods ); PyTypeManagerDBo::create( module , PyLayer_Methods , NULL , PyTypeManager::NoCppDelete ); PyTypeManagerDerivedDBo::create( module , PyBasicLayer_Methods , NULL , PyTypeManager::NoCppDelete ); PyTypeManagerDerivedDBo::create( module , PyViaLayer_Methods , NULL , PyTypeManager::NoCppDelete ); PyTypeManagerDerivedDBo::create( module , PyRegularLayer_Methods , NULL , PyTypeManager::NoCppDelete ); PyTypeManagerDerivedDBo::create( module , PyDiffusionLayer_Methods , NULL , PyTypeManager::NoCppDelete ); PyTypeManagerDerivedDBo::create( module , PyTransistorLayer_Methods , NULL , PyTypeManager::NoCppDelete ); PyTypeManagerCollection< Layer>::create( module, PyTypeManager::NoCppDelete ); PyTypeManagerCollection< BasicLayer>::create( module, PyTypeManager::NoCppDelete ); PyTypeManagerCollection< ViaLayer>::create( module, PyTypeManager::NoCppDelete ); PyTypeManagerCollection::create( module, PyTypeManager::NoCppDelete ); } catch ( const Warning& w ) { cerr << getString(w) << endl; throw; } catch ( const Error& e ) { cerr << getString(e) << endl; if (not e.where().empty()) cerr << e.where() << endl; throw; } catch ( const Bug& e ) { cerr << getString(e) << endl; throw; } catch ( const Exception& e ) { cerr << "\nUnknown Hurricane::Exception" << endl; throw; } catch ( const std::exception& e ) { cerr << e.what() << endl; throw; } catch ( ... ) { cerr << "Unmanaged exception, neither a Hurricane::Error nor a std::exception." << endl; throw; } cdebug_log(20,0) << "Hurricane3.so loaded " << (void*)&typeid(string) << " (" << demangle(typeid(string).name()) << ")" << endl; cerr << "Hurricane3.so loaded " << (void*)&typeid(string) << " (" << demangle(typeid(string).name()) << ")" << endl; return module; } } // extern "C". } // Isobar3 namespace.