110#define _XOPEN_SOURCE 600
119#include <sys/xattr.h>
124# include <sys/types.h>
129#include "RConfigure.h"
165#include "compiledata.h"
178#include <sys/extattr.h>
199#define getxattr(path, name, value, size) getxattr(path, name, value, size, 0u, 0)
202#define getxattr(path, name, value, size) extattr_get_file(path, EXTATTR_NAMESPACE_USER, name, value, size)
211static struct AddPseudoGlobals {
228 Info(
"TFile",
"default ctor");
378 ::Fatal(
"TFile::TFile",
"ROOT system not initialized");
380 auto zombify = [
this] {
384 gROOT->GetListOfClosedObjects()->Add(
this);
393 if (strlen(
fUrl.GetProtocol()) != 0 && strcmp(
fUrl.GetProtocol(),
"file") != 0 && !
fOption.BeginsWith(
"NET") &&
396 "please use TFile::Open to access remote files:\n\tauto f = std::unique_ptr<TFile>{TFile::Open(\"%s\")};",
404 if (sfname1.Index(
"?") !=
kNPOS) {
405 TString s = sfname1(0, sfname1.Index(
"?"));
407 fNoAnchorInName = kTRUE;
414 fname1 =
fUrl.GetFile();
417 if (strstr(
fUrl.GetOptions(),
"filetype=raw"))
421 if (strstr(
fUrl.GetOptions(),
"filetype=pcm"))
424 if (
fUrl.HasOption(
"reproducible"))
443 fname1 =
fArchive->GetArchiveName();
446 if (!strlen(
fArchive->GetMemberName()))
451 if (
fOption.Contains(
"_WITHOUT_GLOBALREGISTRATION")) {
455 fList->UseRWLock(
false);
475 if (!create && !recreate && !
update && !read) {
482 if (!fname1 || !fname1[0]) {
483 Error(
"TFile",
"file name is not specified");
489 if (!strcmp(fname1,
"/dev/null") &&
501 if (!
gSystem->ExpandPathName(fname)) {
509 Error(
"TFile",
"error expanding path %s", fname1);
517 if(
auto name=
fUrl.GetValueFromOptions(
"reproducible")) {
525 SysError(
"TFile",
"could not delete %s (errno: %d)",
536 Error(
"TFile",
"file %s already exists", fname.
Data());
546 Error(
"TFile",
"no write permission, could not open file %s", fname.
Data());
553 Error(
"TFile",
"file %s does not exist", fname.
Data());
558 Error(
"TFile",
"no read permission, could not open file %s", fname.
Data());
572 SysError(
"TFile",
"file %s can not be opened", fname.
Data());
584 SysError(
"TFile",
"file %s can not be opened for reading", fname.
Data());
611 fList->Delete(
"slow");
625 gROOT->GetListOfClosedObjects()->Remove(
this);
636 Info(
"~TFile",
"dtor called for %s [%zx]",
GetName(),(
size_t)
this);
662 Error(
"Init",
"archive %s can only be opened in read mode",
GetName());
678 if (
fArchive->SetCurrentMember() != -1)
681 Error(
"Init",
"member %s not found in archive %s",
704 if (
gEnv->GetValue(
"TFile.v630forwardCompatibility", 0) == 1)
724 char *header =
new char[
kBEGIN+200];
729 Error(
"Init",
"%s failed to read the file type data.",
736 if (strncmp(header,
"root", 4)) {
742 char *buffer = header + 4;
745 frombuf(buffer, &headerLength);
748 Int_t send,sfree,sinfo;
771 Error(
"Init",
"file %s has an incorrect header length (%lld) or incorrect end of file length (%lld)",
783 Warning(
"Init",
"file %s probably not closed, cannot read free segments",
GetName());
788 char *buffer_keyloc =
nullptr;
793 Error(
"Init",
"file %s has an incorrect header length (%lld) or incorrect end of file length (%lld)",
800 header =
new char[nbytes];
805 Error(
"Init",
"%s failed to read the file header information at %lld (size=%d)",
811 buffer_keyloc = header;
814 buffer_keyloc = header+
fBEGIN;
817 frombuf(buffer,&version); versiondir = version%1000;
822 if (version > 1000) {
827 Int_t sdir,sparent,skeys;
832 if (versiondir > 1)
fUUID.ReadBuffer(buffer);
835 buffer_keyloc +=
sizeof(
Int_t);
837 frombuf(buffer_keyloc, &keyversion);
839 if (keyversion > 1000) {
846 cname.ReadBuffer(buffer_keyloc);
847 cname.ReadBuffer(buffer_keyloc);
848 fTitle.ReadBuffer(buffer_keyloc);
851 Error(
"Init",
"cannot read directory info of file %s",
GetName());
868 if (
gEnv->GetValue(
"TFile.v630forwardCompatibility", 0) == 1)
892 Error(
"Init",
"file %s is truncated at %lld bytes: should be %lld, "
895 Error(
"Init",
"file %s is truncated at %lld bytes: should be %lld",
901 Warning(
"Init",
"file %s probably not closed, "
902 "trying to recover",
GetName());
910 Warning(
"Init",
"successfully recovered %d keys", nrecov);
912 Warning(
"Init",
"no keys recovered, file has been made a Zombie");
920 gROOT->GetListOfFiles()->Add(
this);
926 Int_t lenIndex =
gROOT->GetListOfStreamerInfo()->GetSize()+1;
927 if (lenIndex < 5000) lenIndex = 5000;
934 gROOT->GetListOfFiles()->Remove(
this);
939 if (
fKeys->GetSize()) {
941 const auto separator =
fVersion < 63200 ?
"/" :
".";
942 const auto thisVersion =
gROOT->GetVersionInt();
943 const auto msg =
"no StreamerInfo found in %s therefore preventing schema evolution when reading this file. "
944 "The file was produced with ROOT version %d.%02d%s%02d, "
945 "while the current version is %d.%02d.%02d";
949 thisVersion / 10000, (thisVersion / 100) % (100), thisVersion % 100);
959 while ((key = (
TKey*)next())) {
970 gROOT->GetListOfClosedObjects()->Add(
this);
1018 while ((key = iter()) !=
nullptr) {
1076 gROOT->GetListOfFiles()->Remove(
this);
1077 gROOT->GetListOfBrowsers()->RecursiveRemove(
this);
1078 gROOT->GetListOfClosedObjects()->Add(
this);
1089 return new TKey(obj,
name, bufsize, mother);
1097 return new TKey(obj, cl,
name, bufsize, mother);
1109 static TFile *currentFile =
nullptr;
1122 Info(
"Delete",
"deleting name = %s", namecycle);
1152 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TFileDrawMap"))) {
1153 if (
h->LoadPlugin() == -1)
1155 h->ExecPlugin(3,
this, keys,
option);
1194 tobuf(buffer, version);
1210 if (
result >= (
double)std::numeric_limits<Int_t>::max()) {
1211 return std::numeric_limits<Int_t>::max() -1;
1227 Int_t nbytes, objlen, nwh = 64;
1228 char *header =
new char[
fBEGIN];
1234 while (idcur <
fEND-100) {
1249 if (nbytes == 0)
break;
1255 if (!objlen) objlen = nbytes-keylen;
1257 uncomp += keylen + objlen;
1327 if (first <
fBEGIN)
return 0;
1328 if (first >
fEND)
return 0;
1330 Int_t nread = maxbytes;
1331 if (first+maxbytes >
fEND) nread =
fEND-maxbytes;
1333 Warning(
"GetRecordHeader",
"%s: parameter maxbytes = %d must be >= 4",
1339 Warning(
"GetRecordHeader",
"%s: failed to read header data (maxbytes = %d)",
1350 if (nb < 0)
return nread;
1352 const Int_t headerSize = 16;
1353 if (nread < headerSize)
return nread;
1358 if (!olen) olen = nbytes-klen;
1377 Error(
"GetSize",
"cannot stat the file %s",
GetName());
1403 TList *list =
nullptr;
1406 auto key = std::make_unique<TKey>(
this);
1407 auto buffer = std::make_unique<char[]>(
fNbytesInfo+1);
1408 auto buf = buffer.get();
1412 Warning(
"GetRecordHeader",
"%s: failed to read the StreamerInfo data from disk.",
1414 return {
nullptr, 1, hash};
1417 if (lookupSICache) {
1424 Info(
"GetStreamerInfo",
"The streamer info record for file %s has already been treated, skipping it.",
GetName());
1425 for(
auto uid : *si_uids)
1427 return {
nullptr, 0, hash};
1431 return {
nullptr, 1, hash};
1432 list =
dynamic_cast<TList*
>(key->ReadObjWithBuffer(buffer.get()));
1435 list = (
TList*)
Get(
"StreamerInfo");
1439 Info(
"GetStreamerInfoList",
"cannot find the StreamerInfo record in file %s",
1441 return {
nullptr, 1, hash};
1444 return {list, 0, hash};
1511 if(!newfree)
return;
1515 if (nbytesl > 2000000000) nbytesl = 2000000000;
1517 char buffer[
sizeof(
Int_t)];
1518 char *pbuffer = buffer;
1519 tobuf(pbuffer, nbytes);
1591 const bool forComp = options.
Contains(
"forcomp");
1592 const bool extended = options.
Contains(
"extended");
1594 const unsigned char nDigits = std::log10(
fEND) + 1;
1596 std::optional<ROOT::Detail::TKeyMapNode> lastNode;
1598 for (
const auto &key : tkeyInfos) {
1600 switch (key.fType) {
1602 Printf(
"Address = %" PRIu64
"\tNbytes = %u\t=====E R R O R=======", key.fAddr, key.fLen);
1606 Printf(
"Address = %" PRIu64
"\tNbytes = %d\t=====G A P===========", key.fAddr, -key.fLen);
1612 extrainfo.
Form(
" name: %-16s title: %s", key.fKeyName.c_str(), key.fKeyTitle.c_str());
1616 if (key.fObjLen !=
static_cast<Int_t>(key.fLen) - key.fKeyLen) {
1617 Float_t cx =
static_cast<float>(key.fObjLen + key.fKeyLen) / key.fLen;
1618 Printf(
"At:%-*" PRIu64
" N=%-8u K=%-3d O=%-8d %-14s CX = %5.2f %s", nDigits + 1, key.fAddr, key.fLen,
1619 key.fKeyLen, key.fObjLen, key.fClassName.c_str(), cx, extrainfo.
Data());
1621 Printf(
"At:%-*" PRIu64
" N=%-8u K=%-3d O=%-8d %-14s CX = 1 %s", nDigits + 1, key.fAddr, key.fLen,
1622 key.fKeyLen, key.fObjLen, key.fClassName.c_str(), extrainfo.
Data());
1627 if (key.fObjLen !=
static_cast<Int_t>(key.fLen) - key.fKeyLen) {
1628 Float_t cx =
static_cast<float>(key.fObjLen + key.fKeyLen) / key.fLen;
1629 Printf(
"%d/%06d At:%-*" PRIu64
" N=%-8u %-14s CX = %5.2f %s", date, time, nDigits + 1, key.fAddr,
1630 key.fLen, key.fClassName.c_str(), cx, extrainfo.
Data());
1632 Printf(
"%d/%06d At:%-*" PRIu64
" N=%-8u %-14s %s", date, time, nDigits + 1, key.fAddr,
1633 key.fLen, key.fClassName.c_str(), extrainfo.
Data());
1640 Int_t datime = lastNode ? lastNode->fDatime : 0;
1643 Printf(
"%d/%06d At:%-*lld N=%-8d %-14s", date, time, nDigits + 1,
fEND, 1,
"END");
1645 Printf(
"At:%-*lld N=%-8d K= O= %-14s", nDigits + 1,
fEND, 1,
"END");
1663 static constexpr int headerSize = 512;
1665 const std::uint64_t idcur =
fCurAddr;
1666 const std::uint64_t
end =
fFile->fEND;
1668 return std::nullopt;
1671 auto nread = headerSize;
1672 if (idcur + nread >=
end)
1673 nread =
end - idcur - 1;
1675 char header[headerSize];
1676 if (
fFile->ReadBuffer(header, nread)) {
1683 char *buffer = header;
1701 frombuf(buffer, &node.fKeyVersion);
1702 frombuf(buffer, &node.fObjLen);
1703 frombuf(buffer, &node.fDatime);
1704 frombuf(buffer, &node.fKeyLen);
1705 frombuf(buffer, &node.fCycle);
1706 if (node.fKeyVersion > 1000) {
1707 frombuf(buffer, &node.fSeekKey);
1708 frombuf(buffer, &node.fSeekPdir);
1713 node.fSeekKey =
static_cast<Long64_t>(skey);
1714 node.fSeekPdir =
static_cast<Long64_t>(sdir);
1717 const auto readString = [&buffer, &header](
bool skipCheck =
false) {
1718 std::uint8_t stringLenShort;
1719 std::uint32_t stringLen;
1720 if (!skipCheck && ((buffer - header) >= headerSize)) {
1723 frombuf(buffer, &stringLenShort);
1724 if (stringLenShort == 0xFF)
1727 stringLen = stringLenShort;
1729 if ((buffer - header) + stringLen > headerSize)
1730 stringLen = headerSize - (buffer - header);
1735 str = std::string(buffer, stringLen);
1736 buffer += stringLen;
1741 node.fClassName = readString(
true);
1743 if (idcur ==
static_cast<std::uint64_t
>(
fFile->fSeekFree))
1744 node.fClassName =
"FreeSegments";
1745 else if (idcur ==
static_cast<std::uint64_t
>(
fFile->fSeekInfo))
1746 node.fClassName =
"StreamerInfo";
1747 else if (idcur ==
static_cast<std::uint64_t
>(
fFile->fSeekKeys))
1748 node.fClassName =
"KeysList";
1750 node.fKeyName = readString();
1751 node.fKeyTitle = readString();
1810 Error(
"ReadBuffer",
"error reading all requested bytes from file %s, got %ld of %d",
1857 Error(
"ReadBuffer",
"error reading all requested bytes from file %s, got %ld of %d",
1887 for (
Int_t j = 0; j < nbuf; j++) {
1901 char *buf2 =
nullptr;
1904 cur = pos[i]+
len[i];
1907 if (bigRead || (i>=nbuf)) {
1926 for (
Int_t j=0;j<
n;j++) {
1927 memcpy(&buf[k],&buf2[pos[i-
n+j]-curbegin],
len[i-
n+j]);
1937 curbegin = i < nbuf ? pos[i] : 0;
1940 if (buf2)
delete [] buf2;
1990 if (fNbytesFree < 0 || fNbytesFree >
fEND) {
2026 snprintf(pidname,32,
"ProcessID%d",pidf);
2029 printf(
"ReadProcessID, name=%s, file=%s, pid=%zx\n",pidname,
GetName(),(
size_t)pid);
2038 TIter next(pidslist);
2116 Error(
"Recover",
"cannot stat the file %s",
GetName());
2126 while (idcur <
fEND) {
2128 int nread =
sizeof(header);
2131 if (idcur+nread >=
fEND) nread =
fEND-idcur-1;
2134 Error(
"Recover",
"%s: failed to read the key data from disk at %lld.",
2138 char *buffer = header;
2142 Error(
"Recover",
"Address = %lld\tNbytes = %d\t=====E R R O R=======", idcur, nbytes);
2162 if (versionkey > 1000) {
2171 frombuf(buffer, &classnameLen);
2172 char classname[101];
2173 if (classnameLen <= 0 || classnameLen > (
Int_t)
sizeof(classname))
2175 memcpy(classname, buffer, classnameLen);
2176 buffer += classnameLen;
2177 classname[
static_cast<std::size_t
>(classnameLen)] =
'\0';
2182 && strcmp(classname,
"TBasket")) {
2184 char *bufread = header;
2186 if (!keyRead || !strcmp(key->
GetName(),
"StreamerInfo")) {
2202 if (max_file_size <
fEND) max_file_size =
fEND+1000000000;
2209 if (nrecov)
Write();
2232 if (opt !=
"READ" && opt !=
"UPDATE") {
2233 Error(
"ReOpen",
"mode must be either READ or UPDATE, not %s", opt.
Data());
2240 if (opt ==
"READ") {
2276 SysError(
"ReOpen",
"file %s can not be opened in read mode",
GetName());
2298 SysError(
"ReOpen",
"file %s can not be opened in update mode",
GetName());
2307 Warning(
"ReOpen",
"file %s probably not closed, cannot read free segments",
GetName());
2328 Error(
"SetOffset",
"seeking from end in archive is not (yet) supported");
2352 Error(
"Seek",
"seeking from end in archive is not (yet) supported");
2357 SysError(
"Seek",
"cannot seek to position %lld in file %s, retpos=%lld",
2384 if (level < 0) level = 0;
2385 if (level > 99) level = 99;
2440 if (cache) cache->
SetFile(
this, action);
2470 if (
b.IsReading()) {
2531 Error(
"Write const",
"A const TFile object should not be saved. We try to proceed anyway.");
2532 return const_cast<TFile*
>(
this)->
Write(
n, opt, bufsize);
2563 Error(
"WriteBuffer",
"error writing all requested bytes to file %s, wrote %ld of %d",
2590 Error(
"WriteBuffer",
"error writing to cache");
2615 auto createKey = [
this]() {
2619 while ((afree = (
TFree*) next())) {
2620 nbytes += afree->
Sizeof();
2622 if (!nbytes)
return (
TKey*)
nullptr;
2628 return (
TKey*)
nullptr;
2633 TKey *key = createKey();
2650 char *start = buffer;
2654 while ((afree = (
TFree*) next())) {
2659 auto actualBytes = buffer-start;
2660 if ( actualBytes != nbytes ) {
2661 if (actualBytes < nbytes) {
2664 memset(buffer,0,nbytes-actualBytes);
2666 Error(
"WriteFree",
"The free block list TKey wrote more data than expected (%d vs %ld). Most likely there has been an out-of-bound write.",nbytes,(
long int)actualBytes);
2683 const char *root =
"root";
2684 char *psave =
new char[
fBEGIN];
2685 char *buffer = psave;
2687 memcpy(buffer, root, 4); buffer += 4;
2690 tobuf(buffer, version);
2692 if (version < 1000000) {
2696 tobuf(buffer, nfree);
2706 tobuf(buffer, nfree);
2716 fUUID.FillBuffer(buffer);
2717 Int_t nbytes = buffer - psave;
2795 void *dir =
gSystem->OpenDirectory(dirname);
2804 }
else if (opt.
Contains(
"recreate")) {
2807 if (
gSystem->mkdir(dirname) < 0) {
2808 Error(
"MakeProject",
"cannot create directory '%s'",dirname);
2814 const char *afile =
gSystem->GetDirEntry(dir);
2816 if (strcmp(afile,
".") == 0)
continue;
2817 if (strcmp(afile,
"..") == 0)
continue;
2818 dirpath.
Form(
"%s/%s",dirname,afile);
2826 Error(
"MakeProject",
"cannot create directory %s, already existing",dirname);
2830 if (
gSystem->mkdir(dirname) < 0) {
2831 Error(
"MakeProject",
"cannot create directory '%s'",dirname);
2844 if (filelist) filelist = (
TList*)filelist->
Clone();
2846 Error(
"MakeProject",
"file %s has no StreamerInfo",
GetName());
2850 TString clean_dirname(dirname);
2851 if (clean_dirname[clean_dirname.
Length()-1]==
'/') {
2853 }
else if (clean_dirname[clean_dirname.
Length()-1]==
'\\') {
2855 if (clean_dirname[clean_dirname.
Length()-1]==
'\\') {
2860 if (subdirname ==
"") {
2861 Error(
"MakeProject",
"Directory name must not be empty.");
2866 TString spath; spath.
Form(
"%s/%sProjectSource.cxx",clean_dirname.
Data(),subdirname.
Data());
2867 FILE *sfp = fopen(spath.
Data(),
"w");
2869 Error(
"MakeProject",
"Unable to create the source file %s.",spath.
Data());
2872 fprintf(sfp,
"namespace std {}\nusing namespace std;\n");
2873 fprintf(sfp,
"#include \"%sProjectHeaders.h\"\n\n",subdirname.
Data() );
2874 if (!
genreflex) fprintf(sfp,
"#include \"%sLinkDef.h\"\n\n",subdirname.
Data() );
2875 fprintf(sfp,
"#include \"%sProjectDict.cxx\"\n\n",subdirname.
Data() );
2876 fprintf(sfp,
"struct DeleteObjectFunctor {\n");
2877 fprintf(sfp,
" template <typename T>\n");
2878 fprintf(sfp,
" void operator()(const T *ptr) const {\n");
2879 fprintf(sfp,
" delete ptr;\n");
2880 fprintf(sfp,
" }\n");
2881 fprintf(sfp,
" template <typename T, typename Q>\n");
2882 fprintf(sfp,
" void operator()(const std::pair<T,Q> &) const {\n");
2883 fprintf(sfp,
" // Do nothing\n");
2884 fprintf(sfp,
" }\n");
2885 fprintf(sfp,
" template <typename T, typename Q>\n");
2886 fprintf(sfp,
" void operator()(const std::pair<T,Q*> &ptr) const {\n");
2887 fprintf(sfp,
" delete ptr.second;\n");
2888 fprintf(sfp,
" }\n");
2889 fprintf(sfp,
" template <typename T, typename Q>\n");
2890 fprintf(sfp,
" void operator()(const std::pair<T*,Q> &ptr) const {\n");
2891 fprintf(sfp,
" delete ptr.first;\n");
2892 fprintf(sfp,
" }\n");
2893 fprintf(sfp,
" template <typename T, typename Q>\n");
2894 fprintf(sfp,
" void operator()(const std::pair<T*,Q*> &ptr) const {\n");
2895 fprintf(sfp,
" delete ptr.first;\n");
2896 fprintf(sfp,
" delete ptr.second;\n");
2897 fprintf(sfp,
" }\n");
2898 fprintf(sfp,
"};\n\n");
2905 TIter flnext(filelist);
2912 if (strstr(info->
GetName(),
"@@")) {
2929 for(
auto rule : rules) {
2930 if( rule->IsRenameRule() || rule->IsAliasRule() )
2933 if ( rule->HasTarget( el->
GetName()) && rule->GetAttributes()[0] != 0 ) {
2936 if (
attr.Contains(
"owner")) {
2937 if (
attr.Contains(
"notowner")) {
2951 list->AddAfter(alternate, info);
2952 list->Remove(alternate);
2960 TIter nextextra(&extrainfos);
2963 filelist->
Add(info);
2974 TIter subnext(list);
2989 subClasses.
Add(subinfo);
2994 subClasses.
Clear(
"nodelete");
2996 extrainfos.
Clear(
"nodelete");
2999 path.
Form(
"%s/%sProjectHeaders.h",clean_dirname.
Data(),subdirname.
Data());
3000 FILE *allfp = fopen(path,
"a");
3002 Error(
"MakeProject",
"Cannot open output file:%s\n",path.
Data());
3004 fprintf(allfp,
"#include \"%sProjectInstances.h\"\n", subdirname.
Data());
3008 printf(
"MakeProject has generated %d classes in %s\n",ngener,clean_dirname.
Data());
3019 FILE *fpMAKE =
nullptr;
3023 path.
Form(
"%s/makep.cmd",clean_dirname.
Data());
3025 path.
Form(
"%s/MAKEP",clean_dirname.
Data());
3028 fpMAKE = fopen(path,
"wb");
3030 fpMAKE = fopen(path,
"w");
3033 Error(
"MakeProject",
"cannot open file %s", path.
Data());
3041 FILE *ifp =
nullptr;
3042 path.
Form(
"%s/%sProjectInstances.h",clean_dirname.
Data(),subdirname.
Data());
3044 ifp = fopen(path,
"wb");
3046 ifp = fopen(path,
"w");
3049 Error(
"MakeProject",
"cannot open path file %s", path.
Data());
3058 fprintf(fpMAKE,
"genreflex %sProjectHeaders.h -o %sProjectDict.cxx --comments --iocomments %s ",subdirname.
Data(),subdirname.
Data(),
gSystem->GetIncludePath());
3059 path.
Form(
"%s/%sSelection.xml",clean_dirname.
Data(),subdirname.
Data());
3061 fprintf(fpMAKE,
"rootcling -v1 -f %sProjectDict.cxx %s ", subdirname.
Data(),
gSystem->GetIncludePath());
3062 path.
Form(
"%s/%sLinkDef.h",clean_dirname.
Data(),subdirname.
Data());
3068 FILE *fp = fopen(path,
"wb");
3070 FILE *fp = fopen(path,
"w");
3073 Error(
"MakeProject",
"cannot open path file %s", path.
Data());
3082 fprintf(fp,
"<lcgdict>\n");
3085 fprintf(fp,
"#ifdef __CLING__\n");
3097 if (strncmp(info->
GetName(),
"auto_ptr<", std::char_traits<char>::length(
"auto_ptr<")) == 0) {
3106 for(
auto rule : rules) {
3109 rule->AsString(strrule,
"x");
3112 selections.
Append(strrule);
3115 rule->AsString(strrule);
3116 if (strncmp(strrule.
Data(),
"type=",5)==0) {
3119 fprintf(fp,
"#pragma %s;\n",strrule.
Data());
3126 std::vector<std::string> inside;
3133 switch ( stlkind ) {
3137 what =
"std::pair<";
3147 tmp.
Form(
"<class name=\"%s\" />\n",
what.Data());
3151 tmp.
Form(
"template class %s;\n",
what.Data());
3156 what.ReplaceAll(
"std::",
"");
3159 fprintf(fp,
"#pragma link C++ class %s+;\n",
what.Data());
3167 tmp.
Form(
"<class name=\"%s\" />\n",key->
GetName());
3176 what.ReplaceAll(
"std::",
"");
3177 fprintf(fp,
"#pragma link C++ class %s+;\n",key->
GetName());
3188 tmp.
Form(
"<class name=\"%s\" />\n",
what.Data());
3192 if (
what[
what.Length()-1] ==
'>') {
3193 tmp.
Form(
"template class %s;\n",
what.Data());
3199 what.ReplaceAll(
"std::",
"");
3200 fprintf(fp,
"#pragma link C++ class %s+;\n",
what.Data());
3210 tmp.
Form(
"<class name=\"%s\" />\n",
what.Data());
3214 tmp.
Form(
"template class %s;\n",
what.Data());
3223 fprintf(ifp,
"#ifndef PROJECT_INSTANCES_H\n");
3224 fprintf(ifp,
"#define PROJECT_INSTANCES_H\n");
3225 fprintf(ifp,
"%s",instances.
Data());
3226 fprintf(ifp,
"#endif\n");
3227 fprintf(fp,
"%s",selections.
Data());
3228 fprintf(fp,
"</lcgdict>\n");
3230 fprintf(fp,
"#endif\n");
3242 object.Append(
gSystem->GetObjExt() );
3243 cmd.
ReplaceAll(
"$ObjectFiles",
object.Data());
3251 TString rootbuild = ROOTBUILD;
3253 sOpt =
gSystem->GetFlagsOpt();
3255 sOpt =
gSystem->GetFlagsDebug();
3257#if defined(_MSC_VER) && defined(_DEBUG)
3260 sOpt =
gSystem->GetFlagsDebug();
3265 fprintf(fpMAKE,
"-s %sSelection.xml \n",subdirname.
Data());
3267 fprintf(fpMAKE,
"%sProjectHeaders.h ",subdirname.
Data());
3268 fprintf(fpMAKE,
"%sLinkDef.h \n",subdirname.
Data());
3271 fprintf(fpMAKE,
"%s\n",cmd.
Data());
3273 printf(
"%s/MAKEP file has been generated\n", clean_dirname.
Data());
3278 if (!opt.
Contains(
"nocompilation")) {
3280 path =
gSystem->WorkingDirectory();
3283 gSystem->Exec(
"chmod +x MAKEP");
3284 int res = !
gSystem->Exec(
"./MAKEP");
3287 chmod(
"makep.cmd",00700);
3288 int res = !
gSystem->Exec(
"MAKEP");
3290 gSystem->ChangeDirectory(path);
3292 if (res) printf(
"Shared lib %s has been generated\n",path.
Data());
3297 if (res) printf(
"Shared lib %s has been dynamically linked\n",path.
Data());
3317 TList *list = listRetcode.fList;
3318 auto retcode = listRetcode.fReturnCode;
3331 if (version > 1000000) version -= 1000000;
3332 if (version < 53419 || (59900 < version && version < 59907)) {
3347 if (!base)
continue;
3358 std::vector<Int_t> si_uids;
3373 if (strcmp(obj->
GetName(),
"listOfRules")==0) {
3381 rulelnk = rulelnk->
Next();
3395 Warning(
"ReadStreamerInfo",
"The StreamerInfo for %s does not have a list of elements.",info->
GetName());
3400 Bool_t isstl = element && strcmp(
"This",element->
GetName())==0;
3402 if ( (!isstl &&
mode ==0) || (isstl &&
mode ==1) ) {
3408 if (uid >= asize && uid <100000)
fClassIndex->Set(2*asize);
3409 if (uid >= 0 && uid < fClassIndex->
GetSize()) {
3410 si_uids.push_back(uid);
3414 printf(
"ReadStreamerInfo, class:%s, illegal uid=%d\n",info->
GetName(),uid);
3427 fgTsSIHashes.Insert(listRetcode.fHash, std::move(si_uids));
3478 for (
Int_t i=0;i<npids;i++) {
3524 listOfRules.
SetName(
"listOfRules");
3525 std::set<TClass*> classSet;
3531 if (
gDebug > 0) printf(
" -class: %s info number %d saved\n",info->
GetName(),uid);
3537 if ( classSet.find( clinfo ) == classSet.end() ) {
3538 if (
gDebug > 0) printf(
" -class: %s stored the I/O customization rules\n",info->
GetName());
3545 listOfRules.
Add(obj);
3547 classSet.insert(clinfo);
3558 list.Add(&listOfRules);
3565 fKeys->Remove(&key);
3590 "you want to read through a cache, but you have no valid cache "
3591 "directory set - reading remotely");
3592 ::Info(
"TFile::OpenFromCache",
"set cache directory using TFile::SetCacheFileDir()");
3600 "you want to read through a cache, but you are reading "
3601 "local files - CACHEREAD disabled");
3608 cachefilepath += fileurl.
GetFile();
3609 cachefilepathbasedir =
gSystem->GetDirName(cachefilepath);
3610 if ((
gSystem->mkdir(cachefilepathbasedir,
kTRUE) < 0) &&
3612 ::Warning(
"TFile::OpenFromCache",
"you want to read through a cache, but I "
3613 "cannot create the directory %s - CACHEREAD disabled",
3614 cachefilepathbasedir.
Data());
3619 cachefilepath +=
"__";
3623 if (strstr(
name,
"zip=")) {
3628 Int_t optioncount = 0;
3637 if (optioncount!=0) {
3642 newoptions +=
value;
3652 cachefilepath +=
"__";
3653 cachefilepath += zipname;
3664 if (!
gSystem->GetPathInfo(cachefilepath, &
id, &
size, &flags, &modtime)) {
3667 char cacheblock[256];
3668 char remotblock[256];
3671 cfurl = cachefilepath;
3672 cfurl +=
"?filetype=raw";
3675 ropt +=
"&filetype=raw";
3688 ::Error(
"TFile::OpenFromCache",
3689 "cannot open the cache file to check cache consistency");
3694 ::Error(
"TFile::OpenFromCache",
3695 "cannot open the remote file to check cache consistency");
3702 if ((!cachefile->
ReadBuffer(cacheblock,256)) &&
3704 if (memcmp(cacheblock, remotblock, 256)) {
3705 ::Warning(
"TFile::OpenFromCache",
"the header of the cache file "
3706 "differs from the remote file - forcing an update");
3710 ::Warning(
"TFile::OpenFromCache",
"the header of the cache and/or "
3711 "remote file are not readable - forcing an update");
3726 const auto cachefilepathtmp = cachefilepath + std::to_string(
gSystem->GetPid()) +
".tmp";
3729 "you want to read through a cache, but I "
3730 "cannot make a cache copy of %s - CACHEREAD disabled",
3731 cachefilepathbasedir.
Data());
3735 if (
gSystem->AccessPathName(cachefilepath))
3736 gSystem->Rename(cachefilepathtmp, cachefilepath);
3738 gSystem->Unlink(cachefilepathtmp);
3741 ::Info(
"TFile::OpenFromCache",
"using local cache copy of %s [%s]",
name, cachefilepath.
Data());
3744 fileurl.
SetFile(cachefilepath);
3747 tagfile = cachefilepath;
3748 tagfile +=
".ROOT.cachefile";
3806 if (!url || strlen(url) <= 0) {
3807 ::Error(
"TFile::Open",
"no url specified");
3812 gSystem->ExpandPathName(expandedUrl);
3816 if (
gEnv->GetValue(
"TFile.CrossProtocolRedirects", 1) == 1) {
3819 ssize_t
len = getxattr(fileurl.
GetFile(),
"eos.url.xroot",
nullptr, 0);
3821 std::string xurl(
len, 0);
3822 std::string fileNameFromUrl{fileurl.
GetFile()};
3823 if (getxattr(fileNameFromUrl.c_str(),
"eos.url.xroot", &xurl[0],
len) ==
len) {
3826 if (
auto baseName = fileNameFromUrl.substr(fileNameFromUrl.find_last_of(
"/") + 1);
3827 std::equal(baseName.crbegin(), baseName.crend(), xurl.crbegin())) {
3828 if ((
f =
TFile::Open(xurl.c_str(), options, ftitle, compress, netopt))) {
3829 if (!
f->IsZombie()) {
3850 TString sto = opts(ito + std::char_traits<char>::length(
"TIMEOUT="), opts.
Length());
3855 if (
gDebug > 0)
::Info(
"TFile::Open",
"timeout of %d millisec requested", toms);
3857 sto.
Insert(0,
"TIMEOUT=");
3875 ::Info(
"TFile::Open",
"waited %d millisec for asynchronous open", toms - xtms);
3877 ::Info(
"TFile::Open",
"timeout option not supported (requires asynchronous"
3882 ::Error(
"TFile::Open",
"timeout expired while opening '%s'", expandedUrl.
Data());
3889 ::Warning(
"TFile::Open",
"incomplete 'TIMEOUT=' option specification - ignored");
3895 const char *
option = opts;
3898 TString namelist(expandedUrl);
3905 FILE *fout =
gSystem->TempFileName(outf);
3908 gSystem->RedirectOutput(outf,
"w", &rh);
3915 while (namelist.
Tokenize(
n, from,
"|") && !
f) {
3918 if (!strcasecmp(
option,
"CACHEREAD") ||
3919 ((!strcasecmp(
option,
"READ") || !strcasecmp(
option,
"READ_WITHOUT_GLOBALREGISTRATION") || !
option[0]) &&
3950 TString lfname =
gEnv->GetValue(
"Path.Localroot",
"");
3959 lfname = urlname.
GetUrl();
3966 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TFile",
name))) {
3967 if (
h->LoadPlugin() == -1)
3975 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TFile",
name))) {
3976 if (
h->LoadPlugin() == -1)
3984 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TFile",
name)) &&
3985 h->LoadPlugin() == 0) {
3986 name.ReplaceAll(
"file:",
"");
3994 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TFile",
name.Data()))) {
3995 if (
h->LoadPlugin() == -1)
4007 if (
f &&
f->IsZombie()) {
4010 if( newUrl.
Length() && (newUrl !=
name) &&
gEnv->GetValue(
"TFile.CrossProtocolRedirects", 1) )
4019 gSystem->RedirectOutput(0,
"", &rh);
4030 f &&
f->IsWritable() && !
f->IsRaw()) {
4065 const char *ftitle,
Int_t compress,
4073 if (!url || strlen(url) <= 0) {
4074 ::Error(
"TFile::AsyncOpen",
"no url specified");
4080 gSystem->ExpandPathName(namelist);
4086 TString outf =
".TFileAsyncOpen_";
4087 FILE *fout =
gSystem->TempFileName(outf);
4090 gSystem->RedirectOutput(outf,
"w", &rh);
4097 while (namelist.
Tokenize(
n, from,
"|") && !
f) {
4112 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TFile",
name)) &&
4113 !strcmp(
h->GetClass(),
"TNetXNGFile")
4114 &&
h->LoadPlugin() == 0) {
4123 gSystem->RedirectOutput(0,
"", &rh);
4125 if (!notfound && !
f)
4170 if ((
f = fh->
GetFile()) && !(
f->IsZombie())) {
4172 Bool_t cr = (!strcmp(
f->GetOption(),
"CREATE") ||
4173 !strcmp(
f->GetOption(),
"RECREATE") ||
4184 if (
f)
f->fAsyncHandle = fh;
4196#if defined(R__WINGCC)
4200#elif defined(R__SEEK64)
4201 return ::open64(pathname, flags,
mode);
4203 return ::open(pathname, flags,
mode);
4212 if (fd < 0)
return 0;
4221 return ::read(fd, buf,
len);
4229 return ::write(fd, buf,
len);
4240#if defined (R__SEEK64)
4241 return ::lseek64(fd,
offset, whence);
4243 return ::_lseeki64(fd,
offset, whence);
4245 return ::lseek(fd,
offset, whence);
4272 return ::_commit(fd);
4343 if (!cached.EndsWith(
"/"))
4350 ::Error(
"TFile::SetCacheFileDir",
"no sufficient permissions on cache directory %s or cannot create it",
TString(cachedir).Data());
4392 cachetagfile +=
".tag.ROOT.cache";
4393 if (!
gSystem->GetPathInfo(cachetagfile, &
id, &
size, &flags, &modtime)) {
4396 if (lastcleanuptime < cleanupinterval) {
4397 ::Info(
"TFile::ShrinkCacheFileDir",
"clean-up is skipped - last cleanup %lu seconds ago - you requested %lu", lastcleanuptime, cleanupinterval);
4403 cachetagfile +=
"?filetype=raw";
4404 TFile *tagfile =
nullptr;
4406 if (!(tagfile =
TFile::Open(cachetagfile,
"RECREATE"))) {
4407 ::Error(
"TFile::ShrinkCacheFileDir",
"cannot create the cache tag file %s", cachetagfile.
Data());
4415#if defined(R__WIN32)
4416 cmd =
"echo <TFile::ShrinkCacheFileDir>: cleanup to be implemented";
4417#elif defined(R__MACOSX)
4418 cmd.
Form(
"perl -e 'my $cachepath = \"%s\"; my $cachesize = %lld;my $findcommand=\"find $cachepath -type f -exec stat -f \\\"\\%%a::\\%%N::\\%%z\\\" \\{\\} \\\\\\;\";my $totalsize=0;open FIND, \"$findcommand | sort -k 1 |\";while (<FIND>) { my ($accesstime, $filename, $filesize) = split \"::\",$_; $totalsize += $filesize;if ($totalsize > $cachesize) {if ( ( -e \"${filename}.ROOT.cachefile\" ) || ( -e \"${filename}\" ) ) {unlink \"$filename.ROOT.cachefile\";unlink \"$filename\";}}}close FIND;' ",
fgCacheFileDir.Data(),shrinksize);
4420 cmd.
Form(
"perl -e 'my $cachepath = \"%s\"; my $cachesize = %lld;my $findcommand=\"find $cachepath -type f -exec stat -c \\\"\\%%x::\\%%n::\\%%s\\\" \\{\\} \\\\\\;\";my $totalsize=0;open FIND, \"$findcommand | sort -k 1 |\";while (<FIND>) { my ($accesstime, $filename, $filesize) = split \"::\",$_; $totalsize += $filesize;if ($totalsize > $cachesize) {if ( ( -e \"${filename}.ROOT.cachefile\" ) || ( -e \"${filename}\" ) ) {unlink \"$filename.ROOT.cachefile\";unlink \"$filename\";}}}close FIND;' ",
fgCacheFileDir.Data(),shrinksize);
4426 if ((
gSystem->Exec(cmd)) != 0) {
4427 ::Error(
"TFile::ShrinkCacheFileDir",
"error executing clean-up script");
4506 return fFile->Matches(url);
4507 }
else if (
fName.Length() > 0){
4553 Bool_t forceRemote =
gEnv->GetValue(
"Path.ForceRemote", 0);
4554 forceRemote = (forceRemote) ?
kTRUE :
gEnv->GetValue(
"TFile.ForceRemote", 0);
4557 forceRemote =
kTRUE;
4558 else if (opts.
Contains(
"remote=0"))
4567 if (fname[0] ==
'/') {
4569 lfname.
Form(
"%s%s", prefix->
Data(), fname);
4572 }
else if (fname[0] ==
'~' || fname[0] ==
'$') {
4575 lfname.
Form(
"%s/%s",
gSystem->HomeDirectory(), fname);
4584 if (!
gSystem->ExpandPathName(fn)) {
4590 if (localFile && prefix)
4597 }
else if (
TPMERegexp(
"^(http[s]?|s3http[s]?|[a]?s3|gs|gshttp[s]?){1}:",
"i").Match(
name)) {
4601 }
else if (!strncmp(
name,
"file:", 5)) {
4627 if (of && (of->
GetSize() > 0)) {
4630 while ((
f = (
TFile *)nxf()))
4631 if (
f->Matches(
name))
4632 return f->GetAsyncOpenStatus();
4644 if (handle && handle->
fFile) {
4674 if (of && (of->
GetSize() > 0)) {
4677 while ((
f = (
TFile *)nxf()))
4678 if (
f->Matches(
name))
4679 return f->GetEndpointUrl();
4683 return (
const TUrl *)
nullptr;
4691 fprintf(stderr,
"[TFile::Cp] Total %.02f MB\t|", (
Double_t)
size/1048576);
4693 for (
int l = 0;
l < 20;
l++) {
4695 if (
l < 20*bytesread/
size)
4696 fprintf(stderr,
"=");
4697 else if (
l == 20*bytesread/
size)
4698 fprintf(stderr,
">");
4699 else if (
l > 20*bytesread/
size)
4700 fprintf(stderr,
".");
4702 fprintf(stderr,
"=");
4708 fprintf(stderr,
"| %.02f %% [%.01f MB/s]\r",
4709 100.0*(
size?(bytesread/((
float)
size)):1), (lCopy_time>0.)?bytesread/lCopy_time/1048576.:0.);
4733 opt +=
"filetype=raw";
4737 char *copybuffer =
nullptr;
4739 TFile *sfile =
this;
4740 TFile *dfile =
nullptr;
4746 if (
gSystem->AccessPathName(ourl)) {
4756 ::Error(
"TFile::Cp",
"cannot open destination file %s", dst);
4762 rmdestiferror =
kTRUE;
4767 copybuffer =
new char[bufsize];
4769 ::Error(
"TFile::Cp",
"cannot allocate the copy buffer");
4774 Long64_t read, written, totalread, filesize, b00;
4784 if (progressbar)
CpProgress(totalread, filesize,watch);
4789 if (filesize - b1 > (
Long64_t)bufsize) {
4792 readsize = filesize - b1;
4795 if (readsize == 0)
break;
4801 if ((read <= 0) || readop) {
4802 ::Error(
"TFile::Cp",
"cannot read from source file %s. readsize=%lld read=%lld readop=%d",
4803 sfile->
GetName(), readsize, read, readop);
4810 if ((written != read) || writeop) {
4811 ::Error(
"TFile::Cp",
"cannot write %lld bytes to destination file %s", read, dst);
4815 }
while (read == (
Long64_t)bufsize);
4819 fprintf(stderr,
"\n");
4825 if (dfile) dfile->
Close();
4827 if (dfile)
delete dfile;
4828 if (copybuffer)
delete[] copybuffer;
4830 if (rmdestiferror && (success !=
kTRUE))
4848 TFile *sfile =
nullptr;
4854 ::Error(
"TFile::Cp",
"cannot open source file %s",
src);
4856 success = sfile->
Cp(dst, progressbar, bufsize);
4871#if defined(R__neverLINUX) && !defined(R__WINGCC)
4883 int advice = POSIX_FADV_WILLNEED;
4888 advice = POSIX_FADV_NORMAL;
4892#if defined(R__SEEK64)
void frombuf(char *&buf, Bool_t *x)
void tobuf(char *&buf, Bool_t x)
T ReadBuffer(TBufferFile *buf)
One of the template functions used to read objects from messages.
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
TClass * IsA() const override
bool Bool_t
Boolean (0=false, 1=true) (bool)
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)
int Ssiz_t
String size (currently int)
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)
short Short_t
Signed Short integer 2 bytes (short)
double Double_t
Double 8 bytes.
constexpr Ssiz_t kNPOS
The equivalent of std::string::npos for the ROOT class TString.
long long Long64_t
Portable signed long integer 8 bytes.
const char Option_t
Option string (const char)
if(isa< VarDecl >(D)||isa< FieldDecl >(D)||isa< EnumConstantDecl >(D))
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void SysError(const char *location, const char *msgfmt,...)
Use this function in case a system (OS or GUI) related error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
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 Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
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 cname
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
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 UChar_t len
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t attr
Option_t Option_t TPoint TPoint const char mode
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 bytes
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
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 TPluginManager * gPluginMgr
externTVirtualMutex * gROOTMutex
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
R__EXTERN TSystem * gSystem
R__EXTERN void **(* gThreadTsd)(void *, Int_t)
R__EXTERN TVirtualMonitoringWriter * gMonitoringWriter
#define R__LOCKGUARD(mutex)
#define R__WRITE_LOCKGUARD(mutex)
#define R__READ_LOCKGUARD(mutex)
std::optional< TKeyMapNode > Next()
TIterator(TFile *file, std::uint64_t addr)
const TMatches FindRules(const TString &source) const
Return all the rules that are about the given 'source' class.
const TObjArray * GetRules() const
This class is a thread-safe associative collection connecting a 256 bits digest/hash to a collection ...
void AsString(TString &out, const char *options="") const
Add to the string 'out' the string representation of the rule.
static TArchiveFile * Open(const char *url, TFile *file)
Return proper archive file handler depending on passed url.
Array of chars or bytes (8 bits per element).
Buffer base class used for serializing objects.
TClass instances represent classes, structs and namespaces in the ROOT type system.
Bool_t IsSyntheticPair() const
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
Bool_t HasInterpreterInfo() const
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
static Bool_t AddRule(const char *rule)
Add a schema evolution customization rule.
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
Version_t GetClassVersion() const
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
void SetName(const char *name)
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
TObject * Clone(const char *newname="") const override
Make a clone of an collection using the Streamer facility.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
static void GetDateTime(UInt_t datetime, Int_t &date, Int_t &time)
Static function that returns the date and time.
void Close(Option_t *option="") override
Delete all objects from memory and directory structure itself.
Bool_t cd() override
Change current directory to "this" directory.
Bool_t IsWritable() const override
void Delete(const char *namecycle="") override
Delete Objects or/and keys in the current directory.
Int_t AppendKey(TKey *key) override
Insert key in the linked list of keys of this directory.
Int_t ReadKeys(Bool_t forceRead=kTRUE) override
Read the linked list of keys.
TDatime fDatimeM
Date and time of last modification.
void Save() override
Save recursively all directory keys and headers.
Int_t fNbytesKeys
Number of bytes for the keys.
Int_t GetNkeys() const override
Long64_t fSeekKeys
Location of Keys record on file.
Int_t Sizeof() const override
Return the size in bytes of the directory header.
Long64_t fSeekParent
Location of parent directory on file.
void BuildDirectoryFile(TFile *motherFile, TDirectory *motherDir)
Initialise directory to defaults.
Int_t Write(const char *name=nullptr, Int_t opt=0, Int_t bufsize=0) override
Write all objects in memory to disk.
Long64_t fSeekDir
Location of directory on file.
Int_t fNbytesName
Number of bytes in TNamed at creation time.
TDatime fDatimeC
Date and time when directory is created.
Bool_t fWritable
True if directory is writable.
Int_t WriteTObject(const TObject *obj, const char *name=nullptr, Option_t *option="", Int_t bufsize=0) override
Write object obj to this directory.
TObject * Get(const char *namecycle) override
Return pointer to object identified by namecycle.
void FillBuffer(char *&buffer) override
Encode directory header into output buffer.
void SetWritable(Bool_t writable=kTRUE) override
Set the new value of fWritable recursively.
TList * fKeys
Pointer to keys list in memory.
void ls(Option_t *option="") const override
List Directory contents.
TDirectory::TContext keeps track and restore the current directory.
virtual TList * GetList() const
TDirectory(const TDirectory &directory)=delete
void SetName(const char *newname) override
Set the name of the TNamed.
TUUID fUUID
Unique identifier.
TList * fList
List of objects in memory.
A cache when reading files over the network.
virtual void Close(Option_t *option="")
Close out any threads or asynchronous fetches used by the underlying implementation.
virtual Int_t GetBufferSize() const
virtual void SetFile(TFile *file, TFile::ECacheAction action=TFile::kDisconnect)
Set the file using this cache and reset the current blocks (if any).
A cache when writing files over the network.
Class holding info about the file being opened.
TFile * fFile
TFile instance of the file being opened.
const char * GetOpt() const
Bool_t Matches(const char *name)
Return kTRUE if this async request matches the open request specified by 'url'.
Int_t GetCompress() const
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
static std::atomic< Long64_t > fgBytesRead
Number of bytes read by all TFile objects.
Int_t fReadCalls
Number of read calls ( not counting the cache calls )
static void SetFileBytesWritten(Long64_t bytes=0)
static Bool_t fgCacheFileForce
Indicates, to force all READ to CACHEREAD.
Long64_t fBytesRead
Number of bytes read from this file.
virtual TProcessID * ReadProcessID(UShort_t pidf)
The TProcessID with number pidf is read from this file.
void ls(Option_t *option="") const override
List file contents.
ROOT::Detail::TKeyMapIterable WalkTKeys()
Traverses all TKeys in the TFile and returns information about them.
virtual void Seek(Long64_t offset, ERelativeTo pos=kBeg)
Seek to a specific position in the file. Pos it either kBeg, kCur or kEnd.
static Bool_t GetOnlyStaged()
Returns staged only flag.
static void IncrementFileCounter()
static Bool_t ShrinkCacheFileDir(Long64_t shrinkSize, Long_t cleanupInteval=0)
Try to shrink the cache to the desired size.
Long64_t fSeekFree
Location on disk of free segments structure.
static Int_t fgReadaheadSize
Readahead buffer size.
void FillBuffer(char *&buffer) override
Encode file output buffer.
Double_t fSum2Buffer
Sum of squares of buffer sizes of objects written so far.
static void SetReadaheadSize(Int_t bufsize=256000)
static Bool_t fgCacheFileDisconnected
Indicates, we trust in the files in the cache dir without stat on the cached file.
const TList * GetStreamerInfoCache()
Returns the cached list of StreamerInfos used in this file.
static Bool_t GetReadStreamerInfo()
If the streamerinfos are to be read at file opening.
TArchiveFile * fArchive
!Archive file from which we read this file
virtual Int_t SysSync(Int_t fd)
Interface to system fsync. All arguments like in POSIX fsync().
virtual Int_t ReOpen(Option_t *mode)
Reopen a file with a different access mode.
virtual void ReadStreamerInfo()
Read the list of StreamerInfo from this file.
virtual Bool_t Matches(const char *name)
Return kTRUE if 'url' matches the coordinates of this file.
virtual void SetCacheRead(TFileCacheRead *cache, TObject *tree=nullptr, ECacheAction action=kDisconnect)
Set a pointer to the read cache.
TArrayC * fClassIndex
!Index of TStreamerInfo classes written to this file
static Long64_t GetFileBytesWritten()
Static function returning the total number of bytes written to all files.
virtual InfoListRet GetStreamerInfoListImpl(bool lookupSICache)
See documentation of GetStreamerInfoList for more details.
static void SetReadStreamerInfo(Bool_t readinfo=kTRUE)
Specify if the streamerinfos must be read at file opening.
Bool_t fNoAnchorInName
!True if we don't want to force the anchor to be appended to the file name
static void SetFileBytesRead(Long64_t bytes=0)
Long64_t fSeekInfo
Location on disk of StreamerInfo record.
void Paint(Option_t *option="") override
Paint all objects in the file.
Int_t GetBestBuffer() const
Return the best buffer size of objects on this file.
TList * fOpenPhases
!Time info about open phases
virtual void SetCompressionLevel(Int_t level=ROOT::RCompressionSetting::ELevel::kUseMin)
See comments for function SetCompressionSettings.
TFileCacheWrite * GetCacheWrite() const
Return a pointer to the current write cache.
static void SetFileReadCalls(Int_t readcalls=0)
static TString fgCacheFileDir
Directory where to locally stage files.
virtual Int_t SysRead(Int_t fd, void *buf, Int_t len)
Interface to system read. All arguments like in POSIX read().
Int_t fVersion
File format version.
void Print(Option_t *option="") const override
Print all objects in the file.
static std::atomic< Long64_t > fgFileCounter
Counter for all opened files.
virtual EAsyncOpenStatus GetAsyncOpenStatus()
void Streamer(TBuffer &) override
Stream a TFile object.
static UInt_t GetOpenTimeout()
Returns open timeout (in ms).
static void CpProgress(Long64_t bytesread, Long64_t size, TStopwatch &watch)
Print file copy progress.
static Bool_t fgOnlyStaged
Before the file is opened, it is checked, that the file is staged, if not, the open fails.
virtual Int_t GetNProcessIDs() const
Bool_t fMustFlush
!True if the file buffers must be flushed
Int_t WriteBufferViaCache(const char *buf, Int_t len)
Write buffer via cache.
static Long64_t GetFileBytesRead()
Static function returning the total number of bytes read from all files.
Int_t ReadBufferViaCache(char *buf, Int_t len)
Read buffer via cache.
virtual TKey * CreateKey(TDirectory *mother, const TObject *obj, const char *name, Int_t bufsize)
Creates key for object and converts data to buffer.
virtual void WriteFree()
Write FREE linked list on the file.
static Int_t GetReadaheadSize()
Static function returning the readahead buffer size.
~TFile() override
File destructor.
virtual Bool_t ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf)
Read the nbuf blocks described in arrays pos and len.
static Long64_t GetFileCounter()
TMap * fCacheReadMap
!Pointer to the read cache (if any)
Long64_t fBEGIN
First used byte in file.
virtual UShort_t WriteProcessID(TProcessID *pid)
Check if the ProcessID pidd is already in the file, if not, add it and return the index number in the...
virtual void MakeProject(const char *dirname, const char *classes="*", Option_t *option="new")
Generate source code necessary to access the objects stored in the file.
friend class TDirectoryFile
Long64_t fArchiveOffset
!Offset at which file starts in archive
Int_t fNbytesInfo
Number of bytes for StreamerInfo record.
virtual Long64_t GetSize() const
Returns the current file size.
virtual Bool_t IsOpen() const
Returns kTRUE in case file is open and kFALSE if file is not open.
TFileOpenHandle * fAsyncHandle
!For proper automatic cleanup
static Bool_t SetOnlyStaged(Bool_t onlystaged)
Sets only staged flag.
virtual Bool_t Cp(const char *dst, Bool_t progressbar=kTRUE, UInt_t bufsize=1000000)
Allows to copy this file to the dst URL.
Int_t Write(const char *name=nullptr, Int_t opt=0, Int_t bufsize=0) override
Write memory objects to this file.
virtual Long64_t GetBytesRead() const
virtual Int_t GetErrno() const
Method returning errno.
virtual void SetCompressionSettings(Int_t settings=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault)
Used to specify the compression level and algorithm.
static Bool_t fgReadInfo
if true (default) ReadStreamerInfo is called when opening a file
virtual void Init(Bool_t create)
Initialize a TFile object.
TFile(const TFile &)=delete
Long64_t GetRelOffset() const
static TFileOpenHandle * AsyncOpen(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Submit an asynchronous open request.
virtual void SetCacheWrite(TFileCacheWrite *cache)
Set a pointer to the write cache.
TString fOption
File options.
virtual Bool_t WriteBuffer(const char *buf, Int_t len)
Write a buffer to the file.
void SumBuffer(Int_t bufsize)
Increment statistics for buffer sizes of objects in this file.
static const char * GetCacheFileDir()
Get the directory where to locally stage/cache remote files.
EAsyncOpenStatus
Asynchronous open request status.
virtual void WriteStreamerInfo()
Write the list of TStreamerInfo as a single object in this file The class Streamer description for al...
virtual Long64_t GetBytesWritten() const
Return the total number of bytes written so far to the file.
Int_t fCompress
Compression level and algorithm.
static TFile *& CurrentFile()
Return the current ROOT file if any.
virtual void SetCompressionAlgorithm(Int_t algorithm=ROOT::RCompressionSetting::EAlgorithm::kUseGlobal)
See comments for function SetCompressionSettings.
virtual const TUrl * GetEndpointUrl() const
Int_t fNbytesFree
Number of bytes for free segments structure.
static constexpr Version_t Class_Version()
virtual void ResetErrno() const
Method resetting the errno.
Int_t Sizeof() const override
Return the size in bytes of the file header.
Bool_t FlushWriteCache()
Flush the write cache if active.
virtual void IncrementProcessIDs()
Bool_t fIsPcmFile
!True if the file is a ROOT pcm file.
TFileCacheRead * fCacheRead
!Pointer to the read cache (if any)
virtual Int_t SysClose(Int_t fd)
Interface to system close. All arguments like in POSIX close().
TFile()
File default Constructor.
Char_t fUnits
Number of bytes for file pointers.
TObjArray * fProcessIDs
!Array of pointers to TProcessIDs
static EFileType GetType(const char *name, Option_t *option="", TString *prefix=nullptr)
Resolve the file type as a function of the protocol field in 'name'.
virtual void ShowStreamerInfo()
Show the StreamerInfo of all classes written to this file.
virtual Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence)
Interface to system lseek.
virtual Int_t SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime)
Return file stat information.
virtual Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode)
Interface to system open. All arguments like in POSIX open().
ECacheAction
TTreeCache flushing semantics.
static UInt_t SetOpenTimeout(UInt_t timeout)
Sets open timeout time (in ms). Returns previous timeout value.
virtual void ReadFree()
Read the FREE linked list.
static ROOT::Internal::RConcurrentHashColl fgTsSIHashes
!TS Set of hashes built from read streamer infos
Long64_t fBytesReadExtra
Number of extra bytes (overhead) read by the readahead buffer.
Long64_t fBytesWrite
Number of bytes written to this file.
Bool_t fIsRootFile
!True is this is a ROOT file, raw file otherwise
virtual void Flush()
Synchronize a file's in-memory and on-disk states.
TList * fFree
Free segments linked list table.
virtual Bool_t ReadBufferAsync(Long64_t offs, Int_t len)
void Delete(const char *namecycle="") override
Delete Objects or/and keys in the current directory.
Bool_t fInitDone
!True if the file has been initialized
virtual void DrawMap(const char *keys="*", Option_t *option="")
Draw map of objects in this file.
virtual void MakeFree(Long64_t first, Long64_t last)
Mark unused bytes on the file.
TFileCacheWrite * fCacheWrite
!Pointer to the write cache (if any)
TString fRealName
Effective real file name (not original url)
virtual void SetOffset(Long64_t offset, ERelativeTo pos=kBeg)
Set position from where to start reading.
Long64_t fOffset
!Seek offset cache
static std::atomic< Long64_t > fgBytesWrite
Number of bytes written by all TFile objects.
TList * fInfoCache
!Cached list of the streamer infos in this file
virtual Int_t GetBytesToPrefetch() const
Max number of bytes to prefetch.
static UInt_t fgOpenTimeout
Timeout for open operations in ms - 0 corresponds to blocking i/o.
Long64_t fEND
Last used byte in file.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
static Bool_t SetCacheFileDir(std::string_view cacheDir, Bool_t operateDisconnected=kTRUE, Bool_t forceCacheread=kFALSE)
Sets the directory where to locally stage/cache remote files.
EAsyncOpenStatus fAsyncOpenStatus
!Status of an asynchronous open request
bool fGlobalRegistration
! if true, bypass use of global lists
Double_t fSumBuffer
Sum of buffer sizes of objects written so far.
Bool_t fIsArchive
!True if this is a pure archive file
TObjArray * GetListOfProcessIDs() const
void Draw(Option_t *option="") override
Fill Graphics Structure and Paint.
void Close(Option_t *option="") override
Close a file.
TClass * IsA() const override
static std::atomic< Int_t > fgReadCalls
Number of bytes read from all TFile objects.
virtual Int_t Recover()
Attempt to recover file if not correctly closed.
virtual TList * GetStreamerInfoList() final
Read the list of TStreamerInfo objects written to this file.
virtual void WriteHeader()
Write File Header.
@ k630forwardCompatibility
static TFile * OpenFromCache(const char *name, Option_t *="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Open a file for reading through the file cache.
Int_t fNProcessIDs
Number of TProcessID written to this file.
Int_t fWritten
Number of objects written so far.
Int_t GetRecordHeader(char *buf, Long64_t first, Int_t maxbytes, Int_t &nbytes, Int_t &objlen, Int_t &keylen)
Read the logical record header starting at a certain postion.
virtual Bool_t ReadBuffer(char *buf, Int_t len)
Read a buffer from the file.
Float_t GetCompressionFactor()
Return the file compression factor.
virtual Int_t SysWrite(Int_t fd, const void *buf, Int_t len)
Interface to system write. All arguments like in POSIX write().
static Int_t GetFileReadCalls()
Static function returning the total number of read calls from all files.
TFileCacheRead * GetCacheRead(const TObject *tree=nullptr) const
Return a pointer to the current read cache.
Option_t * GetOption() const override
static TList * fgAsyncOpenRequests
Int_t Sizeof() const
return number of bytes occupied by this TFree on permanent storage
virtual void ReadBuffer(char *&buffer)
Decode one free structure from input buffer.
Long64_t GetFirst() const
virtual void FillBuffer(char *&buffer)
Encode fre structure into output buffer.
TFree * AddFree(TList *lfree, Long64_t first, Long64_t last)
Add a new free segment to the list of free segments.
static void MakeFunctor(const char *name, const char *type, GlobFunc &func)
Book space in a file, create I/O buffers, to fill them, (un)compress them.
void Delete(Option_t *option="") override
Delete an object from the file.
virtual Long64_t GetSeekKey() const
virtual const char * GetClassName() const
virtual Bool_t ReadFile()
Read the key structure from the file.
void ReadKeyBuffer(char *&buffer)
Decode input buffer.
virtual Int_t WriteFile(Int_t cycle=1, TFile *f=nullptr)
Write the encoded object supported by this key.
virtual char * GetBuffer() const
void Clear(Option_t *option="") override
Remove all objects from the list.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
void Add(TObject *obj) override
virtual TObjLink * FirstLink() const
void Delete(Option_t *option="") override
Remove all objects from the list AND delete all heap based objects.
static void GenerateMissingStreamerInfos(TList *extrainfos, TStreamerElement *element)
Generate an empty StreamerInfo for types that are used in templates parameters but are not known in t...
static TString UpdateAssociativeToVector(const char *name)
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
virtual void FillBuffer(char *&buffer)
Encode TNamed into output buffer.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
virtual Int_t Sizeof() const
Return size of the TNamed part of the TObject.
Iterator of object array.
TObject * Next() override
Return next object in array. Returns 0 when no more objects in array.
Int_t IndexOf(const TObject *obj) const override
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
Int_t GetEntries() const override
Return the number of objects in array (i.e.
TObject * At(Int_t idx) const override
TObject * UncheckedAt(Int_t i) const
void Add(TObject *obj) override
Wrapper around a TObject so it can be stored in a TList.
TObject * GetObject() const
Collectable string class.
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.
virtual void SysError(const char *method, const char *msgfmt,...) const
Issue system error message.
R__ALWAYS_INLINE Bool_t IsOnHeap() const
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.
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
R__ALWAYS_INLINE Bool_t IsZombie() const
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
@ kCanDelete
if object in a list can be deleted
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Wrapper for PCRE library (Perl Compatible Regular Expressions).
Int_t Match(const TString &s, UInt_t start=0)
Runs a match on s against the regex 'this' was created with.
A TProcessID identifies a ROOT job in a unique way in time and space.
Int_t IncrementCount()
Increase the reference count to this object.
void Clear(Option_t *option="") override
delete the TObjArray pointing to referenced objects this function is called by TFile::Close("R")
void CheckInit()
Initialize fObjects.
static TObjArray * GetPIDs()
static: returns array of TProcessIDs
static TProcessID * GetSessionProcessID()
static function returning the pointer to the session TProcessID
Int_t DecrementCount()
The reference fCount is used to delete the TProcessID in the TFile destructor when fCount = 0.
static TProcessID * GetPID()
static: returns pointer to current TProcessID
static Int_t IncreaseDirLevel()
Increase the indentation level for ls().
static void IndentLevel()
Functions used by ls() to indent an object hierarchy.
static Int_t DecreaseDirLevel()
Decrease the indentation level for ls().
Sequenceable collection abstract base class.
Double_t RealTime()
Stop the stopwatch (if it is running) and return the realtime (in seconds) passed between the start a...
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
void Continue()
Resume a stopped stopwatch.
void Stop()
Stop the stopwatch.
void SetBaseCheckSum(UInt_t cs)
Describe one element (data member) to be Streamed.
TClass * GetClass() const
Describes a persistent version of a class.
Int_t GetClassVersion() const override
Int_t GenerateHeaderFile(const char *dirname, const TList *subClasses=nullptr, const TList *extrainfos=nullptr) override
Generate header file for the class described by this TStreamerInfo the function is called by TFile::M...
Int_t GetNumber() const override
TClass * IsA() const override
TClass * GetClass() const override
TObjArray * GetElements() const override
UInt_t GetCheckSum() const override
void BuildCheck(TFile *file=nullptr, Bool_t load=kTRUE) override
Check if built and consistent with the class dictionary.
void ToLower()
Change string to lower-case.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
TString & Insert(Ssiz_t pos, const char *s)
Int_t Atoi() const
Return integer value of string.
void Clear()
Clear string without changing its capacity.
const char * Data() const
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
TString & ReplaceAll(const TString &s1, const TString &s2)
void ToUpper()
Change string to upper case.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
TString & Remove(Ssiz_t pos)
TString & Append(const char *cs)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
virtual Int_t Sizeof() const
Returns size string will occupy on I/O buffer.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
static void ResetErrno()
Static function resetting system error number.
static Int_t GetErrno()
Static function returning system error number.
The TTimeStamp encapsulates seconds and ns since EPOCH.
This class defines a UUID (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDent...
void FillBuffer(char *&buffer)
Stream UUID into output buffer.
This class represents a WWW compatible URL.
const char * GetAnchor() const
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL.
void SetAnchor(const char *anchor)
const char * GetFileAndOptions() const
Return the file and its options (the string specified behind the ?).
const char * GetFile() const
void SetProtocol(const char *proto, Bool_t setDefaultPort=kFALSE)
Set protocol and, optionally, change the port accordingly.
void SetOptions(const char *opt)
const char * GetHostFQDN() const
Return fully qualified domain name of url host.
const char * GetOptions() const
void SetHost(const char *host)
const char * GetProtocol() const
void SetFile(const char *file)
Abstract Interface class describing Streamer information for one class.
virtual Int_t GetClassVersion() const =0
R__EXTERN TVirtualRWMutex * gCoreMutex
ROOT::ESTLType STLKind(std::string_view type)
Converts STL container name to number.
bool IsStdPair(std::string_view name)
ROOT::ESTLType IsSTLCont(std::string_view type)
type : type name: vector<list<classA,allocator>,allocator> result: 0 : not stl container code of cont...
int GetSplit(const char *type, std::vector< std::string > &output, int &nestedLoc, EModType mode=TClassEdit::kNone)
Stores in output (after emptying it) the split type.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
@ kUndefined
Undefined compression algorithm (must be kept the last of the list in case a new algorithm is added).
@ kUseMin
Compression level reserved when we are not sure what to use (1 is for the fastest compression)
Simple struct of the return value of GetStreamerInfoListImpl.