37 size_t i,
size = fArrayOfItems.size();
38 for (i = 0; i <
size; i++) {
39 if ( fArrayOfItems[i].second.first ) {
40 delete fArrayOfItems[i].second.first;
41 fArrayOfItems[i].second.first = 0x0;
43 if ( fArrayOfItems[i].second.second ) {
44 UnLink ( fArrayOfItems[i].second.second );
49 size = fArrayOfIdleItems.size();
50 for (i = 0; i <
size; i++) {
51 if ( fArrayOfIdleItems[i].second.first ) {
52 delete fArrayOfIdleItems[i].second.first;
53 fArrayOfIdleItems[i].second.first = 0x0;
55 if ( fArrayOfIdleItems[i].second.second ) {
56 UnLink ( fArrayOfIdleItems[i].second.second );
60 size = fArrayOfItems.size();
61 for (i = 0; i <
size; i++) {
62 delete fArrayOfItems[i].first; fArrayOfItems[i].first = 0x0;
64 size = fArrayOfIdleItems.size();
65 for (i = 0; i <
size; i++) {
66 delete fArrayOfIdleItems[i].first; fArrayOfIdleItems[i].first = 0x0;
72 size_t i,
size = fArrayOfItems.size();
73 for (i = 0; i <
size; i++) {
74 if (fArrayOfItems[i].first->Name() == item->
Name() &&
75 fArrayOfItems[i].first->Type() == item->
Type()) {
83 p.second.second = 0x0;
85 fArrayOfItems.push_back( p ); fDataItems.push_back( item );
91 size_t i,
size = fArrayOfItems.size();
94 for (i = 0u; i <
size; i++) {
95 if ( fArrayOfItems[i].first->Name() == name && fArrayOfItems[i].first->IsType(type) ) {
96 item = &fArrayOfItems[i];
108 size_t i, size = fArrayOfIdleItems.size();
111 for (i = 0u; i <
size; i++) {
112 if ( fArrayOfIdleItems[i].first->Name() == name &&
113 fArrayOfIdleItems[i].first->IsType(type) ) {
114 item = &fArrayOfIdleItems[i];
122 std::string t = type;
125 return Link<UShort_t>(name,(UShort_t *)extern_address);
127 return Link<Short_t>(name,(Short_t *)extern_address);
129 return Link<UInt_t>(name,(UInt_t *)extern_address);
131 return Link<Int_t>(name,(Int_t *)extern_address);
133 return Link<ULong64_t>(name,(ULong64_t *)extern_address);
135 return Link<Long64_t>(name,(Long64_t *)extern_address);
137 return Link<Double_t>(name,(Double_t *)extern_address);
139 return Link<Float_t>(name,(Float_t *)extern_address);
146 {
return Link<Short_t>(name,address); }
148 {
return Link<UShort_t>(name,address); }
150 {
return Link<Int_t>(name,address); }
152 {
return Link<UInt_t>(name,address); }
154 {
return Link<Float_t>(name,address); }
156 {
return Link<Double_t>(name,address); }
158 {
return Link<Long64_t>(name,address); }
160 {
return Link<ULong64_t>(name,address); }
162 void GObject::UnLink(
DataLink *link)
165 size_t i, i_to_remove = 0u, size = fDataLinks.size();
168 do_erase =
false; size = fDataLinks.size();
169 for (i = 0; i <
size; i++)
170 if ( fDataLinks[i] == link )
171 { i_to_remove = i; do_erase =
true;
break; }
174 fDataLinks.erase(fDataLinks.begin()+i_to_remove);
177 size = fArrayOfItems.size();
178 for (i = 0; i <
size; i++)
179 if ( fArrayOfItems[i].second.second == link ){
180 delete fArrayOfItems[i].second.second;
181 fArrayOfItems[i].second.second = 0x0;
185 size = fArrayOfIdleItems.size();
186 for (i = 0; i <
size; i++)
187 if ( fArrayOfIdleItems[i].second.second == link ){
188 delete fArrayOfIdleItems[i].second.second;
189 fArrayOfIdleItems[i].second.second = 0x0;
198 for (i = 0u; i < fArrayOfItems.size(); i++) {
201 item_from = &fArrayOfItems[i];
204 if ( (item_to = to.IsAnItem(item_from->first)) ) {
205 if ( item_from->second.first ) {
207 item_to->second.first = item_from->second.first;
213 item_from->second.first = 0x0;
215 if ( item_from->second.second ) {
217 item_to->second.second =
218 item_to->first->MakeADataLink(item_from->second.second->A2()) ;
219 to.fDataLinks.push_back(item_to->second.second);
222 UnLink( item_from->second.second );
229 p.first = item_from->first->MakeAClone();
232 if ( item_from->second.first ) {
234 p.second.first = item_from->second.first;
240 item_from->second.first = 0x0;
242 else p.second.first = 0x0;
244 if ( item_from->second.second ) {
247 p.first->MakeADataLink(item_from->second.second->A2()) ;
250 UnLink( item_from->second.second );
252 else p.second.second = 0x0;
254 to.fArrayOfIdleItems.push_back ( p );
258 for (i = 0u; i < fArrayOfIdleItems.size(); i++) {
264 if ( (item_to = to.IsAnItem(item_from->first)) ) {
265 if ( item_from->second.first ) {
267 item_to->second.first = item_from->second.first;
273 item_from->second.first = 0x0;
275 if ( item_from->second.second ) {
277 item_to->second.second =
278 item_to->first->MakeADataLink(item_from->second.second->A2()) ;
279 to.fDataLinks.push_back(item_to->second.second);
282 UnLink( item_from->second.second );
289 p.first = item_from->first->MakeAClone();
292 if ( item_from->second.first ) {
294 p.second.first = item_from->second.first;
300 item_from->second.first = 0x0;
302 else p.second.first = 0x0;
304 if ( item_from->second.second ) {
307 p.first->MakeADataLink(item_from->second.second->A2()) ;
310 UnLink( item_from->second.second );
312 else p.second.second = 0x0;
314 to.fArrayOfIdleItems.push_back ( p );
320 for (UInt_t i = 0u; i < fArrayOfItems.size(); i++) {
322 out <<
"Item #" << i <<
" ";
324 fArrayOfItems[i].first->Print(out);
327 if ( fArrayOfItems[i].second.first )
329 if ( fArrayOfItems[i].second.second )
334 for (UInt_t i = 0u; i < fArrayOfIdleItems.size(); i++) {
336 out <<
"IdleItem #" << i <<
" ";
338 fArrayOfIdleItems[i].first->Print(out);
341 if ( fArrayOfIdleItems[i].second.first )
343 if ( fArrayOfIdleItems[i].second.second )
351 size_t i, size = fDataLinks.size();
352 for (i = 0; i <
size; i++)
353 fDataLinks[i]->CopyA2_to_A1();
357 size_t i, size = fDataLinks.size();
358 for (i = 0; i <
size; i++)
359 fDataLinks[i]->CopyA1_to_A2();
363 size_t i, size = fDataItems.size();
364 for (i = 0; i <
size; i++)
365 fDataItems[i]->
Reset();
370 size_t i, size = fDataItems.size();
371 for (i = 0; i <
size; i++)
372 fDataItems[i]->SetItem(buf);
376 size_t i, size = fDataItems.size();
377 for (i = 0; i <
size; i++)
378 fDataItems[i]->GetItem(buf);
383 {
return "Anonymous"; }
413 ::memcpy(fData,a.
fData,fRealSize);
std::ostream & operator<<(std::ostream &, const Anonymous &)
A DataLink links too variables in memory.
virtual Bool_t AddItem(ANamedItem *item)
Add a named item to this. The item belongs to GObject and will be thus deleted.
Base class for a Global Object.
std::string GetName() const
change value of this nmaed item using the passed one. it checks if asked, it check first if of the sa...
std::string GetType() const
Type of the Item.
virtual void Reset()
Set local to default.
void TransferLinkAndProxy(GObject &to)
transfert proxy and link for one GObject to another one
virtual UInt_t Export(Char_t *, UInt_t) const
Export this buffer to an array.
virtual void SetProxy(ANamedItem *)
the passed item becomes the real item
Bool_t LinkItem(const Char_t *, const Char_t *, void *)
Only for basic type ... otherwise better to use the most general Link method.
std::pair< ANamedItem *, std::pair< ANamedItem *, DataLink * > > FullItem
a full item is composed of a pointer to an item, an pointer to a proxy and a pointer to a datalink ...
const BufferIO & operator>>(const BufferIO &, Anonymous &)
ADF::LogMessage & endl(ADF::LogMessage &log)
UInt_t Import(const Char_t *from, UInt_t size_ext_buf)
Import the given array in this buffer.
std::string & Name()
Name of the Item.
virtual ~GObject()
Destructor.
const char * NamedItemTypeOf(Bool_t)
Anonymous operator=(const Anonymous &a)
virtual void Print(std::ostream &out=std::cout) const
print some informations about this object
std::string & Type()
Type of the Item.
virtual void SetItems()
Copy external variables into locals.
virtual void GetItems() const
Copy local variables into externals.