39# define INLINE_TEMPLATE_ARGS
41# define INLINE_TEMPLATE_ARGS inline
54 return isEmulated || (isVector && hasDefaultAlloc);
57 template <
typename From>
62 template <
typename From>
105 printf(
"StreamerInfoAction, class:%s, name=%s, fType[%d]=%d,"
106 " %s, offset=%d (%s), elemnId=%d \n",
122 printf(
"StreamerInfoAction, class:%s, name=%s, fType[%d]=%d,"
123 " %s, bufpos=%d, arr=%p, offset=%d (%s)\n",
133 printf(
"TLoopConfiguration: unconfigured\n");
165 printf(
"StreamerInfoAction, class:%s, name=%s, fType[%d]=%d,"
166 " %s, offset=%d (%s)\n",
193 char *obj = (
char*)addr;
200 char *obj = (
char*)addr;
205 template <
typename T>
208 T *
x = (T*)( ((
char*)addr) + config->
fOffset );
227 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
250 template <
typename T>
253 T *
x = (T *)(((
char *)addr) + config->
fOffset);
261 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
269 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
277 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
285 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
295 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
302 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
309 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
317 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
330 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
337 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
344 template<
bool kIsTextT>
369 char **contp = (
char **)((
char *)addr + ioffset);
371 char *cont = contp[j];
373 Int_t nobjects = cont ? proxy->
Size() : 0;
387 }
else if (pstreamer ==
nullptr) {
389 char **contp = (
char **)((
char *)addr + ioffset);
391 char *cont = contp[j];
407 template<
bool kIsTextT>
430 if( vers < 9 && newClass && newClass!=oldClass ) {
431 Error(
"ReadBuffer",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s%s into a %s.",
448 }
else if ( oldProxy ) {
455 void **contp = (
void**)((
char *) addr + ioffset);
457 void *cont = contp[j];
459 contp[j] = cle->
New();
465 env = newProxy->
Allocate(nobjects,
true);
478 }
else if (pstreamer ==
nullptr) {
480 void **contp = (
void **)((
char *)addr + ioffset);
482 void *cont = contp[j];
483 if (cont ==
nullptr) {
488 contp[j] = cle->
New();
504 template<
bool kIsTextT>
521 (*pstreamer)(buf, (
char *) addr + ioffset , *counter);
523 buf.SetByteCount(pos,
kTRUE);
546 if (fileVersion > 51508) {
556 char** pp = (
char**) ((
char *) addr + ioffset );
595 char** pp = (
char**) ((
char *) addr + ioffset );
619 char**
r = (
char**) pp[ndx];
637 template<
bool kIsTextT>
660 (*pstreamer)(buf, (
char *) addr + ioffset , *counter);
685 if (fileVersion > 51508) {
690 Int_t vlen = *((
Int_t *)((
char *)addr + eoffset +
698 char **pp = (
char **)((
char *)addr + ioffset );
751 pp[ndx] = (
char *)cl->
NewArray(vlen);
753 Error(
"ReadBuffer",
"Memory allocation failed!\n");
760 pp[ndx] = (
char *)
new char *[vlen];
762 Error(
"ReadBuffer",
"Memory allocation failed!\n");
766 memset(pp[ndx], 0, vlen *
sizeof(
char *));
783 Int_t vlen = *((
Int_t *)((
char *)addr + eoffset +
791 char **pp = (
char **)((
char *)addr + ioffset );
841 pp[ndx] = (
char *)cl->
NewArray(vlen);
843 Error(
"ReadBuffer",
"Memory allocation failed!\n");
850 pp[ndx] = (
char *)
new char *[vlen];
852 Error(
"ReadBuffer",
"Memory allocation failed!\n");
856 memset(pp[ndx], 0, vlen *
sizeof(
char *));
869 char **
r = (
char **)pp[ndx];
873 r[
v] = (
char *)cl->
New();
895 TConfWithFactor(
TVirtualStreamerInfo *info,
UInt_t id,
TCompInfo_t *compinfo,
Int_t offset,
Double_t factor,
Double_t xmin) :
TConfiguration(info,
id,compinfo,
offset),
fFactor(factor),
fXmin(
xmin) {};
899 template <
typename T>
918 template <
typename T>
936 ((
TString*)(((
char*)addr)+config->
fOffset))->TString::Streamer(buf);
946 ((
TObject*)(((
char*)addr)+config->
fOffset))->TObject::Streamer(buf);
990 TConfiguration(info,
id,compinfo,
offset,
length),
fOldClass(oldClass),
fNewClass(oldClass),
fStreamer(0),
fTypeName(type_name),
fIsSTLBase(isbase),
994 TConfiguration(info,
id,compinfo,
offset,
length),
fOldClass(oldClass),
fNewClass(newClass),
fStreamer(0),
fTypeName(type_name),
fIsSTLBase(isbase),
998 TConfiguration(info,
id,compinfo,
offset,
length),
fOldClass(oldClass),
fNewClass(oldClass),
fStreamer(streamer),
fTypeName(type_name),
fIsSTLBase(isbase),
1002 TConfiguration(info,
id,compinfo,
offset,
length),
fOldClass(oldClass),
fNewClass(newClass),
fStreamer(streamer),
fTypeName(type_name),
fIsSTLBase(isbase),
1036 printf(
"TVectorLoopConfig: increment=%ld\n",
fIncrement);
1114 void *arr0 =
fNext(iter,end_collection);
1115 if (iter != &iterator[0]) {
1144 void* alternative = oldProxy->
Allocate(nobjects,
true);
1150 void *begin = &(startbuf[0]);
1151 void *end = &(endbuf[0]);
1156 if (begin != &(startbuf[0])) {
1161 oldProxy->
Commit(alternative);
1176 void* env = oldProxy->
Allocate(nobjects,
true);
1178 if (nobjects || vers < 7 ) {
1209 int objectSize = oldClass->
Size();
1210 char *obj = (
char*)addr;
1211 char *endobj = obj + conf->
fLength*objectSize;
1213 for(; obj<endobj; obj+=objectSize) {
1217 void* alternative = oldProxy->
Allocate(nobjects,
true);
1221 void *begin = &(startbuf[0]);
1222 void *end = &(endbuf[0]);
1227 if (begin != &(startbuf[0])) {
1232 oldProxy->
Commit(alternative);
1245 int objectSize = oldClass->
Size();
1246 char *obj = (
char*)addr;
1247 char *endobj = obj + conf->
fLength*objectSize;
1249 for(; obj<endobj; obj+=objectSize) {
1253 void* env = oldProxy->
Allocate(nobjects,
true);
1255 if (nobjects || vers < 7 ) {
1278 Error(
"ReadSTLMemberWiseChangedClass",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
1279 vers, buf.
GetParent() ? buf.
GetParent()->
GetName() :
"memory/socket", oldClass ? oldClass->
GetName() :
"(could not find the origin TClass)", newClass ? newClass->
GetName() :
"(could not find the destination TClass)" );
1280 }
else if (newClass && oldClass){
1290 void* alternative = newProxy->
Allocate(nobjects,
true);
1295 void *begin = &(startbuf[0]);
1296 void *end = &(endbuf[0]);
1301 if (begin != &(startbuf[0])) {
1306 newProxy->
Commit(alternative);
1322 Error(
"ReadSTLMemberWiseChangedClass",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
1323 vers, buf.
GetParent() ? buf.
GetParent()->
GetName() :
"memory/socket", oldClass ? oldClass->
GetName() :
"(could not find the origin TClass)", newClass ? newClass->
GetName() :
"(could not find the destination TClass)" );
1324 }
else if (newClass && oldClass) {
1331 int objectSize = newClass->
Size();
1332 char *obj = (
char*)addr;
1333 char *endobj = obj + conf->
fLength*objectSize;
1335 for(; obj<endobj; obj+=objectSize) {
1339 void* alternative = newProxy->
Allocate(nobjects,
true);
1344 void *begin = &(startbuf[0]);
1345 void *end = &(endbuf[0]);
1350 if (begin != &(startbuf[0])) {
1355 newProxy->
Commit(alternative);
1405 memberwise(buf,((
char*)addr)+config->
fOffset,config, vers);
1407 objectwise(buf,((
char*)addr)+config->
fOffset,config, vers, start);
1413 template <
typename From,
typename To>
1420 *(To*)( ((
char*)addr) + config->
fOffset ) = (To)temp;
1425 template <
typename To>
1437 *(To*)( ((
char*)addr) + config->
fOffset ) = (To)temp;
1442 template <
typename From,
typename To>
1450 *(To*)( ((
char*)addr) + config->
fOffset ) = (To)temp;
1455 template <
typename From,
typename To>
1463 *(To*)( ((
char*)addr) + config->
fOffset ) = (To)temp;
1481 printf(
"StreamerInfoAction, class:%s, PushDataCache offset=%d\n",
1484 printf(
"StreamerInfoAction, class:%s, PopDataCache offset=%d\n",
1491 printf(
"StreamerInfoAction, class:%s, %sDataCache, bufpos=%d, arr=%p, offset=%d, onfileObject=%p\n",
1504 b.PushDataCache( onfileObject );
1515 b.PushDataCache( onfileObject );
1528 onfileObject->SetSize(
n);
1529 b.PushDataCache( onfileObject );
1566 fprintf(stdout,
"StreamerInfoAction, class:%s, name=%s, fType[%d]=%d,"
1567 " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
1569 aElement->
ClassName(),
b.Length(),addr, 0,
b.PeekDataCache() ?
b.PeekDataCache()->GetObjectAt(0) : 0);
1586 Int_t bufpos =
b.Length();
1591 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",info->
GetName(),aElement->
GetName());
1592 char *ptr = (
char*)addr;
1599 b.SetBufferOffset(bufpos);
1607 Int_t bufpos =
b.Length();
1613 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",info->
GetName(),aElement->
GetName());
1614 char *ptr = (
char*)start;
1615 UInt_t n = (((
void**)end)-((
void**)start));
1619 void *cached_start = (*cached)[0];
1620 void *cached_end = ((
char*)cached_start) + cached->
fSize * cached_config.
fIncrement;
1621 config->
fAction(
b,cached_start,cached_end,&cached_config);
1625 b.SetBufferOffset(bufpos);
1634 Int_t bufpos =
b.Length();
1639 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",info->
GetName(),aElement->
GetName());
1640 char *ptr = (
char*)start;
1645 void *cached_start = (*cached)[0];
1646 void *cached_end = ((
char*)cached_start) + cached->
fSize * cached_config.
fIncrement;
1647 config->
fAction(
b,cached_start,cached_end,&cached_config);
1651 b.SetBufferOffset(bufpos);
1660 Int_t bufpos =
b.Length();
1667 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",info->
GetName(),aElement->
GetName());
1672 void *cached_start = (*cached)[0];
1673 void *cached_end = ((
char*)cached_start) + cached->
fSize * cached_config.
fIncrement;
1674 config->
fAction(
b,cached_start,cached_end,&cached_config);
1678 b.SetBufferOffset(bufpos);
1721 template <
typename T>
1725 iter = (
char*)iter + config->
fOffset;
1726 end = (
char*)end + config->
fOffset;
1727 for(; iter != end; iter = (
char*)iter + incr ) {
1728 T *
x = (T*) ((
char*) iter);
1734 template <
typename From,
typename To>
1741 iter = (
char*)iter + config->
fOffset;
1742 end = (
char*)end + config->
fOffset;
1743 for(; iter != end; iter = (
char*)iter + incr ) {
1745 *(To*)( ((
char*)iter) ) = (To)temp;
1751 template <
typename To>
1758 iter = (
char*)iter + config->
fOffset;
1759 end = (
char*)end + config->
fOffset;
1760 for(; iter != end; iter = (
char*)iter + incr ) {
1767 *(To*)( ((
char*)iter) ) = (To)temp;
1773 template <
typename From,
typename To>
1781 iter = (
char*)iter + config->
fOffset;
1782 end = (
char*)end + config->
fOffset;
1783 for(; iter != end; iter = (
char*)iter + incr ) {
1785 *(To*)( ((
char*)iter) ) = (To)temp;
1791 template <
typename From,
typename To>
1799 iter = (
char*)iter + config->
fOffset;
1800 end = (
char*)end + config->
fOffset;
1801 for(; iter != end; iter = (
char*)iter + incr ) {
1803 *(To*)( ((
char*)iter) ) = (To)temp;
1809 template <
typename T>
1813 iter = (
char*)iter + config->
fOffset;
1814 end = (
char*)end + config->
fOffset;
1815 for(; iter != end; iter = (
char*)iter + incr ) {
1816 T *
x = (T*) ((
char*) iter);
1822 template <Int_t (*iter_action)(TBuffer&,
void *,const TConfiguration*)>
1828 for(
void *iter = start; iter != end; iter = (
char*)iter + incr ) {
1829 iter_action(buf, iter, config);
1840 UInt_t n = (((
char*)end)-((
char*)start))/incr;
1841 char **arrptr =
new char*[
n];
1843 for(
void *iter = start; iter != end; iter = (
char*)iter + incr, ++i ) {
1844 arrptr[i] = (
char*)iter;
1877 UInt_t n = (((
char*)end)-((
char*)start))/incr;
1878 char **arrptr =
new char*[
n];
1880 for(
void *iter = start; iter != end; iter = (
char*)iter + incr, ++i ) {
1881 arrptr[i] = (
char*)iter;
1893 UInt_t n = (((
char*)end)-((
char*)start))/incr;
1894 char **arrptr =
new char*[
n];
1896 for(
void *iter = start; iter != end; iter = (
char*)iter + incr, ++i ) {
1897 arrptr[i] = (
char*)iter;
1904 template <
typename T>
1913 std::vector<T> *
const vec = (std::vector<T>*)(((
char*)addr)+config->
fOffset);
1916 vec->resize(nvalues);
1918#ifdef R__VISUAL_CPLUSPLUS
1924 T *begin = &(*
vec->begin());
1940 std::vector<float> *
const vec = (std::vector<float>*)(((
char*)addr)+config->
fOffset);
1943 vec->resize(nvalues);
1945#ifdef R__VISUAL_CPLUSPLUS
1951 float *begin = &(*
vec->begin());
1966 std::vector<double> *
const vec = (std::vector<double>*)(((
char*)addr)+config->
fOffset);
1969 vec->resize(nvalues);
1971#ifdef R__VISUAL_CPLUSPLUS
1977 double *begin = &(*
vec->begin());
1984 template <
typename From,
typename To>
1994 std::vector<To> *
const vec = (std::vector<To>*)(((
char*)addr)+config->
fOffset);
1997 vec->resize(nvalues);
1999 From *temp =
new From[nvalues];
2001 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2002 (*vec)[ind] = (To)temp[ind];
2011 template <
typename From,
typename To>
2021 std::vector<To> *
const vec = (std::vector<To>*)(((
char*)addr)+config->
fOffset);
2024 vec->resize(nvalues);
2026 From *temp =
new From[nvalues];
2028 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2029 (*vec)[ind] = (To)temp[ind];
2038 template <
typename To>
2047 std::vector<To> *
const vec = (std::vector<To>*)(((
char*)addr)+config->
fOffset);
2050 vec->resize(nvalues);
2054 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2055 (*vec)[ind] = (To)temp[ind];
2067 template <
typename T>
2072 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2073 T *
x = (T*)( ((
char*) (*(
void**)iter) ) +
offset );
2079 template <
typename From,
typename To>
2086 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2088 To *
x = (To*)( ((
char*) (*(
void**)iter) ) +
offset );
2095 template <
typename To>
2102 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2109 To *
x = (To*)( ((
char*) (*(
void**)iter) ) +
offset );
2116 template <
typename From,
typename To>
2124 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2126 To *
x = (To*)( ((
char*) (*(
void**)iter) ) +
offset );
2133 template <
typename From,
typename To>
2141 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2143 To *
x = (To*)( ((
char*) (*(
void**)iter) ) +
offset );
2150 template <
typename T>
2155 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2156 T *
x = (T*)( ((
char*) (*(
void**)iter) ) +
offset );
2162 template <Int_t (*action)(TBuffer&,
void *,const TConfiguration*)>
2165 for(
void *iter = start; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2166 action(buf, *(
void**)iter, config);
2181 Int_t n = ( ((
void**)end) - ((
void**)iter) );
2182 char **arr = (
char**)iter;
2188 Int_t n = ( ((
void**)end) - ((
void**)iter) );
2189 char **arr = (
char**)iter;
2197 template <
typename T>
2213 template <
typename T,
void (*action)(TBuffer&,
void *,Int_t)>
2228 void* alternative = newProxy->
Allocate(nvalues,
true);
2232 void *begin = &(startbuf[0]);
2233 void *end = &(endbuf[0]);
2238 action(buf,begin,nvalues);
2240 if (begin != &(startbuf[0])) {
2245 newProxy->
Commit(alternative);
2253 return ReadNumericalCollection<Float_t,SimpleReadFloat16 >(buf,addr,conf);
2258 return ReadNumericalCollection<Double_t,SimpleReadDouble32 >(buf,addr,conf);
2261 template <
typename T>
2264 return ReadNumericalCollection<T,SimpleRead<T> >(buf,addr,conf);
2267 template <
typename From,
typename To>
2271 From *temp =
new From[nvalues];
2273 To *
vec = (To*)addr;
2274 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2275 vec[ind] = (To)temp[ind];
2281 template <
typename From,
typename To>
2285 From *temp =
new From[nvalues];
2287 To *
vec = (To*)addr;
2288 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2289 vec[ind] = (To)temp[ind];
2295 template <
typename From,
typename To>
2299 From *temp =
new From[nvalues];
2302 To *
vec = (To*)addr;
2303 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2304 vec[ind] = (To)temp[ind];
2310 template <
typename From,
typename To>
2314 return ReadNumericalCollection<To,ConvertRead<From,To>::Action >(buf,addr,conf);
2322 template <
typename T>
2333 while( (addr = next(iter,end)) ) {
2334 T *
x = (T*)( ((
char*)addr) +
offset );
2337 if (iter != &iterator[0]) {
2343 template <
typename T>
2354 while( (addr = next(iter,end)) ) {
2355 T *
x = (T*)( ((
char*)addr) +
offset );
2358 if (iter != &iterator[0]) {
2364 template <Int_t (*iter_action)(TBuffer&,
void *,const TConfiguration*)>
2375 while( (addr = next(iter,end)) ) {
2376 iter_action(buf, addr, config);
2378 if (iter != &iterator[0]) {
2384 template <
typename From,
typename To>
2396 while( (addr = next(iter,end)) ) {
2397 To *
x = (To*)( ((
char*)addr) +
offset );
2401 if (iter != &iterator[0]) {
2407 template <
typename From,
typename To>
2419 while( (addr = next(iter,end)) ) {
2420 To *
x = (To*)(addr);
2427 template <
typename From,
typename To,
template <
typename F,
typename T>
class Converter = Generic >
2437 From *items =
new From[nvalues];
2439 Converter<From,To>::ConvertAction(items,start,end,loopconfig,config);
2445 template <
typename To>
2456 UInt_t *items = items_storage;
2464 while( (addr = next(iter,end)) ) {
2469 To *
x = (To*)( ((
char*)addr) +
offset );
2473 if (iter != &iterator[0]) {
2477 delete [] items_storage;
2482 template <
typename From,
typename To,
template <
typename F,
typename T>
class Converter >
2494 From *items =
new From[nvalues];
2496 Converter<From,To>::ConvertAction(items,start,end,loopconfig,config);
2502 template <
typename From,
typename To,
template <
typename F,
typename T>
class Converter >
2514 From *items =
new From[nvalues];
2516 Converter<From,To>::ConvertAction(items,start,end,loopconfig,config);
2527 return GenericRead(buf,start,end,loopconfig, config);
2544 template <
typename T>
2563 template <
typename ActionHolder>
2578 void* alternative = newProxy->
Allocate(nvalues,
true);
2582 void *begin = &(startbuf[0]);
2583 void *end = &(endbuf[0]);
2589 ActionHolder::Action(buf,begin,end,&loopconf,config);
2591 if (begin != &(startbuf[0])) {
2596 newProxy->
Commit(alternative);
2604 return ReadNumericalCollection<ConvertBasicType<NoFactorMarker<float>,float,
Numeric > >(buf,addr,conf);
2609 return ReadNumericalCollection<ConvertBasicType<float,double,Numeric > >(buf,addr,conf);
2614 template <
typename T>
2619 return ReadNumericalCollection<ConvertBasicType<T,T,Numeric > >(buf,addr,conf);
2622 template <
typename From,
typename To>
2627 return ReadNumericalCollection<ConvertBasicType<From,To,Numeric > >(buf,addr,conf);
2636template <
typename Looper,
typename From>
2664template <
class Looper>
2686 case TStreamerInfo::kBits:
Error(
"GetNumericCollectionReadAction",
"There is no support for kBits outside of a TObject.");
break;
2717 Fatal(
"GetNumericCollectionReadAction",
"Is confused about %d",
type);
2722template <
typename Looper,
typename From>
2745 Error(
"GetConvertCollectionReadActionFrom",
"UNEXPECTED: newtype == %d", newtype);
2753template <
typename Looper>
2758 return GetConvertCollectionReadActionFrom<Looper,Bool_t>(newtype, conf );
2761 return GetConvertCollectionReadActionFrom<Looper,Char_t>(newtype, conf );
2764 return GetConvertCollectionReadActionFrom<Looper,Short_t>(newtype, conf );
2767 return GetConvertCollectionReadActionFrom<Looper,Int_t>(newtype, conf );
2770 return GetConvertCollectionReadActionFrom<Looper,Long_t>(newtype, conf );
2773 return GetConvertCollectionReadActionFrom<Looper,Long64_t>(newtype, conf );
2776 return GetConvertCollectionReadActionFrom<Looper,Float_t>( newtype, conf );
2779 return GetConvertCollectionReadActionFrom<Looper,Double_t>(newtype, conf );
2782 return GetConvertCollectionReadActionFrom<Looper,UChar_t>(newtype, conf );
2785 return GetConvertCollectionReadActionFrom<Looper,UShort_t>(newtype, conf );
2788 return GetConvertCollectionReadActionFrom<Looper,UInt_t>(newtype, conf );
2791 return GetConvertCollectionReadActionFrom<Looper,ULong_t>(newtype, conf );
2794 return GetConvertCollectionReadActionFrom<Looper,ULong64_t>(newtype, conf );
2797 return GetConvertCollectionReadActionFrom<Looper,NoFactorMarker<Float16_t> >( newtype, conf );
2800 return GetConvertCollectionReadActionFrom<Looper,NoFactorMarker<Double32_t> >( newtype, conf );
2803 Error(
"GetConvertCollectionReadAction",
"There is no support for kBits outside of a TObject.");
2808 Error(
"GetConvertCollectionReadAction",
"UNEXPECTED: oldtype == %d", oldtype);
2813template <
class Looper>
2837 if (!nbits) nbits = 12;
2914 if (!nbits) nbits = 12;
2915 return GetCollectionReadConvertAction<Looper,NoFactorMarker<float> >(element->
GetNewType(),
new TConfNoFactor(info,i,compinfo,
offset,nbits) );
2927 return GetCollectionReadConvertAction<Looper,NoFactorMarker<double> >(element->
GetNewType(),
new TConfNoFactor(info,i,compinfo,
offset,nbits) );
2940template <
class Looper>
3047 fNslots = ndata + ndata/2 + 1;
3066 for (i = 0; i < ndata; ++i) {
3110 if (!previousOptimized) {
3121 if (
fComp[keep].fLength == 0) {
3126 isOptimized =
kTRUE;
3127 previousOptimized =
kTRUE;
3128 }
else if (element->
GetType() < 0) {
3141 previousOptimized =
kFALSE;
3159 Warning(
"Compile",
"Counter %s should not be skipped from class %s", element->
GetName(),
GetName());
3170 if (
fComp[keep].fLength == 0) {
3174 previousOptimized =
kFALSE;
3184 for (i = 0; i <
fNdata; ++i) {
3213template <
typename From>
3245 switch (compinfo->
fType) {
3266 if (!nbits) nbits = 12;
3296 if (newClass && newClass != oldClass) {
3298 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseChangedClass,ReadSTLObjectWiseStreamerV2>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
3300 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseChangedClass,ReadSTLObjectWiseFastArrayV2>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase));
3304 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseSameClass,ReadSTLObjectWiseStreamerV2>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
3306 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseSameClass,ReadSTLObjectWiseFastArrayV2>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,element->
GetTypeName(),isSTLbase));
3310 if (newClass && newClass != oldClass) {
3312 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseChangedClass,ReadSTLObjectWiseStreamer>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
3313 }
else if (oldClass) {
3315 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseChangedClass,ReadSTLObjectWiseFastArray>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase));
3319 readSequence->
AddAction(GetConvertCollectionReadAction<VectorLooper>(oldClass->
GetCollectionProxy()->
GetType(), newClass->
GetCollectionProxy()->
GetType(),
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase)));
3322 readSequence->
AddAction(GetConvertCollectionReadAction<AssociativeLooper>(oldClass->
GetCollectionProxy()->
GetType(), newClass->
GetCollectionProxy()->
GetType(),
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase)));
3328 readSequence->
AddAction(GetConvertCollectionReadAction<GenericLooper>(oldClass->
GetCollectionProxy()->
GetType(), newClass->
GetCollectionProxy()->
GetType(),
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase)));
3335 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseSameClass,ReadSTLObjectWiseStreamer>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
3336 }
else if (oldClass) {
3338 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseSameClass,ReadSTLObjectWiseFastArray>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,1,oldClass,element->
GetTypeName(),isSTLbase));
3360 if (newClass && newClass != oldClass) {
3362 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseChangedClass,ReadSTLObjectWiseStreamerV2>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,newClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
3364 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseChangedClass,ReadSTLObjectWiseFastArrayV2>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,newClass,element->
GetTypeName(),isSTLbase));
3368 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseSameClass,ReadSTLObjectWiseStreamerV2>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
3374 if (newClass && newClass != oldClass) {
3376 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseChangedClass,ReadSTLObjectWiseStreamer>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,newClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
3378 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseChangedClass,ReadSTLObjectWiseFastArray>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,newClass,element->
GetTypeName(),isSTLbase));
3382 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseSameClass,ReadSTLObjectWiseStreamer>,
new TConfigSTL(
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
3439 if (!nbits) nbits = 12;
3440 AddReadConvertAction<NoFactorMarker<float> >(readSequence, compinfo->
fNewType,
new TConfNoFactor(
this,i,compinfo,compinfo->
fOffset,nbits) );
3452 AddReadConvertAction<NoFactorMarker<double> >(readSequence, compinfo->
fNewType,
new TConfNoFactor(
this,i,compinfo,compinfo->
fOffset,nbits) );
3480 switch (compinfo->
fType) {
3521 default:
generic =
kTRUE;
break;
3548 readSequence->
AddAction( GetCollectionReadAction<VectorPtrLooper>(
this,element,compinfo->
fType,i,compinfo,compinfo->
fOffset) );
3565 switch (compinfo->
fType) {
3649#if defined(CDJ_NO_COMPILE)
3652 writeSequence->
fActions.pop_back();
3674 switch (compinfo->
fType) {
3829 default:
generic =
kTRUE;
break;
3845#if defined(CDJ_NO_COMPILE)
3848 writeSequence->
fActions.pop_back();
3870#if defined(CDJ_NO_COMPILE)
3875 writeSequence->Addaction( GetCollectionWriteAction<VectorPtrLooper>(
this,element,compinfo->
fType,i,compinfo,compinfo->
fOffset) );
3921 for (
UInt_t i = 0; i < ndata; ++i) {
3945 ::Warning(
"CreateReadMemberWiseActions",
"%s",
3957 if (newType != oldType) {
3978 sequence->
AddAction( GetCollectionReadAction<VectorLooper>(info,element,oldType,i,compinfo,
offset));
3988 sequence->
AddAction( GetCollectionReadAction<GenericLooper>(info,element,oldType,i,compinfo,
offset) );
4032 for (
UInt_t i = 0; i < ndata; ++i) {
4056#if defined(CDJ_NO_COMPILE)
4059 if (newType != oldType) {
4078 sequence->
AddAction(GetCollectionWriteAction<VectorLooper>(info,element,oldType,i,compinfo,
offset));
4111 if (!nbits) nbits = 12;
4145 sequence->
AddAction( GetCollectionWriteAction<VectorLooper>(info,element,oldType,i,compinfo,
offset) );
4163 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
4164 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
4169 if (iter->fConfiguration->fElemId != (
UInt_t)-1 &&
4171 iter->fConfiguration->AddToOffset(delta);
4180 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
4181 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
4185 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
4186 iter->fConfiguration->SetMissing();
4198 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
4199 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
4204 sequence->
AddAction( iter->fAction, conf );
4214 for(
UInt_t id = 0;
id < element_ids.size(); ++
id) {
4215 if ( element_ids[
id].fElemID < 0 ) {
4216 if (element_ids[
id].fNestedIDs) {
4217 auto original = create(element_ids[
id].fNestedIDs->fInfo,
4220 if (element_ids[
id].fNestedIDs->fOnfileObject) {
4230 original->AddToSubSequence(sequence, element_ids[
id].fNestedIDs->fIDs, element_ids[
id].fNestedIDs->fOffset, create);
4232 if (element_ids[
id].fNestedIDs->fOnfileObject) {
4243 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
4244 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
4249 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
4251 sequence->
AddAction( iter->fAction, conf );
4255 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
4256 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
4259 if ( iter->fConfiguration->fElemId == (
UInt_t)element_ids[
id].fElemID ) {
4261 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
4263 sequence->
AddAction( iter->fAction, conf );
4280 AddToSubSequence(sequence, element_ids,
offset, create);
4294 for(
UInt_t id = 0;
id < element_ids.size(); ++
id) {
4295 if ( element_ids[
id] < 0 ) {
4296 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
4297 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
4302 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
4304 sequence->
AddAction( iter->fAction, conf );
4307 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
4308 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
4311 if ( iter->fConfiguration->fElemId == (
UInt_t)element_ids[
id] ) {
4313 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
4315 sequence->
AddAction( iter->fAction, conf );
4323#if !defined(R__WIN32) && !defined(_AIX)
4332#if defined(R__WIN32) || defined(__CYGWIN__) || defined(_AIX)
4333 return "not available on this platform";
4335 MEMORY_BASIC_INFORMATION mbi;
4336 if (!VirtualQuery (func, &mbi,
sizeof (mbi)))
4341 HMODULE hMod = (HMODULE) mbi.AllocationBase;
4342 static char moduleName[MAX_PATH];
4344 if (!GetModuleFileNameA (hMod, moduleName,
sizeof (moduleName)))
4352 if (dladdr((
void*)func,&info)==0) {
4354 return "name not found";
4357 return info.dli_sname;
4369 fLoopConfig->Print();
4371 TStreamerInfoActions::ActionContainer_t::const_iterator end = fActions.end();
4372 for(TStreamerInfoActions::ActionContainer_t::const_iterator iter = fActions.begin();
4376 iter->fConfiguration->Print();
4377 if (strstr(opt,
"func")) {
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
void Fatal(const char *location, const char *msgfmt,...)
Use this function in case of a fatal error. It will abort the program.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
R__EXTERN TVirtualMutex * gInterpreterMutex
static TConfiguredAction GetNumericCollectionReadAction(Int_t type, TConfigSTL *conf)
static void AddReadConvertAction(TStreamerInfoActions::TActionSequence *sequence, Int_t newtype, TConfiguration *conf)
static TConfiguredAction GetCollectionReadConvertAction(Int_t newtype, TConfiguration *conf)
static TConfiguredAction GetCollectionReadAction(TVirtualStreamerInfo *info, TStreamerElement *element, Int_t type, UInt_t i, TStreamerInfo::TCompInfo_t *compinfo, Int_t offset)
static const Int_t kRegrouped
#define INLINE_TEMPLATE_ARGS
static const char * R__GetSymbolName(voidfunc func)
static TConfiguredAction GetConvertCollectionReadAction(Int_t oldtype, Int_t newtype, TConfiguration *conf)
static TConfiguredAction GetCollectionWriteAction(TVirtualStreamerInfo *info, TStreamerElement *, Int_t type, UInt_t i, TStreamerInfo::TCompInfo_t *compinfo, Int_t offset)
static TConfiguredAction GetConvertCollectionReadActionFrom(Int_t newtype, TConfiguration *conf)
#define ReadBasicType(name)
#define WriteBasicType(name)
void ReadBuffer(char *&buffer) override
#define R__LOCKGUARD(mutex)
Base class for text-based streamers like TBufferJSON or TBufferXML Special actions list will use meth...
Buffer base class used for serializing objects.
virtual void ReadWithNbits(Float_t *ptr, Int_t nbits)=0
virtual void ReadWithFactor(Float_t *ptr, Double_t factor, Double_t minvalue)=0
virtual Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr)=0
virtual Version_t ReadVersionForMemberWise(const TClass *cl=nullptr)=0
virtual TProcessID * ReadProcessID(UShort_t pidf)=0
Return the current Process-ID.
virtual UInt_t WriteVersionMemberWise(const TClass *cl, Bool_t useBcnt=kFALSE)=0
virtual void SetByteCount(UInt_t cntpos, Bool_t packInVersion=kFALSE)=0
virtual void ReadInt(Int_t &i)=0
TObject * GetParent() const
Return pointer to parent of this buffer.
virtual UShort_t GetPidOffset() const =0
@ kCannotHandleMemberWiseStreaming
virtual void ReadFastArrayDouble32(Double_t *d, Int_t n, TStreamerElement *ele=nullptr)=0
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
virtual void ReadFastArray(Bool_t *b, Int_t n)=0
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t ApplySequence(const TStreamerInfoActions::TActionSequence &sequence, void *object)=0
virtual void ReadFastArrayWithNbits(Float_t *ptr, Int_t n, Int_t nbits)=0
void SetBufferOffset(Int_t offset=0)
virtual void WriteFastArray(const Bool_t *b, Long64_t n)=0
virtual void ReadFastArrayWithFactor(Float_t *ptr, Int_t n, Double_t factor, Double_t minvalue)=0
virtual UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE)=0
virtual void ReadFastArrayFloat16(Float_t *f, Int_t n, TStreamerElement *ele=nullptr)=0
virtual void StreamObject(void *obj, const std::type_info &typeinfo, const TClass *onFileClass=nullptr)=0
TClass instances represent classes, structs and namespaces in the ROOT type system.
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=nullptr) const
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
void * NewArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
Bool_t HasCustomStreamerMember() const
The class has a Streamer method and it is implemented by the user or an older (not StreamerInfo based...
Int_t Size() const
Return size of object of this class.
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0, Bool_t isTransient=kFALSE) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
TVirtualStreamerInfo * GetConversionStreamerInfo(const char *onfile_classname, Int_t version) const
Return a Conversion StreamerInfo from the class 'classname' for version number 'version' to this clas...
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
Int_t GetEntriesFast() const
void AddAt(TObject *obj, Int_t idx) override
Add object at position ids.
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
TObject * At(Int_t idx) const override
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual UInt_t GetUniqueID() const
Return the unique object id.
@ kIsOnHeap
object is on heap
@ kNotDeleted
object has not been deleted
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
A TProcessID identifies a ROOT job in a unique way in time and space.
void PutObjectWithID(TObject *obj, UInt_t uid=0)
stores the object at the uid th slot in the table of objects The object uniqued is set as well as its...
const char * GetErrorMessage() const
virtual Int_t GetSize() const
Returns size of this element in bytes.
virtual const char * GetFullName() const
Return element name including dimensions, if any Note that this function stores the name into a stati...
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
virtual ULongptr_t GetMethod() const
Int_t GetArrayDim() const
TMemberStreamer * GetStreamer() const
Return the local streamer object.
TClass * GetNewClass() const
Int_t GetArrayLength() const
Double_t GetFactor() const
const char * GetTypeName() const
TClass * IsA() const override
virtual Bool_t IsBase() const
Return kTRUE if the element represent a base class.
virtual Bool_t HasCounter() const
void GetSequenceType(TString &type) const
Fill type with the string representation of sequence information including 'cached',...
Bool_t IsForVectorPtrLooper() const
static TActionSequence * CreateReadMemberWiseActions(TVirtualStreamerInfo *info, TVirtualCollectionProxy &proxy)
Create the bundle of the actions necessary for the streaming memberwise of the content described by '...
TLoopConfiguration * fLoopConfig
If this is a bundle of memberwise streaming action, this configures the looping.
void Print(Option_t *="") const override
This method must be overridden when a class wants to print itself.
static TActionSequence * CreateWriteMemberWiseActions(TVirtualStreamerInfo *info, TVirtualCollectionProxy &proxy)
Create the bundle of the actions necessary for the streaming memberwise of the content described by '...
SequencePtr(*)(TStreamerInfo *info, TVirtualCollectionProxy *collectionProxy, TClass *originalClass) SequenceGetter_t
ActionContainer_t fActions
void AddToSubSequence(TActionSequence *sequence, const TIDs &element_ids, Int_t offset, SequenceGetter_t create)
TActionSequence * CreateSubSequence(const std::vector< Int_t > &element_ids, size_t offset)
TActionSequence * CreateCopy()
void AddAction(action_t action, TConfiguration *conf)
void AddToOffset(Int_t delta)
TLoopConfiguration * Copy() const override
void Print() const override
TAssocLoopConfig(TVirtualCollectionProxy *proxy, Bool_t)
void * GetFirstAddress(void *start, const void *) const override
~TAssocLoopConfig() override
TConfiguration * Copy() override
TConfNoFactor(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, Int_t nbits)
TConfiguration * Copy() override
TConfSTLNoFactor(TConfigSTL *orig, Int_t nbits)
TConfSTLWithFactor(TConfigSTL *orig, Double_t factor, Double_t xmin)
TConfiguration * Copy() override
TConfWithFactor(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, Double_t factor, Double_t xmin)
TConfiguration * Copy() override
TConfigSTL(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, UInt_t length, TClass *oldClass, TMemberStreamer *streamer, const char *type_name, Bool_t isbase)
TConfigSTL(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, UInt_t length, TClass *oldClass, TClass *newClass, TMemberStreamer *streamer, const char *type_name, Bool_t isbase)
TVirtualCollectionProxy::CreateIterators_t fCreateWriteIterators
TConfigSTL(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, UInt_t length, TClass *oldClass, const char *type_name, Bool_t isbase)
TVirtualCollectionProxy::CreateIterators_t fCreateIterators
TVirtualCollectionProxy::DeleteIterator_t fDeleteIterator
TVirtualCollectionProxy::DeleteTwoIterators_t fDeleteTwoIterators
TMemberStreamer * fStreamer
TConfiguration * Copy() override
TVirtualCollectionProxy::CopyIterator_t fCopyIterator
TConfigSTL(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, UInt_t length, TClass *oldClass, TClass *newClass, const char *type_name, Bool_t isbase)
TVirtualArray * fOnfileObject
void Print() const override
TConfigurationPushDataCache(TVirtualStreamerInfo *info, TVirtualArray *onfileObject, Int_t offset)
void PrintDebug(TBuffer &buffer, void *object) const override
TConfiguration * Copy() override
void PrintDebug(TBuffer &b, void *addr) const override
TConfigurationUseCache(TVirtualStreamerInfo *info, TConfiguredAction &action, Bool_t repeat)
~TConfigurationUseCache() override
TConfiguredAction fAction
Base class of the Configurations.
virtual void SetMissing()
virtual void PrintDebug(TBuffer &buffer, void *object) const
virtual TConfiguration * Copy()
TVirtualStreamerInfo * fInfo
TStreamerInfo form which the action is derived.
Int_t fOffset
Offset within the object.
TCompInfo_t * fCompInfo
Access to compiled information (for legacy code)
UInt_t fLength
Number of element in a fixed length array.
UInt_t fElemId
Identifier of the TStreamerElement.
virtual void Print() const
virtual void AddToOffset(Int_t delta)
TLoopConfiguration * Copy() const override
void * GetFirstAddress(void *start_collection, const void *end_collection) const override
TVirtualCollectionProxy::CopyIterator_t fCopyIterator
void Print() const override
TVirtualCollectionProxy::Next_t fNext
TVirtualCollectionProxy::DeleteIterator_t fDeleteIterator
~TGenericLoopConfig() override
TGenericLoopConfig(TVirtualCollectionProxy *proxy, Bool_t read)
Base class of the Configurations for the member wise looping routines.
TVirtualCollectionProxy * fProxy
virtual void Print() const
virtual TVirtualCollectionProxy * GetCollectionProxy() const
virtual TLoopConfiguration * Copy() const =0
TLoopConfiguration * Copy() const override
void Print() const override
~TVectorLoopConfig() override
void * GetFirstAddress(void *start, const void *) const override
TVectorLoopConfig(TVirtualCollectionProxy *proxy, Long_t increment, Bool_t)
TClass * fClass
Not Owned.
TMemberStreamer * fStreamer
Not Owned.
TStreamerElement * fElem
Not Owned.
TClass * fNewClass
Not Owned.
Describes a persistent version of a class.
Int_t fNVirtualInfoLoc
! Number of virtual info location to update.
Int_t ReadBufferSTL(TBuffer &b, TVirtualCollectionProxy *cont, Int_t nc, Int_t eoffset, Bool_t v7=kTRUE)
The STL vector/list is deserialized from the buffer b.
void AddWriteAction(TStreamerInfoActions::TActionSequence *writeSequence, Int_t index, TCompInfo *compinfo)
Int_t fNfulldata
!number of elements
TCompInfo * fComp
![fNslots with less than fElements->GetEntries()*1.5 used] Compiled info
TStreamerInfoActions::TActionSequence * GetWriteMemberWiseActions(Bool_t forCollection)
TStreamerInfoActions::TActionSequence * fWriteMemberWiseVecPtr
! List of write action resulting from the compilation for use in member wise streaming.
TStreamerInfoActions::TActionSequence * fReadText
! List of text read action resulting from the compilation, used for JSON.
void ls(Option_t *option="") const override
List the TStreamerElement list and also the precomputed tables if option contains the string "incOrig...
void AddReadTextAction(TStreamerInfoActions::TActionSequence *readSequence, Int_t index, TCompInfo *compinfo)
Add a read text action for the given element.
TCompInfo ** fCompFull
![fElements->GetEntries()]
TObjArray * fElements
Array of TStreamerElements.
void AddReadMemberWiseVecPtrAction(TStreamerInfoActions::TActionSequence *readSequence, Int_t index, TCompInfo *compinfo)
Add a read action for the given element.
TStreamerInfoActions::TActionSequence * fReadMemberWise
! List of read action resulting from the compilation for use in member wise streaming.
Int_t fNdata
!number of optimized elements
TStreamerInfoActions::TActionSequence * fReadMemberWiseVecPtr
! List of read action resulting from the compilation for use in member wise streaming.
TStreamerInfoActions::TActionSequence * fReadObjectWise
! List of read action resulting from the compilation.
TClass * fClass
!pointer to class
TCompInfo ** fCompOpt
![fNdata]
TClass * GetClass() const override
static std::atomic< Int_t > fgCount
Number of TStreamerInfo instances.
void AddWriteTextAction(TStreamerInfoActions::TActionSequence *writeSequence, Int_t index, TCompInfo *compinfo)
void ComputeSize()
Compute total size of all persistent elements of the class.
void AddReadAction(TStreamerInfoActions::TActionSequence *readSequence, Int_t index, TCompInfo *compinfo)
Add a read action for the given element.
void AddWriteMemberWiseVecPtrAction(TStreamerInfoActions::TActionSequence *writeSequence, Int_t index, TCompInfo *compinfo)
This is for streaming via a TClonesArray (or a vector of pointers of this type).
Int_t fNumber
!Unique identifier
TStreamerInfoActions::TActionSequence * fWriteObjectWise
! List of write action resulting from the compilation.
Int_t fSize
!size of the persistent class
void Compile() override
loop on the TStreamerElement list regroup members with same type Store predigested information into l...
Int_t ReadBufferSkip(TBuffer &b, const T &arrptr, const TCompInfo *compinfo, Int_t kase, TStreamerElement *aElement, Int_t narr, Int_t eoffset)
Skip an element.
TStreamerInfoActions::TActionSequence * fWriteMemberWise
! List of write action resulting from the compilation for use in member wise streaming.
Int_t fNslots
!total number of slots in fComp.
Version_t fOldVersion
! Version of the TStreamerInfo object read from the file
TStreamerInfoActions::TActionSequence * fWriteText
! List of text write action resulting for the compilation, used for JSON.
TStreamerInfoActions::TActionSequence * GetReadMemberWiseActions(Bool_t forCollection)
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
const char * Data() const
Wrapper around an object and giving indirect access to its content even if the object is not of a cla...
RAII helper class that ensures that PushProxy() / PopProxy() are called when entering / leaving a C++...
Defines a common interface to inspect/change the contents of an object that represents a collection.
virtual Int_t GetProperties() const
Return miscallenous properties of the proxy (see TVirtualCollectionProxy::EProperty)
virtual ULong_t GetIncrement() const =0
Return the offset between two consecutive in-memory values (which depends on the sizeof() and alignme...
virtual TStreamerInfoActions::TActionSequence * GetReadMemberWiseActions(Int_t version)=0
void(* CreateIterators_t)(void *collection, void **begin_arena, void **end_arena, TVirtualCollectionProxy *proxy)
*begin_arena and *end_arena should contain the location of a memory arena of size fgIteratorArenaSize...
virtual EDataType GetType() const =0
If the value type is a fundamental data type, return its type (see enumeration EDataType).
@ kCustomAlloc
The collection has a custom allocator.
void *(* CopyIterator_t)(void *dest, const void *source)
Copy the iterator source into dest.
void *(* Next_t)(void *iter, const void *end)
iter and end should be pointers to an iterator to be incremented and an iterator that points to the e...
virtual TClass * GetValueClass() const =0
If the value type is a user-defined class, return a pointer to the TClass representing the value type...
virtual void Commit(void *)=0
Commits pending elements in a staging area (see Allocate() for more information).
virtual Int_t GetCollectionType() const =0
Return the type of the proxied collection (see enumeration TClassEdit::ESTLType)
virtual Next_t GetFunctionNext(Bool_t read=kTRUE)=0
Return a pointer to a function that can advance an iterator (see Next_t).
virtual DeleteTwoIterators_t GetFunctionDeleteTwoIterators(Bool_t read=kTRUE)=0
virtual UInt_t Size() const =0
Return the current number of elements in the container.
void(* DeleteTwoIterators_t)(void *begin, void *end)
void(* DeleteIterator_t)(void *iter)
If the size of the iterator is greater than fgIteratorArenaSize, call delete on the addresses; otherw...
static const Int_t fgIteratorArenaSize
The size of a small buffer that can be allocated on the stack to store iterator-specific information.
virtual CreateIterators_t GetFunctionCreateIterators(Bool_t read=kTRUE)=0
Return a pointer to a function that can create an iterator pair, where each iterator points to the be...
virtual void * Allocate(UInt_t n, Bool_t forceDelete)=0
Allocates space for storing at least n elements.
virtual TStreamerInfoActions::TActionSequence * GetConversionReadMemberWiseActions(TClass *oldClass, Int_t version)=0
virtual DeleteIterator_t GetFunctionDeleteIterator(Bool_t read=kTRUE)=0
Return a pointer to a function that can delete an iterator (pair) (see DeleteIterator_t).
virtual CopyIterator_t GetFunctionCopyIterator(Bool_t read=kTRUE)=0
Return a pointer to a function that can copy an iterator (see CopyIterator_t).
virtual Bool_t HasPointers() const =0
Return true if the content is of type 'pointer to'.
virtual TClass * GetCollectionClass() const
Return a pointer to the TClass representing the proxied container class.
static void DeleteIterator(void *iter)
static void * Next(void *iter, const void *end)
static void * CopyIterator(void *dest, const void *source)
Abstract Interface class describing Streamer information for one class.
static Bool_t GetStreamMemberWise()
Return whether the TStreamerInfos will save the collections in "member-wise" order whenever possible.
Bool_t IsCompiled() const
@ kUChar
Equal to TDataType's kchar.
TClass * IsA() const override
static Bool_t CanOptimize()
static function returning true if optimization can be on
virtual TObjArray * GetElements() const =0
virtual Int_t GetClassVersion() const =0
void ReadSTLObjectWiseStreamer(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t, UInt_t)
Int_t PushDataCacheVectorPtr(TBuffer &b, void *, const void *, const TConfiguration *conf)
Int_t WriteTextStreamer(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t PopDataCache(TBuffer &b, void *, const TConfiguration *)
void ReadSTLMemberWiseChangedClass(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t vers)
void ReadSTLObjectWiseFastArrayV2(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t vers, UInt_t start)
Int_t ReadBasicType< BitsMarker >(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t ReadStreamerLoop(TBuffer &buf, void *addr, const TConfiguration *config)
Direct copy of code from TStreamerInfo::WriteBufferAux, potentially can be used later for non-text st...
Int_t WriteTextBaseClass(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t GenericWriteAction(TBuffer &buf, void *addr, const TConfiguration *config)
void ReadArraySTLMemberWiseChangedClass(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t vers)
Int_t PopDataCacheVectorPtr(TBuffer &b, void *, const void *, const TConfiguration *)
Int_t ReadTextStreamer(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t GenericReadAction(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t WriteTextTObject(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t ReadBasicType_WithFactor(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t ReadTextBaseClass(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t UseCacheVectorPtrLoop(TBuffer &b, void *start, const void *end, const TConfiguration *conf)
Int_t ReadSTL(TBuffer &buf, void *addr, const TConfiguration *conf)
Int_t ReadTextTObject(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t PushDataCache(TBuffer &b, void *, const TConfiguration *conf)
Int_t UseCache(TBuffer &b, void *addr, const TConfiguration *conf)
std::vector< TIDNode > TIDs
Int_t WriteLoopInvalid(TBuffer &, void *, const void *, const TConfiguration *config)
void ReadSTLMemberWiseSameClass(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t vers)
Int_t WriteTextTNamed(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t ReadTextObject(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t UseCacheVectorLoop(TBuffer &b, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *conf)
Int_t ReadTextTNamed(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t WriteSTLp(TBuffer &buf, void *addr, const TConfiguration *config)
Direct copy of code from TStreamerInfo::WriteBufferAux, potentially can be used later for non-text st...
void ReadSTLObjectWiseFastArray(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t, UInt_t)
Int_t ReadTNamed(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t ReadBasicType_NoFactor(TBuffer &buf, void *addr, const TConfiguration *config)
bool IsDefaultVector(TVirtualCollectionProxy &proxy)
Int_t ReadLoopInvalid(TBuffer &, void *, const void *, const TConfiguration *config)
Int_t ReadTObject(TBuffer &buf, void *addr, const TConfiguration *config)
void ReadSTLObjectWiseStreamerV2(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t vers, UInt_t start)
void ReadArraySTLMemberWiseSameClass(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t vers)
void HandleReferencedTObject(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t PopDataCacheGenericCollection(TBuffer &b, void *, const void *, const TLoopConfiguration *, const TConfiguration *)
Int_t WriteStreamerLoop(TBuffer &buf, void *addr, const TConfiguration *config)
Direct copy of code from TStreamerInfo::WriteBufferAux, potentially can be used later for non-text st...
Int_t PushDataCacheGenericCollection(TBuffer &b, void *, const void *, const TLoopConfiguration *loopconfig, const TConfiguration *conf)
Int_t ReadTextTObjectBase(TBuffer &buf, void *addr, const TConfiguration *config)
ESelectLooper SelectLooper(TVirtualCollectionProxy &proxy)
Int_t ReadSTLp(TBuffer &buf, void *addr, const TConfiguration *config)
Direct copy of code from TStreamerInfo::WriteBufferAux, potentially can be used later for non-text st...
Int_t ReadTString(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t UseCacheGenericCollection(TBuffer &b, void *, const void *, const TLoopConfiguration *loopconfig, const TConfiguration *conf)
TVirtualCollectionProxy::Next_t Next_t
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *conf)
static void Action(TBuffer &buf, void *addr, Int_t nvalues)
static void Action(TBuffer &buf, void *addr, Int_t nvalues)
static void Action(TBuffer &buf, void *addr, Int_t nvalues)
static void SimpleRead(TBuffer &buf, void *addr, Int_t nvalues)
static Int_t ReadCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
static void SimpleReadDouble32(TBuffer &buf, void *addr, Int_t nvalues)
static Int_t ReadCollectionBasicType(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t ReadCollectionFloat16(TBuffer &buf, void *addr, const TConfiguration *conf)
static void SimpleReadFloat16(TBuffer &buf, void *addr, Int_t nvalues)
static Int_t ReadNumericalCollection(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *conf)
static void ConvertAction(From *items, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static void ConvertAction(From *items, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *)
static Int_t ReadBasicType(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t ReadCollectionFloat16(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t ReadBase(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t WriteBasicType(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t GenericRead(TBuffer &buf, void *, const void *, const TLoopConfiguration *loopconf, const TConfiguration *config)
static void SimpleReadFloat16(TBuffer &buf, void *addr)
static Int_t ReadNumericalCollection(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t GenericWrite(TBuffer &buf, void *, const void *, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t ReadCollectionBasicType(TBuffer &buf, void *addr, const TConfiguration *conf)
static void SimpleRead(TBuffer &buf, void *addr)
static Int_t ReadAction(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static void SimpleReadDouble32(TBuffer &buf, void *addr)
static Int_t ReadCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
void AddToOffset(Int_t delta) override
TBitsConfiguration(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset=0)
void PrintDebug(TBuffer &, void *) const override
TConfiguration * Copy() override
void SetMissing() override
TConfiguration * Copy() override
TGenericConfiguration(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset=0)
void PrintDebug(TBuffer &, void *) const override
static Int_t Action(TBuffer &buf, void *iter, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *iter, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *iter, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *iter, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t ReadAction(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t WriteBasicType(TBuffer &buf, void *iter, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t GenericWrite(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t ReadCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t ConvertCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t ReadCollectionBasicType(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t ReadBasicType(TBuffer &buf, void *iter, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t ReadBase(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t ReadCollectionFloat16(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t GenericRead(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *iter, const void *end, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *iter, const void *end, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *iter, const void *end, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *iter, const void *end, const TConfiguration *config)
static Int_t ReadAction(TBuffer &buf, void *start, const void *end, const TConfiguration *config)
static Int_t ReadBase(TBuffer &buf, void *start, const void *end, const TConfiguration *config)
static Int_t ReadBasicType(TBuffer &buf, void *iter, const void *end, const TConfiguration *config)
static Int_t GenericRead(TBuffer &buf, void *iter, const void *end, const TConfiguration *config)
static Int_t WriteBasicType(TBuffer &buf, void *iter, const void *end, const TConfiguration *config)
static Int_t GenericWrite(TBuffer &buf, void *iter, const void *end, const TConfiguration *config)