Introduced namespace and removed class-prefixes to increase readability
authorBenedikt Tutzer <e1225461@student.tuwien.ac.at>
Thu, 28 Jun 2018 13:07:21 +0000 (15:07 +0200)
committerBenedikt Tutzer <e1225461@student.tuwien.ac.at>
Thu, 28 Jun 2018 13:07:21 +0000 (15:07 +0200)
kernel/python_wrappers.cc

index ae141c8087d8daae54fa95732a0e7fa11d6bc8d3..78011a8c547c5f958fc15fa7128bf4a8d7da9e2f 100644 (file)
 #include "yosys.h"
 #include <boost/python.hpp>
 
-struct YosysDesign;
-struct YosysModule;
-struct YosysCell;
-struct YosysWire;
-
-void yosys_setup()
-{
-       Yosys::log_streams.push_back(&std::cout);
-       Yosys::log_error_stderr = true;
-
-       Yosys::yosys_setup();
-       Yosys::yosys_banner();
-}
+namespace YOSYS_PYTHON {
 
-void run(std::string command)
-{
-       Yosys::run_pass(command);
-}
+       struct Design;
+       struct Module;
+       struct Cell;
+       struct Wire;
 
-void yosys_shutdown()
-{
-       Yosys::yosys_shutdown();
-}
+       void yosys_setup()
+       {
+               Yosys::log_streams.push_back(&std::cout);
+               Yosys::log_error_stderr = true;
 
-struct YosysCell
-{
-       Yosys::RTLIL::IdString name;
-       Yosys::RTLIL::IdString parent_name;
+               Yosys::yosys_setup();
+               Yosys::yosys_banner();
+       }
 
-       YosysCell(Yosys::RTLIL::Cell* ref)
+       void run(std::string command)
        {
-               this->name = ref->name;
-               this->parent_name = ref->module->name;
+               Yosys::run_pass(command);
        }
-       
-       Yosys::RTLIL::Cell* get_cpp_obj()
+
+       void yosys_shutdown()
        {
-               Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
-               if(active_design == NULL)
-                       return NULL;
-               if(active_design->modules_[this->parent_name] == NULL)
-                       return NULL;
-               return active_design->modules_[this->parent_name]->cells_[this->name];
+               Yosys::yosys_shutdown();
        }
-};
 
-std::ostream &operator<<(std::ostream &ostr, const YosysCell &cell)
-{
-       ostr << "Cell with name " << cell.name.c_str();
-       return ostr;
-}
-
-struct YosysWire
-{
-       Yosys::RTLIL::IdString name;
-       Yosys::RTLIL::IdString parent_name;
-
-       YosysWire(Yosys::RTLIL::Wire* ref)
+       struct Cell
        {
-               this->name = ref->name;
-               this->parent_name = ref->module->name;
-       }
+               Yosys::RTLIL::IdString name;
+               Yosys::RTLIL::IdString parent_name;
+
+               Cell(Yosys::RTLIL::Cell* ref)
+               {
+                       this->name = ref->name;
+                       this->parent_name = ref->module->name;
+               }
        
-       Yosys::RTLIL::Wire* get_cpp_obj()
+               Yosys::RTLIL::Cell* get_cpp_obj()
+               {
+                       Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
+                       if(active_design == NULL)
+                               return NULL;
+                       if(active_design->modules_[this->parent_name] == NULL)
+                               return NULL;
+                       return active_design->modules_[this->parent_name]->cells_[this->name];
+               }
+       };
+
+       std::ostream &operator<<(std::ostream &ostr, const Cell &cell)
        {
-               Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
-               if(active_design == NULL)
-                       return NULL;
-               if(active_design->modules_[this->parent_name] == NULL)
-                       return NULL;
-               return active_design->modules_[this->parent_name]->wires_[this->name];
+               ostr << "Cell with name " << cell.name.c_str();
+               return ostr;
        }
-};
 
