00001 #include "TDataContainer.hxx" 00002 00003 #include <exception> 00004 00005 00006 TDataContainer::TDataContainer(const TDataContainer &dataContainer){ 00007 00008 fMidasEventPointer = new TMidasEvent(dataContainer.GetMidasData()); 00009 fOwnMidasEventMemory = true; 00010 00011 } 00012 00013 TDataContainer::~TDataContainer(){ 00014 00015 if(fOwnMidasEventMemory) 00016 delete fMidasEventPointer; 00017 00018 for(unsigned int i = 0; i < fEventDataList.size(); i++){ 00019 delete fEventDataList[i]; 00020 } 00021 00022 } 00023 00024 00025 // Define exception for reset the pointer to MidasEvent when we still own the pointer for 00026 // the previous one. 00027 class TDataContainerBadPointerReset : public std::exception 00028 { 00029 virtual const char* what() const throw(){ 00030 return "TDataContainer Exception: trying to reset MidasEventPointer without deleting old memory"; 00031 } 00032 }; 00033 00034 // Define exception for trying to access MidasEvent when it doesn't exist. 00035 class TDataContainerNoValidMidasEvent : public std::exception 00036 { 00037 virtual const char* what() const throw(){ 00038 return "TDataContainer Exception: physics event does not have a valid midas event pointer"; 00039 } 00040 }; 00041 00042 00043 void TDataContainer::CleanupEvent(){ 00044 00045 for(unsigned int i = 0; i < fEventDataList.size(); i++){ 00046 delete fEventDataList[i]; 00047 } 00048 fEventDataList.clear(); 00049 } 00050 00051 00052 void TDataContainer::SetMidasEventPointer(TMidasEvent& event){ 00053 00054 // If the MidasPointer is still valid and we own the memory associated with it, 00055 // then we shouldn't be reseting the fMidasEventPointer. 00056 if(fOwnMidasEventMemory && fMidasEventPointer){ 00057 throw TDataContainerBadPointerReset(); 00058 } 00059 00060 fMidasEventPointer = &event; // ugly! 00061 fOwnMidasEventMemory = false; 00062 00063 } 00064 00065 00066 TMidasEvent& TDataContainer::GetMidasData() const{ 00067 00068 // Make sure that point is valid. 00069 if(fMidasEventPointer==0){ 00070 throw TDataContainerNoValidMidasEvent(); 00071 } 00072 00073 return *fMidasEventPointer; 00074 00075 } 00076