// $Id$ //----------------------------------------------------------------------- // The GSI Online Offline Object Oriented (Go4) Project // Experiment Data Processing at EE department, GSI //----------------------------------------------------------------------- // Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH // Planckstr. 1, 64291 Darmstadt, Germany // Contact: http://go4.gsi.de //----------------------------------------------------------------------- // This software can be used under the license agreements as stated // in Go4License.txt file which is part of the distribution. //----------------------------------------------------------------------- #include #include "TApplication.h" #include "TH1.h" #include "TClass.h" #include "TBuffer.h" #include "TGo4BufferQueue.h" #include "TGo4ObjectQueue.h" //______________________________________________________________________________ int main(int argc, char **argv) { TApplication theApp("App", &argc, argv); TNamed *com = new TNamed("named object", "this is a test"); TH1F *histo = new TH1F("histogram", "this is a test histogram", 100, 0., 1.); histo->Fill(0.2); TH1F *histo2 = new TH1F("histogram 2", "this is a test histogram", 100, 0., 1.); histo2->Fill(0.7); TH1 *histo3 = nullptr; TGo4ObjectQueue objectq("My object queue"); TGo4BufferQueue bufferq("My buffer queue"); objectq.AddObject(histo, kTRUE); delete histo; std::cout << "deleted the first histo after cloning" << std::endl; objectq.AddObject(com); TObject *output = nullptr; while (!(objectq.IsEmpty())) { output = objectq.WaitObject(); std::cout << "object from object queue:" << std::endl; std::cout << output->ClassName() << std::endl; std::cout << output->GetName() << std::endl; if (output->InheritsFrom(TH1::Class())) { histo3 = dynamic_cast(output); dynamic_cast(output)->Draw(); } } bufferq.AddBufferFromObject(histo2); bufferq.AddBufferFromObject(com); bufferq.AddBufferFromObject(histo3); TBuffer *mess = nullptr; while (!bufferq.IsEmpty()) { mess = bufferq.WaitBuffer(); // TMessage* mess = dynamic_cast (buf); // TClass *cl= buf->ReadClass(); std::cout << "got buffer from buffer queue:" << std::endl; mess->SetReadMode(); mess->Reset(); mess->InitMap(); TClass *cl = mess->ReadClass(); std::cout << "Class: " << cl << std::endl; if (cl) std::cout << "Classname: " << cl->GetName() << std::endl; std::cout << "Reading object from buffer..." << std::endl; mess->Reset(); output = mess->ReadObject(cl); if (!output) { std::cout << "zero object" << std::endl; exit(0); } std::cout << output->ClassName() << std::endl; std::cout << output->GetName() << std::endl; if (output->InheritsFrom(TH1::Class())) output->Draw(); objectq.AddObjectFromBuffer(mess); objectq.AddObjectFromBuffer(mess); objectq.AddObject(com); objectq.AddObjectFromBuffer(mess); } bufferq.AddBuffer(mess); bufferq.AddBuffer(mess); bufferq.AddBuffer(mess); while (!(objectq.IsEmpty())) { output = objectq.WaitObject(); std::cout << "object from object queue second pass:" << std::endl; std::cout << output->ClassName() << std::endl; std::cout << output->GetName() << std::endl; if (output->InheritsFrom(TH1::Class())) output->Draw(); } while (!bufferq.IsEmpty()) { mess = bufferq.WaitBuffer(); // TMessage* mess = dynamic_cast (buf); // TClass *cl= buf->ReadClass(); std::cout << "got buffer from buffer queue second time:" << std::endl; mess->SetReadMode(); mess->Reset(); mess->InitMap(); TClass *cl = mess->ReadClass(); std::cout << "Class: " << cl << std::endl; if (cl) std::cout << "Classname: " << cl->GetName() << std::endl; std::cout << "Reading object from buffer..." << std::endl; mess->Reset(); output = mess->ReadObject(cl); if (!output) { std::cout << "zero object" << std::endl; exit(0); } std::cout << output->ClassName() << std::endl; std::cout << output->GetName() << std::endl; if (output->InheritsFrom(TH1::Class())) output->Draw(); } theApp.Run(); return 0; }