-std::ostream &operator<<(std::ostream &ostr, const YosysWire &wire)
-{
-       ostr << "Wire with name " << wire.name.c_str();
-       return ostr;
-}
+       struct Wire
+       {
+               Yosys::RTLIL::IdString name;
+               Yosys::RTLIL::IdString parent_name;
 
-struct YosysModule
-{
-       Yosys::RTLIL::IdString name;
-       unsigned int parent_hashid;
+               Wire(Yosys::RTLIL::Wire* ref)
+               {
+                       this->name = ref->name;
+                       this->parent_name = ref->module->name;
+               }
+       
+               Yosys::RTLIL::Wire* get_cpp_obj()
+               {
+                       Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
+                       if(active_design == NULL)
+                               return NULL;
+                       if(active_design->modules_[this->parent_name] == NULL)
+                               return NULL;
+                       return active_design->modules_[this->parent_name]->wires_[this->name];
+               }
+       };
 
-       YosysModule(Yosys::RTLIL::Module* ref)
+       std::ostream &operator<<(std::ostream &ostr, const Wire &wire)
        {
-               this->name = ref->name;
-               this->parent_hashid = ref->design->hashidx_;
+               ostr << "Wire with name " << wire.name.c_str();
+               return ostr;
        }
 
-       Yosys::RTLIL::Module* get_cpp_obj()
+       struct Module
        {
-               Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
-               if(active_design == NULL)
-                       return NULL;
-               if(active_design->hashidx_ != this->parent_hashid)
-                       printf("Somehow the active design changed!\n");
-               return active_design->modules_[this->name];
-       }
+               Yosys::RTLIL::IdString name;
+               unsigned int parent_hashid;
 
-       boost::python::list get_cells()
-       {
-               Yosys::RTLIL::Module* cpp_mod = this->get_cpp_obj();
-               boost::python::list result;
-               if(cpp_mod == NULL)
-                       return result;
-               for(auto &cell_it : cpp_mod->cells_)
+               Module(Yosys::RTLIL::Module* ref)
                {
-                       result.append(new YosysCell(cell_it.second));
+                       this->name = ref->name;
+                       this->parent_hashid = ref->design->hashidx_;
                }
-               return result;
-       }
 
-       boost::python::list get_wires()
-       {
-               Yosys::RTLIL::Module* cpp_mod = this->get_cpp_obj();
-               boost::python::list result;
-               if(cpp_mod == NULL)
-                       return result;
-               for(auto &wire_it : cpp_mod->wires_)
+               Yosys::RTLIL::Module* get_cpp_obj()
                {
-                       result.append(new YosysWire(wire_it.second));
+                       Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
+                       if(active_design == NULL)
+                               return NULL;
+                       if(active_design->hashidx_ != this->parent_hashid)
+                               printf("Somehow the active design changed!\n");
+                       return active_design->modules_[this->name];
                }
-               return result;
-       }
-};
 
-std::ostream &operator<<(std::ostream &ostr, const YosysModule &module)
-{
-       ostr << "Module with name " << module.name.c_str();
-       return ostr;
-}
+               boost::python::list get_cells()
+               {
+                       Yosys::RTLIL::Module* cpp_mod = this->get_cpp_obj();
+                       boost::python::list result;
+                       if(cpp_mod == NULL)
+                               return result;
+                       for(auto &cell_it : cpp_mod->cells_)
+                       {
+                               result.append(new Cell(cell_it.second));
+                       }
+                       return result;
+               }
 
-struct YosysDesign
-{
-       unsigned int hashid;
+               boost::python::list get_wires()
+               {
+                       Yosys::RTLIL::Module* cpp_mod = this->get_cpp_obj();
+                       boost::python::list result;
+                       if(cpp_mod == NULL)
+                               return result;
+                       for(auto &wire_it : cpp_mod->wires_)
+                       {
+                               result.append(new Wire(wire_it.second));
+                       }
+                       return result;
+               }
+       };
 
-       YosysDesign(unsigned int hashid)
+       std::ostream &operator<<(std::ostream &ostr, const Module &module)
        {
-               this->hashid = hashid;
+               ostr << "Module with name " << module.name.c_str();
+               return ostr;
        }
 
