[ROOT] saving of a variable length array of non simple type (C struct)

From: Ralph Steinhagen (Ralph.Steinhagen@cern.ch)
Date: Mon Jun 02 2003 - 11:59:35 MEST


Hello!

I would like to save an object of the bellow declared BPM_ALL_BASE.
This class has two pointer to call the class 'monitor_info'.

First I declared a static array of 'single_monitor' in 'monitor_info' and the 
root standard streamer functions decomposed this array properly so that the 
needed data could be saved to file.
I decided to use a variable length array to save some memory because both 
'monitor_info' classes differs largely in size (factor 1000:1) but can and 
should be described equally.

Is there a easy solution to save a variable length array of C struct without 
decomposing the C struct into three singular arrays or to write a new 
streamer?

Thanks in advance.

Ralph Steinhagen

[..] excerpts out of the code

struct  single_monitor
{
 Char_t		name[20];
 Float_t		pos;
 Int_t			plane; // 1: horizontal  2: vertical
};

class monitor_info: public  TObject
{	public:
	monitor_info();
	~monitor_info();
	Int_t			GetMonitorCount();
	Char_t*		GetMonitorName(Int_t i);
	Float_t		GetMonitorPosition(Int_t i);
	Int_t			GetMonitorPlane(Int_t i);
	const Char_t*	GetMonitorNamePlane(Int_t i);
	Int_t			AddMonitor(Int_t i, Char_t *name, Float_t pos, Int_t plane);
	Int_t			IsMonitorPlane(Int_t i, Int_t plane);

	private:
	Int_t			fcount;
	single_monitor	*fmonitor; //[fcount]

	ClassDef(monitor_info,1)
};


class BPM_ALL_BASE : public  TObject
{
	public:
	Int_t			Cycletype;

	monitor_info	*MOPOS_Monitor;		//->
	monitor_info	*REALTIME_Monitor;	//->

	BPM_ALL_BASE();
	~BPM_ALL_BASE();

	private:

	ClassDef(BPM_ALL_BASE,1)
};



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