From 6b56da60384f18b04194ea54d23af27643d27ae5 Mon Sep 17 00:00:00 2001 From: Peter Van Gemmeren <peter.van.gemmeren@cern.ch> Date: Fri, 20 May 2016 20:51:54 +0200 Subject: [PATCH] DataHeaderCnv_p5 contain DataHeaderForm by pointer, rather than copy (PersistentDataModelTPCnv-00-02-11) * src/DataHeaderCnv_p5: Contain DataHeaderForm by pointer, rather than copy. * tag PersistentDataModelTPCnv-00-02-11 Former-commit-id: 27c5c2972b0a0c99a80fc689c22e5c60c283ddf7 --- .../PersistentDataModelTPCnv/DataHeader_p5.h | 6 +- .../src/DataHeaderCnv_p5.cxx | 63 ++++++++++--------- .../src/DataHeader_p5.cxx | 46 +++++++------- 3 files changed, 61 insertions(+), 54 deletions(-) diff --git a/Database/PersistentDataModelTPCnv/PersistentDataModelTPCnv/DataHeader_p5.h b/Database/PersistentDataModelTPCnv/PersistentDataModelTPCnv/DataHeader_p5.h index 79ef61e44c90..c54bc8a6d104 100755 --- a/Database/PersistentDataModelTPCnv/PersistentDataModelTPCnv/DataHeader_p5.h +++ b/Database/PersistentDataModelTPCnv/PersistentDataModelTPCnv/DataHeader_p5.h @@ -83,15 +83,15 @@ public: // Constructor and Destructor friend class DataHeaderCnv_p5; const std::vector<DataHeaderElement_p5>& elements() const; - const DataHeaderForm_p5& dhForm() const; - void setDhForm(const DataHeaderForm_p5& form); + const DataHeaderForm_p5* dhForm() const; + void setDhForm(DataHeaderForm_p5* form); const std::string& dhFormToken() const; void setDhFormToken(const std::string& formToken); const std::string& dhFormMdx() const; private: std::vector<DataHeaderElement_p5> m_dataHeader; - DataHeaderForm_p5 m_dhForm; + DataHeaderForm_p5* m_dhForm; std::string m_dhFormToken; std::string m_dhFormMdx; }; diff --git a/Database/PersistentDataModelTPCnv/src/DataHeaderCnv_p5.cxx b/Database/PersistentDataModelTPCnv/src/DataHeaderCnv_p5.cxx index 0efb9ab70cf0..9e2bfb98d926 100755 --- a/Database/PersistentDataModelTPCnv/src/DataHeaderCnv_p5.cxx +++ b/Database/PersistentDataModelTPCnv/src/DataHeaderCnv_p5.cxx @@ -210,51 +210,56 @@ DataHeaderCnv_p5::DataHeaderCnv_p5() {} DataHeaderCnv_p5::~DataHeaderCnv_p5() {} //______________________________________________________________________________ void DataHeaderCnv_p5::persToTrans(const DataHeader_p5* pers, DataHeader* trans) { - pers->m_dhForm.start(); - const unsigned int provSize = pers->m_dhForm.params()[0]; - trans->m_inputDataHeader.resize(provSize); - std::vector<DataHeaderElement>::iterator it = trans->m_inputDataHeader.begin(); - std::vector<DataHeaderElement_p5>::const_iterator pit = pers->m_dataHeader.begin(); - for (unsigned int i = 0U; i < provSize; i++, it++, pit++) { - pers->m_dhForm.next(); - m_elemCnv.persToTrans(&(*pit), &(*it), pers->m_dhForm); - } - trans->m_dataHeader.resize(pers->m_dataHeader.size() - provSize); - it = trans->m_dataHeader.begin(); - for (std::vector<DataHeaderElement_p5>::const_iterator last = pers->m_dataHeader.end(); - pit != last; it++, pit++) { - pers->m_dhForm.next(); - m_elemCnv.persToTrans(&(*pit), &(*it), pers->m_dhForm); + if (pers->m_dhForm) { + pers->m_dhForm->start(); + const unsigned int provSize = pers->m_dhForm->params()[0]; + trans->m_inputDataHeader.resize(provSize); + std::vector<DataHeaderElement>::iterator it = trans->m_inputDataHeader.begin(); + std::vector<DataHeaderElement_p5>::const_iterator pit = pers->m_dataHeader.begin(); + for (unsigned int i = 0U; i < provSize; i++, it++, pit++) { + pers->m_dhForm->next(); + m_elemCnv.persToTrans(&(*pit), &(*it), *pers->m_dhForm); + } + trans->m_dataHeader.resize(pers->m_dataHeader.size() - provSize); + it = trans->m_dataHeader.begin(); + for (std::vector<DataHeaderElement_p5>::const_iterator last = pers->m_dataHeader.end(); + pit != last; it++, pit++) { + pers->m_dhForm->next(); + m_elemCnv.persToTrans(&(*pit), &(*it), *pers->m_dhForm); + } } } //______________________________________________________________________________ void DataHeaderCnv_p5::transToPers(const DataHeader* trans, DataHeader_p5* pers) { + delete pers->m_dhForm; pers->m_dhForm = new DataHeaderForm_p5; const unsigned int provSize = trans->m_inputDataHeader.size(); pers->m_dataHeader.resize(provSize + trans->m_dataHeader.size()); - pers->m_dhForm.resize(provSize + trans->m_dataHeader.size() + 2); - pers->m_dhForm.start(); - pers->m_dhForm.insertParam(provSize); + pers->m_dhForm->resize(provSize + trans->m_dataHeader.size() + 2); + pers->m_dhForm->start(); + pers->m_dhForm->insertParam(provSize); std::vector<DataHeaderElement_p5>::iterator pit = pers->m_dataHeader.begin(); for (std::vector<DataHeaderElement>::const_iterator it = trans->m_inputDataHeader.begin(), last = trans->m_inputDataHeader.end(); it != last; it++, pit++) { - pers->m_dhForm.next(); - m_elemCnv.transToPers(&(*it), &(*pit), pers->m_dhForm); + pers->m_dhForm->next(); + m_elemCnv.transToPers(&(*it), &(*pit), *pers->m_dhForm); } for (std::vector<DataHeaderElement>::const_iterator it = trans->m_dataHeader.begin(), last = trans->m_dataHeader.end(); it != last; it++, pit++) { - pers->m_dhForm.next(); - m_elemCnv.transToPers(&(*it), &(*pit), pers->m_dhForm); + pers->m_dhForm->next(); + m_elemCnv.transToPers(&(*it), &(*pit), *pers->m_dhForm); } } //______________________________________________________________________________ void DataHeaderCnv_p5::insertDHRef(DataHeader_p5* pers, const std::string& key, const std::string& strToken) { - Token* token = new Token; - token->fromString(strToken); - DataHeaderElement tEle(ClassID_traits<DataHeader>::ID(), key, token); - DataHeaderElement_p5 pEle; - pers->m_dhForm.next(); - m_elemCnv.transToPers(&tEle, &pEle, pers->m_dhForm); - pers->m_dataHeader.push_back(pEle); + if (pers->m_dhForm) { + Token* token = new Token; + token->fromString(strToken); + DataHeaderElement tEle(ClassID_traits<DataHeader>::ID(), key, token); + DataHeaderElement_p5 pEle; + pers->m_dhForm->next(); + m_elemCnv.transToPers(&tEle, &pEle, *pers->m_dhForm); + pers->m_dataHeader.push_back(pEle); + } } diff --git a/Database/PersistentDataModelTPCnv/src/DataHeader_p5.cxx b/Database/PersistentDataModelTPCnv/src/DataHeader_p5.cxx index 0d577295de63..57d0423e9e61 100755 --- a/Database/PersistentDataModelTPCnv/src/DataHeader_p5.cxx +++ b/Database/PersistentDataModelTPCnv/src/DataHeader_p5.cxx @@ -84,9 +84,9 @@ void DataHeaderForm_p5::resize(unsigned int size) { } -DataHeader_p5::DataHeader_p5() : m_dataHeader(), m_dhForm(), m_dhFormToken(), m_dhFormMdx() {} +DataHeader_p5::DataHeader_p5() : m_dataHeader(), m_dhForm(0), m_dhFormToken(), m_dhFormMdx() {} DataHeader_p5::DataHeader_p5(const DataHeader_p5& rhs) : m_dataHeader(rhs.m_dataHeader), - m_dhForm(rhs.m_dhForm), + m_dhForm(0), m_dhFormToken(rhs.m_dhFormToken), m_dhFormMdx(rhs.m_dhFormMdx) {} DataHeader_p5::~DataHeader_p5() {} @@ -94,7 +94,7 @@ DataHeader_p5::~DataHeader_p5() {} DataHeader_p5& DataHeader_p5::operator=(const DataHeader_p5& rhs) { if (this != &rhs) { m_dataHeader = rhs.m_dataHeader; - m_dhForm = rhs.m_dhForm; + m_dhForm = 0; m_dhFormToken = rhs.m_dhFormToken; m_dhFormMdx = rhs.m_dhFormMdx; } @@ -105,11 +105,11 @@ const std::vector<DataHeaderElement_p5>& DataHeader_p5::elements() const { return(m_dataHeader); } -const DataHeaderForm_p5& DataHeader_p5::dhForm() const { +const DataHeaderForm_p5* DataHeader_p5::dhForm() const { return(m_dhForm); } -void DataHeader_p5::setDhForm(const DataHeaderForm_p5& form) { +void DataHeader_p5::setDhForm(DataHeaderForm_p5* form) { m_dhForm = form; } @@ -118,25 +118,27 @@ const std::string& DataHeader_p5::dhFormToken() const { } void DataHeader_p5::setDhFormToken(const std::string& formToken) { - m_dhFormToken = formToken; - std::ostringstream stream; - for (std::vector<std::string>::const_iterator iter = m_dhForm.map().begin(), - last = m_dhForm.map().end(); iter != last; iter++) { - stream << *iter << "\n"; - } - for (m_dhForm.start(); m_dhForm.entry() <= m_dhForm.size(); m_dhForm.next()) { - for (std::vector<unsigned int>::const_iterator iter = m_dhForm.params().begin(), - last = m_dhForm.params().end(); iter != last; iter++) { - stream << *iter << ","; + if (m_dhForm) { + m_dhFormToken = formToken; + std::ostringstream stream; + for (std::vector<std::string>::const_iterator iter = m_dhForm->map().begin(), + last = m_dhForm->map().end(); iter != last; iter++) { + stream << *iter << "\n"; + } + for (m_dhForm->start(); m_dhForm->entry() <= m_dhForm->size(); m_dhForm->next()) { + for (std::vector<unsigned int>::const_iterator iter = m_dhForm->params().begin(), + last = m_dhForm->params().end(); iter != last; iter++) { + stream << *iter << ","; + } + stream << "\n"; } - stream << "\n"; + MD5 checkSum((unsigned char*)stream.str().c_str(), stream.str().size()); + uuid_t checkSumUuid; + checkSum.raw_digest((unsigned char*)(&checkSumUuid)); + char text[37]; + uuid_unparse_upper(checkSumUuid, text); + m_dhFormMdx = text; } - MD5 checkSum((unsigned char*)stream.str().c_str(), stream.str().size()); - uuid_t checkSumUuid; - checkSum.raw_digest((unsigned char*)(&checkSumUuid)); - char text[37]; - uuid_unparse_upper(checkSumUuid, text); - m_dhFormMdx = text; } const std::string& DataHeader_p5::dhFormMdx() const { return(m_dhFormMdx); -- GitLab