-       YosysDesign()
+       struct Design
        {
-               Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
-               if(active_design != NULL)
+               unsigned int hashid;
+
+               Design(unsigned int hashid)
                {
-                       printf("design is not null and has id %u\n", active_design->hashidx_);
-                       this->hashid = active_design->hashidx_;
+                       this->hashid = hashid;
                }
-       }
 
-       boost::python::list get_modules()
-       {
-               Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
-               boost::python::list result;
-               if(active_design == NULL)
-                       return result;
-               for(auto &mod_it : active_design->modules_)
+               Design()
                {
-                       result.append(new YosysModule(mod_it.second));
+                       Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
+                       if(active_design != NULL)
+                       {
+                               printf("design is not null and has id %u\n", active_design->hashidx_);
+                               this->hashid = active_design->hashidx_;
+                       }
                }
-               return result;
-       }
-};
 
-std::ostream &operator<<(std::ostream &ostr, const YosysDesign &design)
-{
-       ostr << "Design with id " << design.hashid;
-       return ostr;
-}
-
-BOOST_PYTHON_MODULE(libyosys)
-{
-       using namespace boost::python;
-
-       class_<YosysDesign>("YosysDesign", init<unsigned int>())
-               .def(init<>())
-               .def("get_modules", &YosysDesign::get_modules)
-               ;
-
-       class_<YosysModule>("YosysModule", no_init)
-               .def(boost::python::self_ns::str(boost::python::self_ns::self))
-               .def(boost::python::self_ns::repr(boost::python::self_ns::self))
-               .def("get_cells", &YosysModule::get_cells)
-               .def("get_wires", &YosysModule::get_wires)
-               ;
-
-       class_<YosysCell>("YosysCell", no_init)
-               .def(boost::python::self_ns::str(boost::python::self_ns::self))
-               .def(boost::python::self_ns::repr(boost::python::self_ns::self))
-               ;
+               boost::python::list get_modules()
+               {
+                       Yosys::RTLIL::Design* active_design = Yosys::yosys_get_design();
+                       boost::python::list result;
+                       if(active_design == NULL)
+                               return result;
+                       for(auto &mod_it : active_design->modules_)
+                       {
+                               result.append(new Module(mod_it.second));
+                       }
+                       return result;
+               }
+       };
 
-       class_<YosysWire>("YosysWire", no_init)
-               .def(boost::python::self_ns::str(boost::python::self_ns::self))
-               .def(boost::python::self_ns::repr(boost::python::self_ns::self))
-               ;
+       std::ostream &operator<<(std::ostream &ostr, const Design &design)
+       {
+               ostr << "Design with id " << design.hashid;
+               return ostr;
+       }
 
+       BOOST_PYTHON_MODULE(libyosys)
+       {
+               using namespace boost::python;
+
+               class_<Design>("Design", init<unsigned int>())
+                       .def(init<>())
+                       .def("get_modules", &Design::get_modules)
+                       ;
+
+               class_<Module>("Module", no_init)
+                       .def(boost::python::self_ns::str(boost::python::self_ns::self))
+                       .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       .def("get_cells", &Module::get_cells)
+                       .def("get_wires", &Module::get_wires)
+                       ;
+
+               class_<Cell>("Cell", no_init)
+                       .def(boost::python::self_ns::str(boost::python::self_ns::self))
+                       .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       ;
+
+               class_<Wire>("Wire", no_init)
+                       .def(boost::python::self_ns::str(boost::python::self_ns::self))
+                       .def(boost::python::self_ns::repr(boost::python::self_ns::self))
+                       ;
+
+
+               def("yosys_setup",yosys_setup);
+               def("run",run);
+               def("yosys_shutdown",yosys_shutdown);
+       }
 
-       def("yosys_setup",yosys_setup);
-       def("run",run);
-       def("yosys_shutdown",yosys_shutdown);
 }
-
 #endif
-