105 rec.
SetField(
"_player",
"drawLeafPlayer");
106 rec.
SetField(
"_module",
"draw_tree");
120 if (strcmp(key->
GetClassName(),
"TDirectoryFile") == 0) {
129 obj_class = obj->
IsA();
132 rec.
SetField(
"_player",
"drawTreePlayerKey");
133 rec.
SetField(
"_module",
"draw_tree");
150 rec.
SetField(
"_player",
"drawTreePlayer");
151 rec.
SetField(
"_module",
"draw_tree");
176 if (!itemname || (*itemname == 0))
179 return (strcmp(itemname,
"StreamerInfo") == 0) || (strcmp(itemname,
"StreamerInfo/") == 0);
227 l->Add(
gROOT->GetListOfStreamerInfo()->FindObject(
"TGraph"));
228 l->Add(
gROOT->GetListOfStreamerInfo()->FindObject(
"TH1F"));
229 l->Add(
gROOT->GetListOfStreamerInfo()->FindObject(
"TH1"));
230 l->Add(
gROOT->GetListOfStreamerInfo()->FindObject(
"TNamed"));
231 l->Add(
gROOT->GetListOfStreamerInfo()->FindObject(
"TObject"));
274 const char *path_ = path.c_str();
280 if (!obj_ptr || !obj_cl)
284 Info(
"ProduceBinary",
"Non-TObject class not supported");
308 res.resize(sbuf->
Length());
309 std::copy((
const char *)sbuf->
Buffer(), (
const char *)sbuf->
Buffer() + sbuf->
Length(), res.begin());
326 const char *path_ = path.c_str();
332 if (!obj_ptr || !obj_cl)
335 const char *store_name =
"object";
338 const char *obj_name = ((
TNamed *) obj_ptr)->GetName();
339 if (obj_name && *obj_name)
340 store_name = obj_name;
344 struct RestoreGFile {
346 ~RestoreGFile() {
gFile = oldFile; }
350 TMemFile memfile(
"dummy.file",
"RECREATE",
353 gROOT->GetListOfFiles()->Remove(&memfile);
390 const char *path_ = path.c_str();
396 if (!obj_ptr || !obj_cl)
400 Error(
"TRootSniffer",
"Only derived from TObject classes can be drawn");
413 Info(
"TRootSniffer",
"Crate IMAGE directly from pad");
418 Info(
"TRootSniffer",
"Crate IMAGE from object %s", obj->
GetName());
423 if (!options.empty()) {
458 char *png_buffer =
nullptr;
463 if (png_buffer && (
size > 0)) {
465 memcpy((
void *)res.data(), png_buffer,
size);
500 const char *path_ = path.c_str();
506 if (!obj_ptr || !obj_cl)
518 virtual const void *
GetPtr()
const {
return nullptr; }
549 std::string *debug = (reskind == 0) ? &res_str :
nullptr;
553 debug->append(
"Item name not specified\n");
554 return debug !=
nullptr;
557 const char *path_ = path.c_str();
564 debug->append(
TString::Format(
"Item:%s found:%s\n", path_, obj_ptr ?
"true" :
"false").Data());
565 if (!obj_ptr || !obj_cl)
566 return debug !=
nullptr;
577 if (prototype.
Length() == 0) {
579 debug->append(
TString::Format(
"Search for any method with name \'%s\'\n", method_name).Data());
584 TString::Format(
"Search for method \'%s\' with prototype \'%s\'\n", method_name, prototype.
Data())
594 if (funcname.
Length() > 0) {
595 if (prototype.
Length() == 0) {
597 debug->append(
TString::Format(
"Search for any function with name \'%s\'\n", funcname.
Data()).Data());
598 func =
gROOT->GetGlobalFunction(funcname);
601 debug->append(
TString::Format(
"Search for function \'%s\' with prototype \'%s\'\n", funcname.
Data(),
604 func =
gROOT->GetGlobalFunctionWithPrototype(funcname, prototype);
612 if (!method && !func) {
614 debug->append(
"Method not found\n");
615 return debug !=
nullptr;
621 debug->append(
"Server runs in read-only mode, method cannot be executed\n");
622 return debug !=
nullptr;
625 debug->append(
"Server runs in read-only mode, function cannot be executed\n");
626 return debug !=
nullptr;
629 debug->append(
"For that special method server allows access even read-only mode is specified\n");
639 std::vector<const void *> plain_args;
642 auto add_plain_arg = [&plain_args, &garbage, &add_plain](
TArgHolderBase *arg) {
643 plain_args.emplace_back(arg->GetPtr());
649 while (
auto arg =
static_cast<TMethodArg *
>(next())) {
652 if ((strcmp(arg->GetName(),
"rest_url_opt") == 0) && (strcmp(arg->GetFullTypeName(),
"const char*") == 0) &&
656 const char *pos = strstr(options.c_str(),
"method=");
657 if (!pos || (strlen(pos) < strlen(method_name) + 7))
658 return debug !=
nullptr;
659 const char *rest_url = pos + strlen(method_name) + 7;
660 if (*rest_url ==
'&') ++rest_url;
675 if (sval ==
"_this_") {
677 sval.
Form(
"(%s*)0x%zx", obj_cl->
GetName(), (
size_t)obj_ptr);
687 sval.
Form(
"(%s*)0x%zx", post_obj->
ClassName(), (
size_t)post_obj);
689 garbage.
Add(post_obj);
698 sval.
Form(
"(%s*)0x%zx", post_obj->
ClassName(), (
size_t)post_obj);
700 garbage.
Add(post_obj);
708 if (post_obj ==
nullptr) {
710 debug->append(
TString::Format(
"Fail to create object of class %s\n", clname.
Data()).Data());
713 debug->append(
TString::Format(
"Reconstruct object of class %s from POST data\n", clname.
Data()).Data());
718 garbage.
Add(post_obj);
724 sval.
Form(
"(%s*)0x%zx", clname.
Data(), (
size_t)post_obj);
726 }
else if (sval ==
"_post_data_") {
729 }
else if (sval ==
"_post_length_")
732 sanitize_numeric =
kTRUE;
734 sanitize_numeric =
kTRUE;
736 if (sval.
IsNull() && arg->GetDefault())
737 sval = arg->GetDefault();
741 TString::Format(
" Argument:%s Type:%s Value:%s \n", arg->GetName(), arg->GetFullTypeName(), sval.
Data())
744 if (call_args.
Length() > 0)
748 std::string tname = arg->GetTypeNormalizedName();
749 if (tname ==
"const char*")
752 else if (tname ==
"bool")
754 else if (tname ==
"double")
756 else if (tname ==
"float")
758 else if (tname ==
"int")
760 else if (tname ==
"long")
762 else if (tname ==
"short")
764 else if (tname ==
"char")
766 else if (tname ==
"unsigned int")
768 else if (tname ==
"unisgned long")
770 else if (tname ==
"unsigned short")
772 else if (tname ==
"unsigned char")
774 else if (!tname.empty() && tname.back() ==
'*' && (sval ==
"0" || sval ==
"null" || sval ==
"nullptr"))
780 Bool_t isstr = (strcmp(arg->GetFullTypeName(),
"const char*") == 0) ||
781 (strcmp(arg->GetFullTypeName(),
"Option_t*") == 0) ||
782 (strcmp(arg->GetFullTypeName(),
"string") == 0);
792 if (sval[sval.
Length() - 1] !=
'"')
798 if (sanitize_numeric) {
801 if (std::isalnum(sval[i]) || std::strchr(
".:+-", sval[i]))
802 sanitized.
Append(sval[i]);
815 if (method !=
nullptr) {
822 call = iter->second.get();
826 fExeCache.emplace(method, std::unique_ptr<TMethodCall>(call));
833 debug->append(
TString::Format(
"Calling obj->%s(%s);\n", method_name, call_args.
Data()).Data());
843 debug->append(
"Fail: invalid TMethodCall\n");
844 return debug !=
nullptr;
852 void *ret_obj =
nullptr;
863 if ((ret_kind.length() > 0) && (ret_kind[ret_kind.length() - 1] ==
'*')) {
864 ret_kind.resize(ret_kind.length() - 1);
874 if (method && can_use_plain)
875 call->
Execute(obj_ptr, plain_args.data(), plain_args.size(), &
l);
883 res.
Form(
"%zd", (
size_t)
l);
888 if (method && can_use_plain)
889 call->
Execute(obj_ptr, plain_args.data(), plain_args.size(), &
d);
902 if (method && can_use_plain)
903 call->
Execute(obj_ptr, plain_args.data(), plain_args.size(), &txt);
908 if (txt !=
nullptr) {
912 res.
Form(
"\"%s\"", txt);
918 if (method && can_use_plain)
919 call->
Execute(obj_ptr, plain_args.data(), plain_args.size(), &
l);
929 if (method && can_use_plain)
930 call->
Execute(obj_ptr, plain_args.data(), plain_args.size());
940 if (_ret_object_ !=
nullptr) {
945 debug->append(
TString::Format(
"Return object %s found %s\n", _ret_object_, obj ?
"true" :
"false").Data());
947 if (obj ==
nullptr) {
955 if (ret_obj && ret_cl) {
967 if ((resbuf !=
nullptr) && (resbuf->
Length() > 0)) {
968 res_str.resize(resbuf->
Length());
969 std::copy((
const char *)resbuf->
Buffer(), (
const char *)resbuf->
Buffer() + resbuf->
Length(), res_str.begin());
976 res_str = res.
Data();
978 if (url.
HasOption(
"_destroy_result_") && ret_obj && ret_cl) {
981 debug->append(
"Destroy result object at the end\n");
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
bool Bool_t
Boolean (0=false, 1=true) (bool)
int Int_t
Signed integer 4 bytes (int)
float Size_t
Attribute size (float)
long Longptr_t
Integer large enough to hold a pointer (platform-dependent)
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
double Double_t
Double 8 bytes.
constexpr Ssiz_t kNPOS
The equivalent of std::string::npos for the ROOT class TString.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void w
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
virtual const void * GetPtr() const
TArgHolderConstChar(const char *v)
const void * GetPtr() const override
const void * GetPtr() const override
A TTree is a list of TBranches.
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket.
void WriteLong(Long_t l) override
void WriteString(const char *s) override
Write string to I/O buffer.
void WriteDouble(Double_t d) override
void MapObject(const TObject *obj, UInt_t offset=1) override
Add object to the fMap container.
static TObject * ConvertFromJSON(const char *str)
Read TObject-based class from JSON, produced by ConvertToJSON() method.
static TString ConvertToJSON(const TObject *obj, Int_t compact=0, const char *member_name=nullptr)
Converts object, inherited from TObject class, to JSON string Lower digit of compact parameter define...
static const char * GetFloatFormat()
return current printf format for float members, default "%e"
static TString ConvertToXML(const TObject *obj, Bool_t GenericLayout=kFALSE, Bool_t UseNamespaces=kFALSE)
Converts object, inherited from TObject class, to XML string GenericLayout defines layout choice for ...
static TObject * ConvertFromXML(const char *str, Bool_t GenericLayout=kFALSE, Bool_t UseNamespaces=kFALSE)
Read object from XML, produced by ConvertToXML() method.
void SetParent(TObject *parent)
Set parent owning this buffer.
TClass instances represent classes, structs and namespaces in the ROOT type system.
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
TMethod * GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
Int_t GetBaseClassOffset(const TClass *toBase, void *address=nullptr, bool isDerivedObject=true)
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
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.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
All ROOT classes may have RTTI (run time type identification) support added.
Int_t WriteObjectAny(const void *obj, const char *classname, const char *name, Option_t *option="", Int_t bufsize=0) override
Write object from pointer of class classname in this directory.
TDirectory::TContext keeps track and restore the current directory.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
void Close(Option_t *option="") override
Close a file.
Global functions class (global functions are obtained from CINT).
virtual const char * GetPrototype() const
Returns the prototype of a function as defined by CINT, or 0 in case of error.
TList * GetListOfMethodArgs()
Return list containing the TMethodArgs of a TFunction.
std::string GetReturnTypeNormalizedName() const
Get the normalized name of the return type.
A TGraph is an object made of two arrays X and Y with npoints each.
1-D histogram with a float per channel (see TH1 documentation)
An abstract interface to image processing library.
virtual void FromPad(TVirtualPad *, Int_t=0, Int_t=0, UInt_t=0, UInt_t=0)
static TImage * Create()
Create an image.
virtual void Append(const TImage *, const char *="+", const char *="#00000000")
virtual void GetImageBuffer(char **, int *, EImageFileTypes=TImage::kPng)
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual const char * GetClassName() const
virtual TObject * ReadObj()
To read a TObject* from the file.
void Add(TObject *obj) override
void Delete(Option_t *option="") override
Remove all objects from the list AND delete all heap based objects.
A TMemFile is like a normal TFile except that it reads and writes only from memory.
Long64_t GetSize() const override
Return the current size of the memory file.
virtual Long64_t CopyTo(void *to, Long64_t maxsize) const
Copy the binary representation of the TMemFile into the memory area starting at 'to' and of length at...
Each ROOT method (see TMethod) has a linked list of its arguments.
Method or function calling interface.
EReturnType ReturnType()
Returns the return type of the method.
static const EReturnType kLong
static const EReturnType kString
static const EReturnType kOther
static const EReturnType kNone
void Execute(const char *, const char *, int *=nullptr) override
Execute method on this object with the given parameter string, e.g.
Bool_t IsValid() const
Return true if the method call has been properly initialized and is usable.
void InitWithPrototype(TClass *cl, const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Initialize the method invocation environment.
static const EReturnType kDouble
Each ROOT class (see TClass) has a linked list of methods.
virtual TList * GetListOfMethodArgs()
Returns methodarg list and additionally updates fDataMember in TMethod by calling FindDataMember();.
const char * GetName() const override
Returns name of object.
virtual const char * GetName() const
Returns name of object.
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual TClass * IsA() const
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
TObject()
TObject constructor.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
The most important graphics class in the ROOT system.
void * FindInHierarchy(const char *path, TClass **cl=nullptr, TDataMember **member=nullptr, Int_t *chld=nullptr) override
Search element with specified path.
Bool_t IsStreamerInfoItem(const char *itemname) override
Return true if it is streamer info item name.
static Bool_t IsDrawableClass(TClass *cl)
return true if given class can be drawn in JSROOT
Bool_t ProduceExe(const std::string &path, const std::string &options, Int_t reskind, std::string &res) override
Execute command for specified object.
TList * fSinfo
! last produced streamer info
TRootSnifferFull(const char *name="sniff", const char *objpath="Objects")
constructor
Bool_t CanDrawClass(TClass *cl) override
void ScanObjectProperties(TRootSnifferScanRec &rec, TObject *obj) override
Scans object properties.
virtual ~TRootSnifferFull()
destructor
void ScanObjectChilds(TRootSnifferScanRec &rec, TObject *obj) override
Scans object childs (if any)
std::map< const TMethod *, std::unique_ptr< TMethodCall > > fExeCache
! cache for exe.json invocation
Bool_t ProduceRootFile(const std::string &path, const std::string &options, std::string &res) override
Produce ROOT file for specified item.
ULong_t GetItemHash(const char *itemname) override
Get hash function for specified item.
Bool_t ProduceImage(Int_t kind, const std::string &path, const std::string &options, std::string &res) override
Method to produce image from specified object.
Bool_t CallProduceImage(const std::string &kind, const std::string &path, const std::string &options, std::string &res) override
Invokes TRootSniffer::ProduceIamge, converting kind into TImage::EImageFileTypes type.
Bool_t ProduceXml(const std::string &path, const std::string &options, std::string &res) override
Produce XML data for specified item.
void CreateMemFile()
Creates TMemFile instance, which used for objects streaming.
Bool_t ProduceBinary(const std::string &path, const std::string &options, std::string &res) override
Produce binary data for specified item.
TMemFile * fMemFile
! file used to manage streamer infos
ULong_t GetStreamerInfoHash() override
Returns hash value for streamer infos.
void ScanKeyProperties(TRootSnifferScanRec &rec, TKey *key, TObject *&obj, TClass *&obj_class) override
Scans TKey properties.
Structure used to scan hierarchies of ROOT objects.
Bool_t CanExpandItem()
Returns true when item can be expanded.
void SetField(const char *name, const char *value, Bool_t with_quotes=kTRUE)
Set item field only when creating is specified.
Bool_t IsReadOnly(Bool_t dflt=kTRUE)
Returns read-only flag for current item.
TRootSniffer(const char *name="sniff", const char *objpath="Objects")
constructor
virtual void ScanObjectChilds(TRootSnifferScanRec &rec, TObject *obj)
scans object childs (if any) here one scans collection, branches, trees and so on
TString DecodeUrlOptionValue(const char *value, Bool_t remove_quotes=kTRUE, Bool_t escape_special=kTRUE)
Method replaces all kind of special symbols, which could appear in URL options.
TString fCurrentAllowedMethods
! list of allowed methods, extracted when analyzed object restrictions
virtual void ScanKeyProperties(TRootSnifferScanRec &rec, TKey *key, TObject *&obj, TClass *&obj_class)
Scans TKey properties in special cases load objects from the file.
Bool_t fAllowPostObject
! when true allow to deserialize objects received via POST requests
virtual void ScanObjectProperties(TRootSnifferScanRec &rec, TObject *obj)
Scans object properties here such fields as _autoload or _icon properties depending on class or objec...
virtual ULong_t GetItemHash(const char *itemname)
Get hash function for specified item used to detect any changes in the specified object.
Bool_t fReadOnly
! indicate if sniffer allowed to change ROOT structures - like read objects from file
THttpCallArg * fCurrentArg
! current http arguments (if any)
virtual void * FindInHierarchy(const char *path, TClass **cl=nullptr, TDataMember **member=nullptr, Int_t *chld=nullptr)
Search element with specified path Returns pointer on element Optionally one could obtain element cla...
Int_t fCurrentRestrict
! current restriction for last-found object
void ScanCollection(TRootSnifferScanRec &rec, TCollection *lst, const char *foldername=nullptr, TCollection *keys_lst=nullptr)
Scan collection content.
const char * Data() const
TString & Prepend(const char *cs)
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.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
A TTree represents a columnar dataset.
This class represents a WWW compatible URL.
const char * GetValueFromOptions(const char *key) const
Return a value for a given key from the URL options.
Int_t GetIntValueFromOptions(const char *key) const
Return a value for a given key from the URL options as an Int_t, a missing key returns -1.
void SetOptions(const char *opt)
void ParseOptions() const
Parse URL options into a key/value map.
Bool_t HasOption(const char *key) const
Returns true if the given key appears in the URL options list.
small helper class to store/restore gPad context in TPad methods
@ kUseCompiledDefault
Use the compile-time default setting.