53 return isEmulated || (isVector && hasDefaultAlloc);
56 template <
typename From>
61 template <
typename From>
104 printf(
"StreamerInfoAction, class:%s, name=%s, fType[%d]=%d,"
105 " %s, offset=%d (%s), elemnId=%d \n",
121 printf(
"StreamerInfoAction, class:%s, name=%s, fType[%d]=%d,"
122 " %s, bufpos=%d, arr=%p, offset=%d (%s)\n",
132 printf(
"TLoopConfiguration: unconfigured\n");
164 printf(
"StreamerInfoAction, class:%s, name=%s, fType[%d]=%d,"
165 " %s, offset=%d (%s)\n",
205 std::unique_ptr<TStreamerInfoActions::TActionSequence>
fActions;
208 std::unique_ptr<TStreamerInfoActions::TActionSequence> actions) :
245 char *obj = (
char*)addr;
252 char *obj = (
char*)addr;
257 template <
typename T>
260 T *
x = (T*)( ((
char*)addr) + config->
fOffset );
279 uid = ( obj->
GetUniqueID() & 0xffffff) + (gpid<<24);
288 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
296 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
328 auto memoryClass = conf->fInMemoryClass;
329 auto onfileClass = conf->fOnfileClass;
331 char *
const where = (((
char*)addr)+config->
fOffset);
341 [[maybe_unused]]
auto memoryClass = conf->fInMemoryClass;
342 auto onfileClass = conf->fOnfileClass;
343 assert((memoryClass ==
nullptr || memoryClass == onfileClass)
344 &&
"Need to new TBufferFile::WriteClassBuffer overload to support this case");
346 char *
const where = (((
char*)addr)+config->
fOffset);
367 template <
typename T>
374 template <
typename T>
377 T *
x = (T *)(((
char *)addr) + config->
fOffset);
383 template <
typename Onfile,
typename Memory>
389 temp = (Onfile)(*(Memory*)( ((
char*)addr) + config->
fOffset ));
397 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
405 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
413 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
421 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
428 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
435 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
444 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
451 void *
x = (
void *)(((
char *)addr) + config->
fOffset);
501 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) {};
505 template <
typename T>
524 template <
typename T>
542 ((
TString*)(((
char*)addr)+config->
fOffset))->TString::Streamer(buf);
552 ((
TString*)(((
char*)addr)+config->
fOffset))->TString::Streamer(buf);
562 ((
TObject*)(((
char*)addr)+config->
fOffset))->TObject::Streamer(buf);
572 ((
TObject*)(((
char*)addr)+config->
fOffset))->TObject::Streamer(buf);
633 TConfiguration(info,id,compinfo,
offset,
length),
fOldClass(oldClass),
fNewClass(oldClass),
fStreamer(0),
fTypeName(type_name),
fIsSTLBase(isbase),
637 TConfiguration(info,id,compinfo,
offset,
length),
fOldClass(oldClass),
fNewClass(newClass),
fStreamer(0),
fTypeName(type_name),
fIsSTLBase(isbase),
641 TConfiguration(info,id,compinfo,
offset,
length),
fOldClass(oldClass),
fNewClass(oldClass),
fStreamer(streamer),
fTypeName(type_name),
fIsSTLBase(isbase),
644 TConfigSTL(
Bool_t read,
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) :
645 TConfiguration(info,id,compinfo,
offset,
length),
fOldClass(oldClass),
fNewClass(newClass),
fStreamer(streamer),
fTypeName(type_name),
fIsSTLBase(isbase),
679 printf(
"TVectorLoopConfig: increment=%ld\n",
fIncrement);
751 void*
GetFirstAddress(
void *start_collection,
const void *end_collection)
const override
757 void *arr0 =
fNext(iter,end_collection);
758 if (iter != &iterator[0]) {
787 void* alternative = oldProxy->
Allocate(nobjects,
true);
793 void *begin = &(startbuf[0]);
794 void *end = &(endbuf[0]);
799 if (begin != &(startbuf[0])) {
804 oldProxy->
Commit(alternative);
819 void* env = oldProxy->
Allocate(nobjects,
true);
821 if (nobjects || vers < 7 ) {
852 int objectSize = oldClass->
Size();
853 char *obj = (
char*)addr;
854 char *endobj = obj + conf->
fLength*objectSize;
856 for(; obj<endobj; obj+=objectSize) {
860 void* alternative = oldProxy->
Allocate(nobjects,
true);
864 void *begin = &(startbuf[0]);
865 void *end = &(endbuf[0]);
870 if (begin != &(startbuf[0])) {
875 oldProxy->
Commit(alternative);
888 int objectSize = oldClass->
Size();
889 char *obj = (
char*)addr;
890 char *endobj = obj + conf->
fLength*objectSize;
892 for(; obj<endobj; obj+=objectSize) {
896 void* env = oldProxy->
Allocate(nobjects,
true);
898 if (nobjects || vers < 7 ) {
921 Error(
"ReadSTLMemberWiseChangedClass",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
922 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)" );
923 }
else if (newClass && oldClass){
933 void* alternative = newProxy->
Allocate(nobjects,
true);
938 void *begin = &(startbuf[0]);
939 void *end = &(endbuf[0]);
944 if (begin != &(startbuf[0])) {
949 newProxy->
Commit(alternative);
965 Error(
"ReadSTLMemberWiseChangedClass",
"Unfortunately, version %d of TStreamerInfo (used in %s) did not record enough information to convert a %s into a %s.",
966 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)" );
967 }
else if (newClass && oldClass) {
974 int objectSize = newClass->
Size();
975 char *obj = (
char*)addr;
976 char *endobj = obj + conf->
fLength*objectSize;
978 for(; obj<endobj; obj+=objectSize) {
982 void* alternative = newProxy->
Allocate(nobjects,
true);
987 void *begin = &(startbuf[0]);
988 void *end = &(endbuf[0]);
993 if (begin != &(startbuf[0])) {
998 newProxy->
Commit(alternative);
1053 assert(newClass && onfileClass && newClass == onfileClass &&
1054 "Class level transformation while writing is not yet supported");
1056 if (newClass && onfileClass) {
1070 void *begin = &(startbuf[0]);
1071 void *end = &(endbuf[0]);
1076 if (begin != &(startbuf[0])) {
1099 assert(newClass && onfileClass && newClass == onfileClass &&
1100 "Class level transformation while writing is not yet supported");
1102 if (newClass && onfileClass) {
1109 int objectSize = newClass->
Size();
1110 char *obj = (
char*)addr;
1111 char *endobj = obj + conf->
fLength * objectSize;
1113 for (; obj < endobj; obj += objectSize) {
1121 void *begin = &(startbuf[0]);
1122 void *end = &(endbuf[0]);
1127 if (begin != &(startbuf[0])) {
1156 memberwise(buf,((
char*)addr)+config->
fOffset,config, vers);
1158 objectwise(buf,((
char*)addr)+config->
fOffset,config, vers, start);
1179 && !(strspn(aElement->
GetTitle(),
"||") == 2)
1183 memberwise(buf, ((
char *)addr) + config->
fOffset, config);
1186 objectwise(buf, ((
char *)addr) + config->
fOffset, config);
1192 template <
typename From,
typename To>
1199 *(To*)( ((
char*)addr) + config->
fOffset ) = (To)temp;
1204 template <
typename To>
1216 *(To*)( ((
char*)addr) + config->
fOffset ) = (To)temp;
1221 template <
typename From,
typename To>
1229 *(To*)( ((
char*)addr) + config->
fOffset ) = (To)temp;
1234 template <
typename From,
typename To>
1242 *(To*)( ((
char*)addr) + config->
fOffset ) = (To)temp;
1260 printf(
"StreamerInfoAction, class:%s, PushDataCache offset=%d\n",
1263 printf(
"StreamerInfoAction, class:%s, PopDataCache offset=%d\n",
1270 printf(
"StreamerInfoAction, class:%s, %sDataCache, bufpos=%d, arr=%p, offset=%d, onfileObject=%p\n",
1283 b.PushDataCache( onfileObject );
1294 b.PushDataCache( onfileObject );
1307 onfileObject->SetSize(
n);
1308 b.PushDataCache( onfileObject );
1345 fprintf(stdout,
"StreamerInfoAction, class:%s, name=%s, fType[%d]=%d,"
1346 " %s, bufpos=%d, arr=%p, eoffset=%d, Redirect=%p\n",
1348 aElement->
ClassName(),
b.Length(),addr, 0,
b.PeekDataCache() ?
b.PeekDataCache()->GetObjectAt(0) : 0);
1365 Int_t bufpos =
b.Length();
1370 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",info->
GetName(),aElement->
GetName());
1371 char *ptr = (
char*)addr;
1378 b.SetBufferOffset(bufpos);
1386 Int_t bufpos =
b.Length();
1392 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",info->
GetName(),aElement->
GetName());
1393 char *ptr = (
char*)start;
1394 UInt_t n = (((
void**)end)-((
void**)start));
1398 void *cached_start = (*cached)[0];
1399 void *cached_end = ((
char*)cached_start) + cached->
fSize * cached_config.
fIncrement;
1400 config->
fAction(
b,cached_start,cached_end,&cached_config);
1404 b.SetBufferOffset(bufpos);
1413 Int_t bufpos =
b.Length();
1418 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",info->
GetName(),aElement->
GetName());
1419 char *ptr = (
char*)start;
1424 void *cached_start = (*cached)[0];
1425 void *cached_end = ((
char*)cached_start) + cached->
fSize * cached_config.
fIncrement;
1426 config->
fAction(
b,cached_start,cached_end,&cached_config);
1430 b.SetBufferOffset(bufpos);
1439 Int_t bufpos =
b.Length();
1446 Warning(
"ReadBuffer",
"Skipping %s::%s because the cache is missing.",info->
GetName(),aElement->
GetName());
1451 void *cached_start = (*cached)[0];
1452 void *cached_end = ((
char*)cached_start) + cached->
fSize * cached_config.
fIncrement;
1453 config->
fAction(
b,cached_start,cached_end,&cached_config);
1457 b.SetBufferOffset(bufpos);
1507 template<
typename Looper>
1513 static std::unique_ptr<TStreamerInfoActions::TActionSequence>
1516 std::unique_ptr<TLoopConfiguration> localLoopConfig{ loopConfig ? loopConfig->
Copy() :
nullptr };
1517 std::unique_ptr<TStreamerInfoActions::TActionSequence> actions(
1525 static std::unique_ptr<TStreamerInfoActions::TActionSequence>
1528 std::unique_ptr<TLoopConfiguration> localLoopConfig{ loopConfig ? loopConfig->
Copy() :
nullptr };
1529 std::unique_ptr<TStreamerInfoActions::TActionSequence> actions(
1537 auto actions = conf->fActions.get();
1548 Looper::template LoopOverCollection< ReadViaExtStreamer >(buf, start, end, loopconfig, config);
1558 Looper::template LoopOverCollection< WriteViaExtStreamer >(buf, start, end, loopconfig, config);
1570 (*pstreamer)(buf, (
char *) addr + ioffset , *counter);
1574 template<
bool kIsTextT>
1587 char** pp = (
char**) ((
char *) addr + ioffset );
1629 char** pp = (
char**) ((
char *) addr + ioffset );
1653 char**
r = (
char**) pp[ndx];
1663 template<
bool kIsTextT,
typename... Ts>
1672 Looper::template LoopOverCollection< StreamerLoopExternal > (buf, start, args..., config);
1692 if (fileVersion > 51508) {
1695 Looper::template LoopOverCollection< WriteStreamerLoopPoly<kIsTextT> > (buf, start, args..., config);
1700 Looper::template LoopOverCollection< ReadStreamerLoopStatic > (buf, start, args..., config);
1709 template<
bool kIsTextT>
1726 char **pp = (
char **)((
char *)addr + ioffset );
1779 pp[ndx] = (
char *)cl->
NewArray(vlen);
1781 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1788 pp[ndx] = (
char *)
new char *[vlen];
1790 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1794 memset(pp[ndx], 0, vlen *
sizeof(
char *));
1824 char **pp = (
char **)((
char *)addr + ioffset );
1874 pp[ndx] = (
char *)cl->
NewArray(vlen);
1876 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1883 pp[ndx] = (
char *)
new char *[vlen];
1885 Error(
"ReadBuffer",
"Memory allocation failed!\n");
1889 memset(pp[ndx], 0, vlen *
sizeof(
char *));
1902 char **
r = (
char **)pp[ndx];
1906 r[
v] = (
char *)cl->
New();
1920 template<
bool kIsTextT,
typename... Ts>
1933 Looper::template LoopOverCollection< StreamerLoopExternal > (buf, start, args..., config);
1954 if (fileVersion > 51508) {
1958 Looper::template LoopOverCollection< ReadStreamerLoopPoly<kIsTextT> > (buf, start, args..., config);
1963 Looper::template LoopOverCollection< ReadStreamerLoopStatic > (buf, start, args..., config);
1977 template <Int_t (*iter_action)(TBuffer&,
void *,const TConfiguration*)>
1980 iter_action(buf, start, config);
1989 template <
bool kIsText>
1991 template <
bool kIsText>
1994 template <Int_t (*iter_action)(TBuffer&,
void *,const TConfiguration*)>
2000 for(
void *iter = start; iter != end; iter = (
char*)iter + incr ) {
2001 iter_action(buf, iter, config);
2006 template <
typename T>
2010 iter = (
char*)iter + config->
fOffset;
2011 end = (
char*)end + config->
fOffset;
2012 for(; iter != end; iter = (
char*)iter + incr ) {
2013 T *
x = (T*) ((
char*) iter);
2019 template <
typename From,
typename To>
2026 iter = (
char*)iter + config->
fOffset;
2027 end = (
char*)end + config->
fOffset;
2028 for(; iter != end; iter = (
char*)iter + incr ) {
2030 *(To*)( ((
char*)iter) ) = (To)temp;
2036 template <
typename To>
2043 iter = (
char*)iter + config->
fOffset;
2044 end = (
char*)end + config->
fOffset;
2045 for(; iter != end; iter = (
char*)iter + incr ) {
2052 *(To*)( ((
char*)iter) ) = (To)temp;
2058 template <
typename From,
typename To>
2066 iter = (
char*)iter + config->
fOffset;
2067 end = (
char*)end + config->
fOffset;
2068 for(; iter != end; iter = (
char*)iter + incr ) {
2070 *(To*)( ((
char*)iter) ) = (To)temp;
2076 template <
typename From,
typename To>
2084 iter = (
char*)iter + config->
fOffset;
2085 end = (
char*)end + config->
fOffset;
2086 for(; iter != end; iter = (
char*)iter + incr ) {
2088 *(To*)( ((
char*)iter) ) = (To)temp;
2094 template <
typename T>
2098 iter = (
char*)iter + config->
fOffset;
2099 end = (
char*)end + config->
fOffset;
2100 for(; iter != end; iter = (
char*)iter + incr ) {
2101 T *
x = (T*) ((
char*) iter);
2107 template <
typename Onfile,
typename Memory>
2112 iter = (
char*)iter + config->
fOffset;
2113 end = (
char*)end + config->
fOffset;
2114 for(; iter != end; iter = (
char*)iter + incr ) {
2116 Onfile temp = (Onfile)(*(Memory*)((
char*) iter));
2123 template <
typename Onfile,
typename Memory>
2129 iter = (
char*)iter + config->
fOffset;
2130 end = (
char*)end + config->
fOffset;
2131 for(; iter != end; iter = (
char*)iter + incr ) {
2133 Onfile temp = (Onfile)(*(Memory*)((
char*) iter));
2140 template <
typename Onfile,
typename Memory>
2146 iter = (
char*)iter + config->
fOffset;
2147 end = (
char*)end + config->
fOffset;
2148 for(; iter != end; iter = (
char*)iter + incr ) {
2150 Onfile temp = (Onfile)(*(Memory*)((
char*) iter));
2163 UInt_t n = (((
char*)end)-((
char*)start))/incr;
2164 char **arrptr =
new char*[
n];
2166 for(
void *iter = start; iter != end; iter = (
char*)iter + incr, ++i ) {
2167 arrptr[i] = (
char*)iter;
2180 UInt_t n = (((
char*)end)-((
char*)start))/incr;
2181 char **arrptr =
new char*[
n];
2183 for(
void *iter = start; iter != end; iter = (
char*)iter + incr, ++i ) {
2184 arrptr[i] = (
char*)iter;
2196 UInt_t n = (((
char*)end)-((
char*)start))/incr;
2197 char **arrptr =
new char*[
n];
2199 for(
void *iter = start; iter != end; iter = (
char*)iter + incr, ++i ) {
2200 arrptr[i] = (
char*)iter;
2212 UInt_t n = (((
char*)end)-((
char*)start))/incr;
2213 char **arrptr =
new char*[
n];
2215 for(
void *iter = start; iter != end; iter = (
char*)iter + incr, ++i ) {
2216 arrptr[i] = (
char*)iter;
2223 template <
typename T>
2232 std::vector<T> *
const vec = (std::vector<T>*)(((
char*)addr)+config->
fOffset);
2235 vec->resize(nvalues);
2237#ifdef R__VISUAL_CPLUSPLUS
2243 T *begin = vec->data();
2250 template <
typename T>
2258 std::vector<T> *
const vec = (std::vector<T>*)(((
char*)addr)+config->
fOffset);
2259 Int_t nvalues = vec->size();
2262 T *begin = vec->data();
2277 std::vector<float> *
const vec = (std::vector<float>*)(((
char*)addr)+config->
fOffset);
2280 vec->resize(nvalues);
2282#ifdef R__VISUAL_CPLUSPLUS
2288 float *begin = vec->data();
2302 std::vector<float> *
const vec = (std::vector<float>*)(((
char*)addr)+config->
fOffset);
2303 Int_t nvalues = vec->size();
2306 float *begin = vec->data();
2321 std::vector<double> *
const vec = (std::vector<double>*)(((
char*)addr)+config->
fOffset);
2324 vec->resize(nvalues);
2326#ifdef R__VISUAL_CPLUSPLUS
2332 double *begin = vec->data();
2346 std::vector<double> *
const vec = (std::vector<double>*)(((
char*)addr)+config->
fOffset);
2347 Int_t nvalues = vec->size();
2350 double *begin = vec->data();
2357 template <
typename From,
typename To>
2367 std::vector<To> *
const vec = (std::vector<To>*)(((
char*)addr)+config->
fOffset);
2370 vec->resize(nvalues);
2372 From *temp =
new From[nvalues];
2374 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2375 (*vec)[ind] = (To)temp[ind];
2384 template <
typename From,
typename To>
2394 std::vector<To> *
const vec = (std::vector<To>*)(((
char*)addr)+config->
fOffset);
2397 vec->resize(nvalues);
2399 From *temp =
new From[nvalues];
2401 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2402 (*vec)[ind] = (To)temp[ind];
2411 template <
typename To>
2420 std::vector<To> *
const vec = (std::vector<To>*)(((
char*)addr)+config->
fOffset);
2423 vec->resize(nvalues);
2427 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2428 (*vec)[ind] = (To)temp[ind];
2436 template <
typename Memory,
typename Onfile>
2445 std::vector<Memory> *
const vec = (std::vector<Memory>*)(((
char*)addr)+config->
fOffset);
2446 Int_t nvalues = vec->size();
2451 Onfile *temp =
new Onfile[nvalues];
2452 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2453 temp[ind] = (Onfile)((*vec)[ind]);
2470 template <
bool kIsText>
2472 template <
bool kIsText>
2475 static std::unique_ptr<TStreamerInfoActions::TActionSequence>
2478 using unique_ptr = std::unique_ptr<TStreamerInfoActions::TActionSequence>;
2482 static std::unique_ptr<TStreamerInfoActions::TActionSequence>
2485 using unique_ptr = std::unique_ptr<TStreamerInfoActions::TActionSequence>;
2489 template <Int_t (*action)(TBuffer&,
void *,const TConfiguration*)>
2492 for(
void *iter = start; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2493 action(buf, *(
void**)iter, config);
2501 auto actions = conf->fActions.get();
2507 template <
typename T>
2512 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2513 T *
x = (T*)( ((
char*) (*(
void**)iter) ) +
offset );
2519 template <
typename From,
typename To>
2526 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2528 To *
x = (To*)( ((
char*) (*(
void**)iter) ) +
offset );
2535 template <
typename To>
2542 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2549 To *
x = (To*)( ((
char*) (*(
void**)iter) ) +
offset );
2556 template <
typename From,
typename To>
2564 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2566 To *
x = (To*)( ((
char*) (*(
void**)iter) ) +
offset );
2573 template <
typename From,
typename To>
2581 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2583 To *
x = (To*)( ((
char*) (*(
void**)iter) ) +
offset );
2590 template <
typename T>
2595 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2596 T *
x = (T*)( ((
char*) (*(
void**)iter) ) +
offset );
2602 template <
typename To,
typename From>
2608 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2609 From *from = (From*)( ((
char*) (*(
void**)iter) ) +
offset );
2610 To to = (To)(*from);
2617 template <
typename To,
typename From>
2624 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2625 From *from = (From*)( ((
char*) (*(
void**)iter) ) +
offset );
2626 To to = (To)(*from);
2632 template <
typename To,
typename From>
2639 for(; iter != end; iter = (
char*)iter +
sizeof(
void*) ) {
2640 From *from = (From*)( ((
char*) (*(
void**)iter) ) +
offset );
2641 To to = (To)(*from);
2669 LoopOverCollection< ReadViaExtStreamer >(buf, start, end, config);
2679 LoopOverCollection< WriteViaExtStreamer >(buf, start, end, config);
2687 Int_t n = ( ((
void**)end) - ((
void**)iter) );
2688 char **arr = (
char**)iter;
2694 Int_t n = ( ((
void**)end) - ((
void**)iter) );
2695 char **arr = (
char**)iter;
2706 template <
typename T>
2722 template <
typename T>
2738 template <
typename T>
2754 template <
typename T,
void (*action)(TBuffer&,
void *,Int_t)>
2769 void* alternative = newProxy->
Allocate(nvalues,
true);
2773 void *begin = &(startbuf[0]);
2774 void *end = &(endbuf[0]);
2779 action(buf,begin,nvalues);
2781 if (begin != &(startbuf[0])) {
2786 newProxy->
Commit(alternative);
2792 template <
void (*action)(TBuffer&,
void*, const TStreamerElement*)>
2796 while( (addr = next(iter, end)) )
2798 action(buf, addr, elem);
2802 template <
typename Memory,
typename Onfile,
void (*action)(TBuffer&,
void*, Int_t, const TStreamerElement *elem)>
2805 Onfile *temp =
new Onfile[nvalues];
2808 while( (addr = next(iter, end)) )
2810 temp[ind] = (Onfile)*(Memory*)addr;
2813 action(buf, temp, nvalues, elem);
2817 template <
typename T,
void (*action)(TBuffer&,
void *, const
void *, Next_t, Int_t, const TStreamerElement *elem)>
2827 void *collection = ((
char*)addr)+config->
fOffset;
2835 void *begin = &(startbuf[0]);
2836 void *end = &(endbuf[0]);
2841 if (begin != &(startbuf[0])) {
2853 return ReadNumericalCollection<Float_t,SimpleReadFloat16 >(buf,addr,conf);
2858 return WriteNumericalCollection<Float_t,LoopOverCollection<SimpleWriteFloat16> >(buf,addr,conf);
2863 return ReadNumericalCollection<Double_t,SimpleReadDouble32 >(buf,addr,conf);
2868 return WriteNumericalCollection<Double_t,LoopOverCollection<SimpleWriteDouble32> >(buf,addr,conf);
2871 template <
typename T>
2874 return ReadNumericalCollection<T,SimpleRead<T> >(buf,addr,conf);
2877 template <
typename T>
2880 return WriteNumericalCollection<T, LoopOverCollection<SimpleWrite<T>> >(buf,addr,conf);
2883 template <
typename From,
typename To>
2887 From *temp =
new From[nvalues];
2889 To *vec = (To*)addr;
2890 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2891 vec[ind] = (To)temp[ind];
2897 template <
typename From,
typename To>
2901 From *temp =
new From[nvalues];
2903 To *vec = (To*)addr;
2904 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2905 vec[ind] = (To)temp[ind];
2911 template <
typename From,
typename To>
2915 From *temp =
new From[nvalues];
2918 To *vec = (To*)addr;
2919 for(
Int_t ind = 0; ind < nvalues; ++ind) {
2920 vec[ind] = (To)temp[ind];
2925 template <
typename From,
typename To>
2929 return ReadNumericalCollection<To,ConvertRead<From,To>::Action >(buf,addr,conf);
2933 template <
typename Memory,
typename Onfile>
2937 return WriteNumericalCollection<Memory, ConvertLoopOverCollection<Memory, Onfile, ArrayWrite<Onfile>> >(buf,addr,conf);
2940 template <
typename Memory,
typename Onfile>
2944 return WriteNumericalCollection<Memory, ConvertLoopOverCollection<Memory,Onfile, ArrayWriteCompressed> >(buf,addr,conf);
2948 template <
typename Memory,
typename Onfile>
2952 return WriteNumericalCollection<Memory, ConvertLoopOverCollection<Memory,Onfile, ArrayWriteCompressed> >(buf,addr,conf);
2961 template <
bool kIsText>
2963 template <
bool kIsText>
2966 template <
typename T>
2977 while( (addr = next(iter,end)) ) {
2978 T *
x = (T*)( ((
char*)addr) +
offset );
2981 if (iter != &iterator[0]) {
2987 template <
typename T>
2998 while( (addr = next(iter,end)) ) {
2999 T *
x = (T*)( ((
char*)addr) +
offset );
3002 if (iter != &iterator[0]) {
3008 template <
typename To,
typename From>
3020 while( (addr = next(iter,end)) ) {
3021 From *
x = (From*)( ((
char*)addr) +
offset );
3025 if (iter != &iterator[0]) {
3032 template <Int_t (*iter_action)(TBuffer&,
void *,const TConfiguration*)>
3043 while( (addr = next(iter,end)) ) {
3044 iter_action(buf, addr, config);
3046 if (iter != &iterator[0]) {
3052 template <
typename From,
typename To>
3064 while( (addr = next(iter,end)) ) {
3065 To *
x = (To*)( ((
char*)addr) +
offset );
3069 if (iter != &iterator[0]) {
3085 while( (addr = next(iter,end)) ) {
3086 From *
x = (From*)( ((
char*)addr) +
offset );
3090 if (iter != &iterator[0]) {
3096 template <
typename From,
typename To>
3109 while( (addr = next(iter,end)) ) {
3110 To *
x = (To*)(addr);
3126 while( (addr = next(iter,end)) ) {
3127 From *
x = (From*)(addr);
3134 template <
typename From,
typename To,
template <
typename F,
typename T>
class Converter = Generic >
3144 From *items =
new From[nvalues];
3146 Converter<From,To>::ConvertAction(items,start,end,loopconfig,config);
3152 template <
typename To>
3163 UInt_t *items = items_storage;
3171 while( (addr = next(iter,end)) ) {
3176 To *
x = (To*)( ((
char*)addr) +
offset );
3180 if (iter != &iterator[0]) {
3184 delete [] items_storage;
3189 template <
typename From,
typename To,
template <
typename F,
typename T>
class Converter >
3201 From *items =
new From[nvalues];
3203 Converter<From,To>::ConvertAction(items,start,end,loopconfig,config);
3209 template <
typename From,
typename To,
template <
typename F,
typename T>
class Converter >
3221 From *items =
new From[nvalues];
3223 Converter<From,To>::ConvertAction(items,start,end,loopconfig,config);
3229 template <
typename Onfile,
typename Memory,
template <
typename F,
typename T>
class Converter = Generic >
3239 Onfile *items =
new Onfile[nvalues];
3240 Converter<Memory,Onfile>::WriteConvertAction(start, end, loopconfig, config, items);
3247 template <
typename Onfile,
typename Memory,
template <
typename F,
typename T>
class Converter >
3259 Onfile *items =
new Onfile[nvalues];
3260 Converter<Memory,Onfile>::WriteConvertAction(start, end, loopconfig, config, items);
3261 R__ASSERT(
false &&
"Not yet implemented");
3269 template <
typename Onfile,
typename Memory,
template <
typename F,
typename T>
class Converter >
3281 Onfile *items =
new Onfile[nvalues];
3282 Converter<Memory,Onfile>::WriteConvertAction(start, end, loopconfig, config, items);
3283 R__ASSERT(
false &&
"Not yet implemented");
3296 return GenericRead(buf,start,end,loopconfig, config);
3321 template <
typename T>
3352 template <
typename ActionHolder>
3367 void* alternative = newProxy->
Allocate(nvalues,
true);
3371 void *begin = &(startbuf[0]);
3372 void *end = &(endbuf[0]);
3378 ActionHolder::Action(buf,begin,end,&loopconf,config);
3380 if (begin != &(startbuf[0])) {
3385 newProxy->
Commit(alternative);
3391 template <
typename ActionHolder>
3401 void *collection = ((
char*)addr)+config->
fOffset;
3409 void *begin = &(startbuf[0]);
3410 void *end = &(endbuf[0]);
3416 ActionHolder::Action(buf,begin,end,&loopconf,config);
3418 if (begin != &(startbuf[0])) {
3430 return ReadNumericalCollection<ConvertBasicType<NoFactorMarker<float>, float,
Numeric > >(buf,addr,conf);
3435 return WriteNumericalCollection<WriteConvertBasicType<NoFactorMarker<float>, float,
Numeric > >(buf,addr,conf);
3440 return ReadNumericalCollection<ConvertBasicType<float,double,Numeric > >(buf,addr,conf);
3447 return WriteNumericalCollection<WriteConvertBasicType<float, double ,Numeric > >(buf,addr,conf);
3452 template <
typename T>
3457 return ReadNumericalCollection<ConvertBasicType<T,T,Numeric > >(buf,addr,conf);
3460 template <
typename T>
3465 return WriteNumericalCollection<WriteConvertBasicType<T,T,Numeric > >(buf,addr,conf);
3468 template <
typename From,
typename To>
3473 return ReadNumericalCollection<ConvertBasicType<From,To,Numeric > >(buf,addr,conf);
3477 template <
typename Memory,
typename Onfile>
3482 return WriteNumericalCollection<WriteConvertBasicType<Memory,Onfile,Numeric > >(buf,addr,conf);
3490template <
typename Looper,
typename From>
3517template <
class Looper>
3539 case TStreamerInfo::kBits:
Error(
"GetNumericCollectionReadAction",
"There is no support for kBits outside of a TObject.");
break;
3568 Fatal(
"GetNumericCollectionReadAction",
"Is confused about %d",
type);
3573template <
typename Looper,
typename From>
3596 Error(
"GetConvertCollectionReadActionFrom",
"UNEXPECTED: newtype == %d", newtype);
3604template <
typename Looper>
3609 return GetConvertCollectionReadActionFrom<Looper,Bool_t>(newtype, conf );
3611 return GetConvertCollectionReadActionFrom<Looper,Char_t>(newtype, conf );
3613 return GetConvertCollectionReadActionFrom<Looper,Short_t>(newtype, conf );
3615 return GetConvertCollectionReadActionFrom<Looper,Int_t>(newtype, conf );
3617 return GetConvertCollectionReadActionFrom<Looper,Long_t>(newtype, conf );
3619 return GetConvertCollectionReadActionFrom<Looper,Long64_t>(newtype, conf );
3621 return GetConvertCollectionReadActionFrom<Looper,Float_t>( newtype, conf );
3623 return GetConvertCollectionReadActionFrom<Looper,Double_t>(newtype, conf );
3625 return GetConvertCollectionReadActionFrom<Looper,UChar_t>(newtype, conf );
3627 return GetConvertCollectionReadActionFrom<Looper,UShort_t>(newtype, conf );
3629 return GetConvertCollectionReadActionFrom<Looper,UInt_t>(newtype, conf );
3631 return GetConvertCollectionReadActionFrom<Looper,ULong_t>(newtype, conf );
3633 return GetConvertCollectionReadActionFrom<Looper,ULong64_t>(newtype, conf );
3635 return GetConvertCollectionReadActionFrom<Looper,NoFactorMarker<Float16_t> >( newtype, conf );
3637 return GetConvertCollectionReadActionFrom<Looper,NoFactorMarker<Double32_t> >( newtype, conf );
3639 Error(
"GetConvertCollectionReadAction",
"There is no support for kBits outside of a TObject.");
3644 Error(
"GetConvertCollectionReadAction",
"UNEXPECTED: oldtype == %d", oldtype);
3649template <
class Looper>
3675 if (!nbits) nbits = 12;
3708 auto baseActions = Looper::CreateReadActionSequence(*baseinfo, loopConfig);
3709 baseActions->AddToOffset(baseEl->
GetOffset());
3731 return TConfiguredAction( Looper::template LoopOverCollection<ReadViaClassBuffer>,
3734 return TConfiguredAction( Looper::template LoopOverCollection<ReadViaClassBuffer>,
3774 if (!nbits) nbits = 12;
3775 return GetCollectionReadConvertAction<Looper,NoFactorMarker<float> >(element->
GetNewType(),
new TConfNoFactor(info,i,compinfo,
offset,nbits) );
3786 return GetCollectionReadConvertAction<Looper,NoFactorMarker<double> >(element->
GetNewType(),
new TConfNoFactor(info,i,compinfo,
offset,nbits) );
3797template <
typename Looper,
typename From>
3800 switch (onfileType) {
3819 Error(
"GetConvertCollectionWriteActionFrom",
"Write Conversion to Float16_t not yet supported");
3823 Error(
"GetConvertCollectionWriteActionFrom",
"Write Conversion to Double32_t not yet supported");
3829 Error(
"GetConvertCollectionWriteActionFrom",
"UNEXPECTED: onfileType/oldtype == %d", onfileType);
3837template <
typename Looper>
3840 switch (memoryType) {
3842 return GetConvertCollectionWriteActionFrom<Looper,Bool_t>(onfileType, conf );
3844 return GetConvertCollectionWriteActionFrom<Looper,Char_t>(onfileType, conf );
3846 return GetConvertCollectionWriteActionFrom<Looper,Short_t>(onfileType, conf );
3848 return GetConvertCollectionWriteActionFrom<Looper,Int_t>(onfileType, conf );
3850 return GetConvertCollectionWriteActionFrom<Looper,Long_t>(onfileType, conf );
3852 return GetConvertCollectionWriteActionFrom<Looper,Long64_t>(onfileType, conf );
3854 return GetConvertCollectionWriteActionFrom<Looper,Float_t>(onfileType, conf );
3856 return GetConvertCollectionWriteActionFrom<Looper,Double_t>(onfileType, conf );
3858 return GetConvertCollectionWriteActionFrom<Looper,UChar_t>(onfileType, conf );
3860 return GetConvertCollectionWriteActionFrom<Looper,UShort_t>(onfileType, conf );
3862 return GetConvertCollectionWriteActionFrom<Looper,UInt_t>(onfileType, conf );
3864 return GetConvertCollectionWriteActionFrom<Looper,ULong_t>(onfileType, conf );
3866 return GetConvertCollectionWriteActionFrom<Looper,ULong64_t>(onfileType, conf );
3868 return GetConvertCollectionWriteActionFrom<Looper,Float16_t>(onfileType, conf );
3870 return GetConvertCollectionWriteActionFrom<Looper,Double32_t>(onfileType, conf );
3872 Error(
"GetConvertCollectionWriteActionFrom",
"There is no support for kBits outside of a TObject.");
3877 Error(
"GetConvertCollectionWriteActionFrom",
"UNEXPECTED: memoryType/newype == %d", memoryType);
3885template <
typename Looper,
typename Onfile>
3912template <
class Looper>
3999 if (!nbits) nbits = 12;
4000 return GetCollectionWriteConvertAction<Looper,NoFactorMarker<float> >(element->
GetNewType(),
new TConfNoFactor(info,i,compinfo,
offset,nbits) );
4012 return GetCollectionWriteConvertAction<Looper,NoFactorMarker<double> >(element->
GetNewType(),
new TConfNoFactor(info,i,compinfo,
offset,nbits) );
4027 auto baseActions = Looper::CreateWriteActionSequence(*baseinfo, loopConfig);
4028 baseActions->AddToOffset(baseEl->
GetOffset());
4050 return TConfiguredAction( Looper::template LoopOverCollection<WriteViaClassBuffer>,
4053 return TConfiguredAction( Looper::template LoopOverCollection<WriteViaClassBuffer>,
4065template <
class Looper>
4086 case TStreamerInfo::kBits:
Error(
"GetNumericCollectionWriteAction",
"There is no support for kBits outside of a TObject.");
break;
4115 Fatal(
"GetNumericCollectionWriteAction",
"Is confused about %d",
type);
4202 fNslots = ndata + ndata/2 + 1;
4221 for (i = 0; i < ndata; ++i) {
4265 if (!previousOptimized) {
4276 if (
fComp[keep].fLength == 0) {
4281 isOptimized =
kTRUE;
4282 previousOptimized =
kTRUE;
4283 }
else if (element->
GetType() < 0) {
4296 previousOptimized =
kFALSE;
4314 Warning(
"Compile",
"Counter %s should not be skipped from class %s", element->
GetName(),
GetName());
4325 if (
fComp[keep].fLength == 0) {
4329 previousOptimized =
kFALSE;
4339 for (i = 0; i <
fNdata; ++i) {
4368template <
typename From>
4391template <
typename Onfile>
4425 switch (compinfo->
fType) {
4446 if (!nbits) nbits = 12;
4476 if (newClass && newClass != oldClass) {
4478 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseChangedClass,ReadSTLObjectWiseStreamerV2>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
4480 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseChangedClass,ReadSTLObjectWiseFastArrayV2>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase));
4484 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseSameClass,ReadSTLObjectWiseStreamerV2>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
4486 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseSameClass,ReadSTLObjectWiseFastArrayV2>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,element->
GetTypeName(),isSTLbase));
4490 if (newClass && newClass != oldClass) {
4492 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseChangedClass,ReadSTLObjectWiseStreamer>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
4493 }
else if (oldClass) {
4495 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseChangedClass,ReadSTLObjectWiseFastArray>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase));
4499 readSequence->
AddAction(GetConvertCollectionReadAction<VectorLooper>(oldClass->
GetCollectionProxy()->
GetType(), newClass->
GetCollectionProxy()->
GetType(),
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase)));
4502 readSequence->
AddAction(GetConvertCollectionReadAction<AssociativeLooper>(oldClass->
GetCollectionProxy()->
GetType(), newClass->
GetCollectionProxy()->
GetType(),
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase)));
4508 readSequence->
AddAction(GetConvertCollectionReadAction<GenericLooper>(oldClass->
GetCollectionProxy()->
GetType(), newClass->
GetCollectionProxy()->
GetType(),
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,newClass,element->
GetTypeName(),isSTLbase)));
4515 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseSameClass,ReadSTLObjectWiseStreamer>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
4516 }
else if (oldClass) {
4518 readSequence->
AddAction(ReadSTL<ReadSTLMemberWiseSameClass,ReadSTLObjectWiseFastArray>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,1,oldClass,element->
GetTypeName(),isSTLbase));
4540 if (newClass && newClass != oldClass) {
4542 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseChangedClass,ReadSTLObjectWiseStreamerV2>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,newClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
4544 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseChangedClass,ReadSTLObjectWiseFastArrayV2>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,newClass,element->
GetTypeName(),isSTLbase));
4548 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseSameClass,ReadSTLObjectWiseStreamerV2>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
4550 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseSameClass,ReadSTLObjectWiseFastArrayV2>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,element->
GetTypeName(),isSTLbase));
4554 if (newClass && newClass != oldClass) {
4556 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseChangedClass,ReadSTLObjectWiseStreamer>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,newClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
4558 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseChangedClass,ReadSTLObjectWiseFastArray>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,newClass,element->
GetTypeName(),isSTLbase));
4562 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseSameClass,ReadSTLObjectWiseStreamer>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,element->
GetStreamer(),element->
GetTypeName(),isSTLbase));
4564 readSequence->
AddAction(ReadSTL<ReadArraySTLMemberWiseSameClass,ReadSTLObjectWiseFastArray>,
new TConfigSTL(
true,
this,i,compinfo,compinfo->
fOffset,element->
GetArrayLength(),oldClass,element->
GetTypeName(),isSTLbase));
4619 if (!nbits) nbits = 12;
4620 AddReadConvertAction<NoFactorMarker<float> >(readSequence, compinfo->
fNewType,
new TConfNoFactor(
this,i,compinfo,compinfo->
fOffset,nbits) );
4632 AddReadConvertAction<NoFactorMarker<double> >(readSequence, compinfo->
fNewType,
new TConfNoFactor(
this,i,compinfo,compinfo->
fOffset,nbits) );
4640 readSequence->
AddAction(ScalarLooper::ReadStreamerLoop<false>::Action,
4650 auto memoryBaseCl = base && base->GetNewBaseClass() ? base->GetNewBaseClass() : onfileBaseCl;
4652 if(!base || !memoryBaseCl ||
4653 memoryBaseCl->GetStreamer() ||
4654 memoryBaseCl->GetStreamerFunc() || memoryBaseCl->GetConvStreamerFunc())
4708 switch (compinfo->
fType) {
4741 readSequence->
AddAction(ScalarLooper::ReadStreamerLoop<true>::Action,
4751 default:
generic =
kTRUE;
break;
4778 readSequence->
AddAction( GetCollectionReadAction<VectorPtrLooper>(
this,
nullptr,element,compinfo->
fType,i,compinfo,compinfo->
fOffset) );
4795 switch (compinfo->
fType) {
4849 if (newClass && newClass != onfileClass) {
4851 writeSequence->
AddAction(WriteSTL<WriteSTLMemberWise /* should be ChangedClass */, WriteSTLObjectWiseStreamer>,
4855 }
else if (onfileClass) {
4859 WriteSTL<WriteSTLObjectWiseStreamer /* should be ChangedClass */, WriteSTLObjectWiseFastArray>,
4860 new TConfigSTL(
false,
this, i, compinfo, compinfo->
fOffset, 1, onfileClass, newClass,
4865 writeSequence->
AddAction(GetConvertCollectionWriteAction<VectorLooper>(
4867 new TConfigSTL(
false,
this, i, compinfo, compinfo->
fOffset, 1, onfileClass, newClass,
4871 writeSequence->
AddAction(GetConvertCollectionWriteAction<AssociativeLooper>(
4873 new TConfigSTL(
false,
this, i, compinfo, compinfo->
fOffset, 1, onfileClass, newClass,
4881 writeSequence->
AddAction(GetConvertCollectionWriteAction<GenericLooper>(
4883 new TConfigSTL(
false,
this, i, compinfo, compinfo->
fOffset, 1, onfileClass, newClass,
4891 writeSequence->
AddAction(WriteSTL<WriteSTLMemberWise, WriteSTLObjectWiseStreamer>,
4895 }
else if (onfileClass) {
4899 writeSequence->
AddAction(WriteSTL<WriteSTLMemberWise, WriteSTLObjectWiseFastArray>,
4905 writeSequence->
AddAction(GetNumericCollectionWriteAction<VectorLooper>(
4911 writeSequence->
AddAction(GetNumericCollectionWriteAction<AssociativeLooper>(
4921 writeSequence->
AddAction(GetNumericCollectionWriteAction<GenericLooper>(
4931 if (newClass && newClass != onfileClass) {
4934 WriteSTL<WriteArraySTLMemberWise /* should be ChangedClass */, WriteSTLObjectWiseStreamer>,
4939 WriteSTL<WriteArraySTLMemberWise /* should be ChangedClass */, WriteSTLObjectWiseFastArray>,
4945 writeSequence->
AddAction(WriteSTL<WriteArraySTLMemberWise, WriteSTLObjectWiseStreamer>,
4950 writeSequence->
AddAction(WriteSTL<WriteArraySTLMemberWise, WriteSTLObjectWiseFastArray>,
4969 writeSequence->
AddAction(ScalarLooper::WriteStreamerLoop<false>::Action,
4979 auto memoryBaseCl = base && base->GetNewBaseClass() ? base->GetNewBaseClass() : onfileBaseCl;
4981 if(!base || !memoryBaseCl ||
4982 memoryBaseCl->GetStreamer() ||
4983 memoryBaseCl->GetStreamerFunc() || memoryBaseCl->GetConvStreamerFunc())
5062 switch (compinfo->
fType) {
5125 default:
generic =
kTRUE;
break;
5156 writeSequence->
AddAction( GetCollectionWriteAction<VectorPtrLooper>(
this,
nullptr,element,compinfo->
fType,i,compinfo,compinfo->
fOffset) );
5168 std::unique_ptr<TLoopConfiguration> loopConfig;
5179 loopConfig = std::make_unique<TVectorLoopConfig>(&proxy, increment,
kTRUE);
5186 loopConfig = std::make_unique<TVectorLoopConfig>(&proxy, increment,
kTRUE);
5189 loopConfig = std::make_unique<TGenericLoopConfig>(&proxy,
kTRUE);
5205 for (
UInt_t i = 0; i < ndata; ++i) {
5229 ::Warning(
"CreateReadMemberWiseActions",
"%s",
5242 if (newType != oldType) {
5262 TConfiguredAction action( GetCollectionReadAction<VectorLooper>(&info,loopConfig,element,oldType,i,compinfo,
offset) );
5265 sequence->
AddAction( GetCollectionReadAction<VectorLooper>(&info,loopConfig,element,oldType,i,compinfo,
offset));
5272 TConfiguredAction action( GetCollectionReadAction<VectorLooper>(&info,loopConfig,element,oldType,i,compinfo,
offset) );
5275 sequence->
AddAction( GetCollectionReadAction<GenericLooper>(&info,loopConfig,element,oldType,i,compinfo,
offset) );
5292 std::unique_ptr<TLoopConfiguration> loopConfig;
5303 loopConfig = std::make_unique<TVectorLoopConfig>(&proxy, increment,
kFALSE);
5305 loopConfig = std::make_unique<TGenericLoopConfig>(&proxy,
kFALSE);
5307 return CreateWriteMemberWiseActions(*info, std::move(loopConfig));
5323 for (
UInt_t i = 0; i < ndata; ++i) {
5348 if (memoryType != onfileType) {
5351 if (memoryType > 0) {
5378 sequence->
AddAction( GetCollectionWriteAction<GenericLooper>(&info,loopConfig,element,onfileType,i,compinfo,
offset) );
5381 sequence->
AddAction( GetCollectionWriteAction<VectorLooper>(&info,loopConfig,element,onfileType,i,compinfo,
offset) );
5384 sequence->
AddAction( GetCollectionWriteAction<VectorPtrLooper>(&info,loopConfig,element,onfileType,i,compinfo,
offset) );
5388 sequence->
AddAction( GetCollectionWriteAction<GenericLooper>(&info,loopConfig,element,onfileType,i,compinfo,
offset) );
5400 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
5401 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
5406 if (iter->fConfiguration->fElemId != (
UInt_t)-1 &&
5408 iter->fConfiguration->AddToOffset(delta);
5417 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
5418 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
5422 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
5423 iter->fConfiguration->SetMissing();
5433 sequence->
fLoopConfig.reset(fLoopConfig ? fLoopConfig->Copy() :
nullptr);
5435 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
5436 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
5441 sequence->
AddAction( iter->fAction, conf );
5451 for(
UInt_t id = 0;
id < element_ids.size(); ++
id) {
5452 if ( element_ids[
id].fElemID < 0 ) {
5453 if (element_ids[
id].fNestedIDs) {
5454 auto original = create(element_ids[
id].fNestedIDs->fInfo,
5457 if (element_ids[
id].fNestedIDs->fOnfileObject) {
5467 original->AddToSubSequence(sequence, element_ids[
id].fNestedIDs->fIDs, element_ids[
id].fNestedIDs->fOffset, create);
5469 if (element_ids[
id].fNestedIDs->fOnfileObject) {
5480 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
5481 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
5486 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
5488 sequence->
AddAction( iter->fAction, conf );
5492 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
5493 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
5496 if ( iter->fConfiguration->fElemId == (
UInt_t)element_ids[
id].fElemID ) {
5498 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
5500 sequence->
AddAction( iter->fAction, conf );
5515 sequence->
fLoopConfig = std::unique_ptr<TLoopConfiguration>(fLoopConfig ? fLoopConfig->Copy() : 0);
5517 AddToSubSequence(sequence, element_ids,
offset, create);
5529 sequence->
fLoopConfig.reset(fLoopConfig ? fLoopConfig->Copy() : 0);
5531 for(
UInt_t id = 0;
id < element_ids.size(); ++
id) {
5532 if ( element_ids[
id] < 0 ) {
5533 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
5534 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
5539 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
5541 sequence->
AddAction( iter->fAction, conf );
5544 TStreamerInfoActions::ActionContainer_t::iterator end = fActions.end();
5545 for(TStreamerInfoActions::ActionContainer_t::iterator iter = fActions.begin();
5548 if ( iter->fConfiguration->fElemId == (
UInt_t)element_ids[
id] ) {
5550 if (!iter->fConfiguration->fInfo->GetElements()->At(iter->fConfiguration->fElemId)->TestBit(
TStreamerElement::kCache))
5552 sequence->
AddAction( iter->fAction, conf );
5560#if !defined(R__WIN32)
5569#if defined(R__WIN32) || defined(__CYGWIN__)
5570 return "not available on this platform";
5572 MEMORY_BASIC_INFORMATION mbi;
5573 if (!VirtualQuery (func, &mbi,
sizeof (mbi)))
5578 HMODULE hMod = (HMODULE) mbi.AllocationBase;
5579 static char moduleName[MAX_PATH];
5581 if (!GetModuleFileNameA (hMod, moduleName,
sizeof (moduleName)))
5589 if (dladdr((
void*)func,&info)==0) {
5591 return "name not found";
5594 return info.dli_sname;
5606 fLoopConfig->Print();
5608 TStreamerInfoActions::ActionContainer_t::const_iterator end = fActions.end();
5609 for(TStreamerInfoActions::ActionContainer_t::const_iterator iter = fActions.begin();
5613 iter->fConfiguration->Print();
5614 if (strstr(opt,
"func")) {
T ReadBuffer(TBufferFile *buf)
One of the template functions used to read objects from messages.
unsigned short UShort_t
Unsigned Short integer 2 bytes (unsigned short)
int Int_t
Signed integer 4 bytes (int)
short Version_t
Class version identifier (short)
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
float Float_t
Float 4 bytes (float)
const char Option_t
Option string (const char)
#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 input
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
Int_t gDebug
Global variable setting the debug level. Set to 0 to disable, increase it in steps of 1 to increase t...
static TConfiguredAction GetNumericCollectionReadAction(Int_t type, TConfigSTL *conf)
static TConfiguredAction GetNumericCollectionWriteAction(Int_t type, TConfigSTL *conf)
static void AddWriteConvertAction(TStreamerInfoActions::TActionSequence *sequence, Int_t newtype, TConfiguration *conf)
static TConfiguredAction GetCollectionWriteConvertAction(Int_t newtype, TConfiguration *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, TLoopConfiguration *loopConfig, TStreamerElement *element, Int_t type, UInt_t i, TStreamerInfo::TCompInfo_t *compinfo, Int_t offset)
static const Int_t kRegrouped
static const char * R__GetSymbolName(voidfunc func)
static TConfiguredAction GetCollectionWriteAction(TVirtualStreamerInfo *info, TLoopConfiguration *loopConfig, TStreamerElement *element, Int_t type, UInt_t i, TStreamerInfo::TCompInfo_t *compinfo, Int_t offset)
static TConfiguredAction GetConvertCollectionReadAction(Int_t oldtype, Int_t newtype, TConfiguration *conf)
static TConfiguredAction GetConvertCollectionWriteAction(Int_t onfileType, Int_t memoryType, TConfiguration *conf)
static TConfiguredAction GetConvertCollectionReadActionFrom(Int_t newtype, TConfiguration *conf)
static TConfiguredAction GetConvertCollectionWriteActionFrom(Int_t onfileType, TConfiguration *conf)
#define ReadBasicType(name)
#define WriteBasicType(name)
#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 Int_t ApplySequenceVecPtr(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection)=0
virtual Version_t ReadVersionForMemberWise(const TClass *cl=nullptr)=0
virtual void WriteDouble32(Double_t *d, TStreamerElement *ele=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 void WriteFloat16(Float_t *f, TStreamerElement *ele=nullptr)=0
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 WriteFastArrayFloat16(const Float_t *f, Long64_t n, TStreamerElement *ele=nullptr)=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 WriteInt(Int_t i)=0
virtual void WriteFastArrayDouble32(const Double_t *d, Long64_t n, TStreamerElement *ele=nullptr)=0
virtual void ReadFastArrayFloat16(Float_t *f, Int_t n, TStreamerElement *ele=nullptr)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
virtual void StreamObject(void *obj, const std::type_info &typeinfo, const TClass *onFileClass=nullptr)=0
TClassRef is used to implement a permanent reference to a TClass object.
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.
Bool_t HasDirectStreamerInfoUse() const
static void StreamerStreamerInfo(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of where we should directly use the StreamerInfo.
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).
std::atomic< StreamerImpl_t > fStreamerImpl
! Pointer to the function implementing streaming for this class
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
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.
@ kIsOnHeap
object is on heap
@ kNotDeleted
object has not been deleted
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.
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...
TVirtualStreamerInfo * GetBaseStreamerInfo() const
TClass * GetClassPointer() const override
Returns a pointer to the TClass of this element.
const char * GetErrorMessage() const
Describe one element (data member) to be Streamed.
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 and updates fClassObject.
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 '...
std::unique_ptr< 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(Bool_t read, TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, UInt_t length, TClass *oldClass, const char *type_name, Bool_t isbase)
TConfigSTL(Bool_t read, 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)
TConfigSTL(Bool_t read, 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)
TVirtualCollectionProxy::CreateIterators_t fCreateIterators
TVirtualCollectionProxy::DeleteIterator_t fDeleteIterator
TVirtualCollectionProxy::DeleteTwoIterators_t fDeleteTwoIterators
TVirtualCollectionProxy::Next_t fNext
TMemberStreamer * fStreamer
TConfigSTL(Bool_t read, 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)
TConfiguration * Copy() override
TVirtualCollectionProxy::CopyIterator_t fCopyIterator
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 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.
size_t fAlignment
!alignment of the memory representation of the class
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.
virtual TStreamerInfoActions::TActionSequence * GetWriteMemberWiseActions()=0
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 Version_t GetOldVersion() const =0
virtual Int_t GetClassVersion() const =0
Bool_t fOptimized
! true if the StreamerInfo has been optimized
void ReadSTLObjectWiseStreamer(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t, UInt_t)
Int_t WriteTString(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t PushDataCacheVectorPtr(TBuffer &b, void *, const void *, const TConfiguration *conf)
Int_t PopDataCache(TBuffer &b, void *, const TConfiguration *)
void ReadSTLMemberWiseChangedClass(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t vers)
Int_t TextReadSTLp(TBuffer &buf, void *addr, const TConfiguration *config)
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)
static void WriteCompressed(TBuffer &buf, float *addr, const TStreamerElement *elem)
Int_t WriteTextBaseClass(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t GenericWriteAction(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t WriteTObject(TBuffer &buf, void *addr, const TConfiguration *config)
void ReadArraySTLMemberWiseChangedClass(TBuffer &buf, void *addr, const TConfiguration *conf, Version_t vers)
std::vector< TIDNode > TIDs
Int_t PopDataCacheVectorPtr(TBuffer &b, void *, const void *, const TConfiguration *)
Int_t GenericReadAction(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t WriteTextTObject(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t WriteTNamed(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t ReadBasicType_WithFactor(TBuffer &buf, void *addr, const TConfiguration *config)
void WriteSTLObjectWiseFastArray(TBuffer &buf, void *addr, const TConfiguration *conf)
Int_t ReadTextBaseClass(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t UseCacheVectorPtrLoop(TBuffer &b, void *start, const void *end, const TConfiguration *conf)
void WriteSTLObjectWiseStreamer(TBuffer &buf, void *addr, const TConfiguration *conf)
Int_t WriteSTL(TBuffer &buf, void *addr, 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)
Int_t WriteViaClassBuffer(TBuffer &buf, void *addr, const TConfiguration *config)
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 TextWriteSTLp(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 ReadViaExtStreamer(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t ReadTextTNamed(TBuffer &buf, void *addr, const TConfiguration *config)
void WriteArraySTLMemberWise(TBuffer &buf, void *addr, const TConfiguration *conf)
Int_t WriteStreamerCase(TBuffer &buf, void *addr, const TConfiguration *config)
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)
Int_t WriteViaExtStreamer(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 ReadStreamerCase(TBuffer &buf, void *addr, const TConfiguration *config)
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 ReadTString(TBuffer &buf, void *addr, const TConfiguration *config)
Int_t UseCacheGenericCollection(TBuffer &b, void *, const void *, const TLoopConfiguration *loopconfig, const TConfiguration *conf)
void WriteSTLMemberWise(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t WriteBasicZero(TBuffer &buf, void *, const TConfiguration *)
Int_t ReadViaClassBuffer(TBuffer &buf, void *addr, const TConfiguration *config)
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 Int_t Action(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *conf)
static void LoopOverCollection(TBuffer &buf, void *iter, const void *end, Next_t next, Int_t, const TStreamerElement *elem)
static void SimpleWriteFloat16(TBuffer &buf, void *addr, const TStreamerElement *elem)
static Int_t WriteCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
static void SimpleRead(TBuffer &buf, void *addr, Int_t nvalues)
static void ArrayWrite(TBuffer &buf, void *addr, Int_t nvalues, const TStreamerElement *)
static Int_t WriteCollectionBasicType(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t ReadCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
static void SimpleReadDouble32(TBuffer &buf, void *addr, Int_t nvalues)
static void SimpleWrite(TBuffer &buf, void *addr, const TStreamerElement *)
static void ConvertLoopOverCollection(TBuffer &buf, void *iter, const void *end, Next_t next, Int_t nvalues, const TStreamerElement *elem)
static void ArrayWriteCompressed(TBuffer &buf, double *addr, Int_t nvalues, const TStreamerElement *elem)
static void SimpleWriteDouble32(TBuffer &buf, void *addr, const TStreamerElement *elem)
static Int_t ReadCollectionBasicType(TBuffer &buf, void *addr, const TConfiguration *conf)
void(*)(TBuffer &, void *, const void *, Next_t, Int_t, const TStreamerElement *elem) LoopAction_t
static Int_t ReadCollectionFloat16(TBuffer &buf, void *addr, const TConfiguration *conf)
static void ArrayWriteCompressed(TBuffer &buf, float *addr, Int_t nvalues, const TStreamerElement *elem)
static void SimpleReadFloat16(TBuffer &buf, void *addr, Int_t nvalues)
static Int_t WriteNumericalCollection(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t WriteCollectionFloat16(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t ReadNumericalCollection(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t Action(TBuffer &buf, void *start, Ts... args, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *start, Ts... args, const TConfiguration *config)
static Int_t ReadStreamerLoopStatic(TBuffer &buf, void *addr, const TConfiguration *config)
static Int_t SubSequenceAction(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *, const TConfiguration *config)
static std::unique_ptr< TStreamerInfoActions::TActionSequence > CreateWriteActionSequence(TStreamerInfo &info, TLoopConfiguration *loopConfig)
static Int_t WriteStreamerLoopStatic(TBuffer &buf, void *addr, const TConfiguration *config)
static Int_t WriteStreamerLoopPoly(TBuffer &buf, void *addr, const TConfiguration *config)
static Int_t ReadStreamerLoopPoly(TBuffer &buf, void *addr, const TConfiguration *config)
static Int_t WriteStreamerCase(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static std::unique_ptr< TStreamerInfoActions::TActionSequence > CreateReadActionSequence(TStreamerInfo &info, TLoopConfiguration *loopConfig)
static Int_t StreamerLoopExternal(TBuffer &buf, void *addr, const TConfiguration *actionConfig)
static Int_t ReadStreamerCase(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconfig, 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 *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 WriteConvertAction(void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config, To *items)
static void ConvertAction(From *items, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static void WriteConvertAction(void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *, To *items)
static void ConvertAction(From *items, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *)
static Int_t Action(TBuffer &, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t Action(TBuffer &, 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 Int_t Action(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
static Int_t ReadBasicType(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
CollectionLooper< GenericLooper >::ReadStreamerLoop< kIsText, const void *, const TLoopConfiguration * > ReadStreamerLoop
static Int_t ReadCollectionFloat16(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t WriteBase(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t WriteNumericalCollection(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 Int_t WriteCollectionBasicType(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t WriteCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t WriteCollectionFloat16(TBuffer &buf, void *addr, const TConfiguration *conf)
static void SimpleWriteFloat16(TBuffer &buf, void *addr)
static void SimpleReadFloat16(TBuffer &buf, void *addr)
Int_t(*)(TBuffer &, void *, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *) LoopAction_t
static Int_t LoopOverCollection(TBuffer &buf, void *start, const void *end, const TLoopConfiguration *loopconf, const TConfiguration *config)
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 void SimpleReadDouble32(TBuffer &buf, void *addr)
static void SimpleWriteDouble32(TBuffer &buf, void *addr)
static Int_t ReadCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
CollectionLooper< GenericLooper >::WriteStreamerLoop< kIsText, const void *, const TLoopConfiguration * > WriteStreamerLoop
Int_t(*)(TBuffer &, void *, const TConfiguration *) LoopAction_t
static Int_t LoopOverCollection(TBuffer &buf, void *start, const TConfiguration *config)
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
TConfObject(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, TClass *onfileClass, TClass *inMemoryClass)
TConfiguration * Copy() override
TConfStreamerLoop(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, bool isPtrPtr)
TConfiguration * Copy() override
TConfSubSequence(const TConfSubSequence &input)
void AddToOffset(Int_t delta) override
TConfiguration * Copy() override
TConfSubSequence(TVirtualStreamerInfo *info, UInt_t id, TCompInfo_t *compinfo, Int_t offset, std::unique_ptr< TStreamerInfoActions::TActionSequence > actions)
std::unique_ptr< TStreamerInfoActions::TActionSequence > fActions
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 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)
CollectionLooper< VectorLooper >::ReadStreamerLoop< kIsText, const void *, const TLoopConfiguration * > ReadStreamerLoop
static Int_t WriteCollectionFloat16(TBuffer &buf, void *addr, const TConfiguration *conf)
static Int_t WriteCollectionBasicType(TBuffer &buf, void *addr, const TConfiguration *conf)
Int_t(*)(TBuffer &, void *, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *) LoopAction_t
static Int_t WriteBasicType(TBuffer &buf, void *iter, const void *end, const TLoopConfiguration *loopconfig, const TConfiguration *config)
static Int_t WriteCollectionDouble32(TBuffer &buf, void *addr, const TConfiguration *conf)
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)
CollectionLooper< VectorLooper >::WriteStreamerLoop< kIsText, const void *, const TLoopConfiguration * > WriteStreamerLoop
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 WriteBase(TBuffer &buf, void *start, 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 LoopOverCollection(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 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)
Int_t(*)(TBuffer &, void *start, const void *end, const TConfiguration *) LoopAction_t
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 std::unique_ptr< TStreamerInfoActions::TActionSequence > CreateWriteActionSequence(TStreamerInfo &info, TLoopConfiguration *)
static Int_t LoopOverCollection(TBuffer &buf, void *start, 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)
static Int_t WriteBase(TBuffer &buf, void *start, const void *end, const TConfiguration *config)
CollectionLooper< VectorPtrLooper >::ReadStreamerLoop< kIsText, const void * > ReadStreamerLoop
static std::unique_ptr< TStreamerInfoActions::TActionSequence > CreateReadActionSequence(TStreamerInfo &info, TLoopConfiguration *)
CollectionLooper< VectorPtrLooper >::WriteStreamerLoop< kIsText, const void * > WriteStreamerLoop
static Int_t SubSequenceAction(TBuffer &buf, void *start, const void *end, const TConfiguration *config)
static Int_t WriteStreamerCase(TBuffer &buf, void *start, const void *end, const TConfiguration *config)
static Int_t ReadStreamerCase(TBuffer &buf, void *start, const void *end, const TConfiguration *config)
static Int_t Action(TBuffer &buf, void *addr, const TConfiguration *config)