CMS 3D CMS Logo

Payload2XMLModule.h
Go to the documentation of this file.
1 #ifndef CondCore_Utilities_Payload2XMLModule_h
2 #define CondCore_Utilities_Payload2XMLModule_h
3 
4 #include <string>
5 #include <memory>
6 
7 #include <boost/python.hpp>
8 #include "boost/archive/xml_oarchive.hpp"
9 
11 
12 #define XML_CONVERTER_NAME( CLASS_NAME ) (std::string( #CLASS_NAME )+"2xml").c_str()
13 
14 #define PAYLOAD_2XML_MODULE( MODULE_NAME ) \
15  BOOST_PYTHON_MODULE( MODULE_NAME )
16 
17 #define PAYLOAD_2XML_CLASS( CLASS_NAME ) \
18  boost::python::class_< Payload2xml<CLASS_NAME> >( XML_CONVERTER_NAME( CLASS_NAME ), boost::python::init<>()) \
19  .def("write",&Payload2xml<CLASS_NAME>::write ) \
20  ;
21 
22 namespace { // Avoid cluttering the global namespace.
23 
24  template <typename PayloadType> class Payload2xml {
25  public:
26  Payload2xml(){
27  }
28  //
29  std::string write( const std::string &payloadData ){
30  // now to convert
31  std::unique_ptr< PayloadType > payload;
32  std::stringbuf sdataBuf;
33  sdataBuf.pubsetbuf( const_cast<char *> ( payloadData.c_str() ), payloadData.size() );
34 
35  std::istream inBuffer( &sdataBuf );
36  eos::portable_iarchive ia( inBuffer );
37  payload.reset( new PayloadType );
38  ia >> (*payload);
39 
40  // now we have the object in memory, convert it to xml in a string and return it
41  std::ostringstream outBuffer;
42  {
43  boost::archive::xml_oarchive xmlResult( outBuffer );
44  xmlResult << boost::serialization::make_nvp( "cmsCondPayload", *payload );
45  }
46  return outBuffer.str();
47  }
48  };
49 
50 } // end namespace
51 
52 #endif
def write(self, setup)