27# define LIBXML_ATTR_ALLOC_SIZE(x)
29#include <libxml/encoding.h>
30#include <libxml/xmlwriter.h>
33#define MY_ENCODING "ISO-8859-1"
91 std::vector< Root::TGoodRunsList >::const_iterator litr =
m_grlvec.begin();
92 for (
int i=0; litr!=
m_grlvec.end(); ++litr, ++i) {
116 m_logger <<
kINFO <<
"Output filename not set. Will be generated automatically." <<
GEndl;
126 writer = xmlNewTextWriterDoc(&doc, 0);
139 rc = xmlTextWriterEndDocument(
writer);
145 xmlFreeTextWriter(
writer);
163const std::vector<TString>&
209 buf = xmlBufferCreate();
217 writer = xmlNewTextWriterMemory(buf, 0);
230 rc = xmlTextWriterEndDocument(
writer);
236 xmlFreeTextWriter(
writer);
237 m_xmlstring = (
const char *) xmlBufferContent(buf);
261 rc = xmlTextWriterStartDocument(
writer, NULL, NULL, NULL);
280 rc = xmlTextWriterWriteComment(
writer, tmp);
285 if (tmp != NULL) xmlFree(tmp);
289 rc = xmlTextWriterStartElement(
writer, BAD_CAST
"LumiRangeCollection");
304 std::vector< Root::TGoodRunsList >::const_iterator litr =
m_grlvec.begin();
305 for (; litr!=
m_grlvec.end(); ++litr) {
316 rc = xmlTextWriterEndElement(
writer);
345 rc = xmlTextWriterStartElement(
writer, BAD_CAST
"NamedLumiRange");
356 if (
m_grl.GetVersion().Length()>0) {
360 if (!
m_grl.GetMetaData().empty()) {
361 std::map<TString,TString>::const_iterator mitr =
m_grl.GetMetaData().begin();
362 for (; mitr!=
m_grl.GetMetaData().end(); ++mitr)
366 std::map<Int_t,Root::TGoodRun>::const_iterator gitr =
m_grl.begin();
367 for (; gitr!=
m_grl.end(); ++gitr)
371 rc = xmlTextWriterEndElement(
writer);
396 rc = xmlTextWriterStartElement(
writer, BAD_CAST
"LumiBlockCollection");
406 std::vector<TLumiBlockRange>::const_iterator litr = goodrun.begin();
407 for (; litr!=goodrun.end(); ++litr)
408 if (!litr->IsEmpty()) {
409 if (litr->End()!=2147483647)
410 this->
WriteElement(
writer,
"LBRange",0,
"Start",Form(
"%d",litr->Begin()),
"End",Form(
"%d",litr->End()));
417 rc = xmlTextWriterEndElement(
writer);
436 const char* name,
const char* value,
437 const char* atr1,
const char* val1,
const char* atr2,
const char* val2)
443 rc = xmlTextWriterStartElement(
writer, BAD_CAST (name));
449 if ((atr1!=0) && (val1!=0)) {
450 rc = xmlTextWriterWriteAttribute(
writer, BAD_CAST (atr1), BAD_CAST (val1));
457 if ((atr2!=0) && (val2!=0)) {
458 rc = xmlTextWriterWriteAttribute(
writer, BAD_CAST (atr2), BAD_CAST (val2));
466 rc = xmlTextWriterWriteString(
writer, BAD_CAST (value));
473 rc = xmlTextWriterEndElement(
writer);
511 xmlCharEncodingHandlerPtr
handler;
516 handler = xmlFindCharEncodingHandler(encoding);
519 m_logger <<
kWARNING <<
"ConvertInput: no encoding handler found for " << (encoding ? encoding :
"") <<
GEndl;
523 size = (int) strlen(in) + 1;
526 xmlBufferPtr inBuf = xmlBufferCreateSize(size);
527 xmlBufferPtr outBuf = xmlBufferCreateSize(size * 2);
530 xmlBufferAdd(inBuf, (
const xmlChar *) in, temp);
531 ret = xmlCharEncInFunc(
handler, outBuf, inBuf);
537 out_size = xmlBufferLength(outBuf);
538 out = (
unsigned char *) xmlMalloc((
size_t) out_size + 1);
540 memcpy(out, xmlBufferContent(outBuf), out_size);
546 xmlBufferFree(inBuf);
547 xmlBufferFree(outBuf);
std::shared_ptr< HepMC3::Writer > writer
ClassImp(Root::TGoodRunsListWriter) using namespace std
xmlTextWriter * xmlTextWriterPtr
Int_t GetRunNumber() const
xmlChar * ConvertInput(const char *in, const char *encoding)
ConvertInput: @in: string in a given encoding @encoding: the encoding used.
const TGoodRunsList GetMergedGoodRunsList(const Root::BoolOperation &operation=OR) const
Bool_t WriteNamedLumiRange(xmlTextWriterPtr writer)
Bool_t WriteLumiRangeCollection(xmlTextWriterPtr writer)
const TString & GetXMLString()
std::vector< TString > m_xmlstringVec
Bool_t WriteElement(xmlTextWriterPtr writer, const char *name, const char *value=0, const char *atr1=0, const char *val1=0, const char *atr2=0, const char *val2=0)
const std::vector< TString > & GetXMLStrings()
Bool_t WriteLumiBlockCollection(xmlTextWriterPtr writer, const TGoodRun &goodrun)
void handler(int sig)
signal handler