Project

General

Profile

Known Issues » History » Revision 2

Revision 1 (jun chen, 03/09/2025 11:59 PM) → Revision 2/3 (jun chen, 03/10/2025 12:01 AM)

# Known Issues 


 ## 1.the class has been export in a module but can not be found in anothor module? 

 There are two exported modules `xmath` and `layout` 
 * in xmath it exports a map like this:  
 ``` 
 py::bind—map<XMPowerTable2DMap>(m, "XMPowerTable2DMap") 
	 CM—SFRIAl.IZABl.F(XMPowerTable2DMap) 
	 ; 
 ``` 
 * under layout module, in XXX.py if a line wants to get XMPowerTable2DMap data, it will fail and dum p error like this: 

 The reason of failure is that XMPowerTable2DMap declared is to make the binding module-local by de fault, 
 ``` 
 py::bind—map<XMPowerTable2DMap>(m, "XMPowerTable2DMap", py::module—local(false)) 
	 CM—SFRIAl.IZABl.F(XMPowerTable2DMap) 
	 ; 
 ``` 
 Here `py::module—local(false)` `:ere py::module—local(false)` can make the binding module-global, module-global 
 and in other modules this XMPower Table2DMap data type can be used normally. 

 ## 2.zmq send/recv was interrupt by the system, how to avoid that? [sheng huang] 

 use `TEMP_FAILURE_RETRY` to call the send/recv ... 
 ![](clipboard-202503092346-pwsnv.png) 

 ## 3.Serialization of Class Hierarchy Objects 

 For derived classes, for serialization of base class and derived classes there are some key points we should take care of: 

 **a. ** a. The base class should be serialized by CM—SFRIAl.IZF if it has member parameters, or there is no t member parameter serialization can be left out;** out; ** 

 **b. ** b. For derived classes, in CM_SERIALIZE it must do CM_BASF_SERIALIZE for base class:** class: ** 
 ``` 
 CM_SERIALIZE () { 
 CM_BASF_SERIALIZE(base); //base has no member parameter, or use & 
                          // CM_BASF_SERIALIZE(base) when base has member parameter 
 ar & pl & ...; 
 } 
 ``` 
 ** c. in .cc file the macro BOOST_CLASS_EXPORT must be used if obllects of derived classes are to be s erialized using a pointer to their corresponding base class, ** 
 ``` 
	 BOOST—Cl.ASS—FXPORT(derived). 
 ``` 
 Now you can use pointer of base class to serialize derived class obllects correctly. 

 reference:https://theboostcpplibraries.com/boost.serialization-class-hierarchies 

 ## 4.How to do customer class/struct implicit convert 

 consider we need use struct MyId with a int member iid— as MyMap's 
 (denfine as std::unordered—map<MyId,int>) key word,  
 now we need to convert MyId to int, so we can easily use like this: 
 ``` 
	 import test 
	 mymap = test.MyMap() 
	 mymap[l] = l 
 ``` 

 a. Fxport customer class/struct MyId to python; 
 b. Define custom operator functions if needed; 
 c. use implicitly—convertible to do implicit convert. 


 here is example cpp code: 
 ``` 
 PYBINDll—MAKF—OPAff-F(MyMap); 
    py::class—<MyId>(m, "MyId").def(py::init<int>()).def("getid", &MyId::getid); 
   py::bind—map<MyMap>(m, "MyMap"); 
   // do implicit convert 
   py::implicitly—convertible<int, MyId>(); 
 } 
 ``` 

 more code detail in  

 attachment:"test.py" 
 attachment:"test.cpp" 

 ## 5.How to modify VCDYacc.yy VCDLex.ll 

 Refer to vcd/cpp/SConscript, you should not do any changes in VCDYacc.cc/VCDl.ex.cc, which is gener ated by bison/flex,  
 all changes should be in .yy/.ll, after you changed it, you should regenerate the cc file with the command in the SConscript 
 ![](clipboard-202503092356-j3cuh.png) 
 after compiling with the modified SConscript, you should update those VCDYacc.cc/VCDl.ex.cc in git, and then recover this file SConscript.