Re: [ROOT] variable 2-dim array in a class for root I/O

From: Hajime Nanjyo (nanjyo@icepp.s.u-tokyo.ac.jp)
Date: Fri Aug 01 2003 - 01:08:21 MEST


Dear Philippe,

It works fine with some modifications, such as
pp[0] = new double[s]; ...
Thank you.

Best Regards,
Hajime


> Hi,
> 
> The syntax:
>   double   (*pp)[2];//[size]
> is not supported.
> Instead use:
>   double  *pp[2];//[size]
> 
> This does means an invertion on the indexes.
> You initalization loops becomes:
>     for(int j=0;j<data->size;j++) {
>       data->p[j] = j*10.+i;
>       data->pp[0][j] = j*10.+i;
>       data->pp[1][j] = j*10.+i+1;
>     }
> 
> Cheers,
> Philippe.
> 
> -----Original Message-----
> From: owner-roottalk@pcroot.cern.ch
> [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Hajime Nanjyo
> Sent: Thursday, July 24, 2003 4:11 PM
> To: roottalk@pcroot.cern.ch
> Subject: [ROOT] variable 2-dim array in a class for root I/O
> 
> 
> Dear Rooters,
> 
> I would like to use a 2-dim. array of variable size
> within a class which is used for ROOT I/O.
> 
> Some simple codes are listed below to show what I want to do.
> (A 2-dim. array is declared in MyClass.h.)
> 
> These codes were compiled successfully and the application
> run without error. But the 2-dim. array was not stored
> in the ROOT file.
> 
> I'm afraid the expression, "double   (*pp)[2];//[size]" ,
> is not supported.
> Could you tell me how to do ?
> 
> Best Regards,
> Hajime
> 
> ////////////////////////////////
> g++ `root-config --cflags` -c MyClass.C
> rootcint -f MyClssDict.C -c MyClass.h MyClassLinkDef.h
> g++ `root-config --cflags` -c MyClassDict.C
> g++ -shared -O MyClass.o MyClassDict.o -o  libMyClass.so 
> g++ `root-config --cflags` -c write.C
> g++ write.o libMyClass.so `root-config --libs` -o write
> ./write
> 
> 
> 
> ////////////////////////////////
> // MyClass.h
> #ifndef MyClass_HH
> #define MyClass_HH
> 
> #include "TObject.h"
> 
> class  MyClass: public TObject
> {
>  public:
>   MyClass();
>   ~MyClass();
>   void Init(int s);
>   void Fin();
> 
>  public:
>   int      size;
>   double   *p;//[size]
>   double   (*pp)[2];//[size]
>   //       ^^^^^^^^^^^^^^^^
>   //  such kind of expression is supported?
> 
>   ClassDef(MyClass,1) //MyClass
> };
> 
> #endif
> ////////////////////////////////
> // MyClass.C
> #include "MyClass.h"
> #if !defined(__CINT__)
> ClassImp(MyClass);
> #endif
> MyClass::MyClass() {
>   size=0;
>   p=0;
>   pp=0;
> }
> 
> MyClass::~MyClass() {
>   ;
> }
> 
> 
> void MyClass::Init(int s) {
>   size=s;
>   p  = new double[s];
>   pp = new double[s][2];
> }
> 
> void MyClass::Fin() {
>   delete [] p;
>   delete [] pp;
>   
>   p=0;
>   pp=0;
>   size=0;
> }
> ////////////////////////////////
> // MyClassLinkDef.h
> #ifdef __CINT__
> #pragma link off all globals;
> #pragma link off all classes;
> #pragma link off all functions;
> #pragma link C++ class MyClass+;
> 
> 
> #endif
> ////////////////////////////////
> // write.C
> #include "TApplication.h"
> #include "TFile.h"
> #include "TTree.h"
> #include "MyClass.h"
> 
> int main(int argc,char** argv)
> {
>   TApplication app("app", &argc, argv);
>   TFile *tf = new TFile("tmp.root","RECREATE");
>   TTree *tree = new TTree("tree","tmp");
> 
>   MyClass *data = new MyClass();
>   tree->Branch("data","MyClass",&data);
> 
>   for (int i=0;i<5;++i) {
>     data->Init(i+1);
>     for(int j=0;j<data->size;j++) {
>       data->p[j] = j*10.+i;
>       data->pp[j][0] = j*10.+i;
>       data->pp[j][1] = j*10.+i+1;
>     }
>     tree->Fill();
>     data->Fin();
>   }
> 
>   tf->Write();
>   delete data;
> 
>   return 0;
> }
> ////////////////////////////////
> 
> #################################################################
> #################################################################
> #################################################################
> #####
> #####
> #####
> #################################################################
> #################################################################
> #################################################################



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:14 MET