53 std::cout <<
"TSchemaRuleSet for " <<
fClassName <<
":\n";
57 while ((
object = next())) {
118 while( (obj = titer.
Next()) ) {
126 found =
fClass->GetDataMember(str->GetString()) ||
fClass->GetBaseClass(str->GetString());
133 errmsg->
Form(
"the target member (%s) is unknown",str->GetString().Data());
153 for(
auto r : rules) {
160 *errmsg =
"it conflicts with one of the other rules";
166 *errmsg =
"The existing rule is:\n ";
167 r->AsString(*errmsg,
"s");
168 *errmsg +=
"\nand the ignored rule is:\n ";
209 while( (obj = it.
Next()) ) {
215 if (
fClass->GetCollectionProxy()) {
216 if (
fClass->GetCollectionProxy()->GetValueClass() ==
nullptr) {
228 TClass *vTargetClass =
fClass->GetCollectionProxy()->GetValueClass();
246 Error(
"HasRuleWithSourceClass",
"Can not find the TClass for %s when matching with %s\n",source.
Data(),
fClass->GetName());
252 Error(
"HasRuleWithSourceClass",
"Can not find the StreamerInfo for %s when matching with %s\n",source.
Data(),
fClass->GetName());
256 Error(
"HasRuleWithSourceClass",
"Can not find the StreamerInfo for target class %s\n",
fClass->GetName());
259 for(
int i = 0 ; i<2 ; ++i) {
273 }
else if (targetElement->
GetClass()) {
302 while( (obj = it.
Next()) ) {
305 arr.push_back( rule );
310 if (
fClass->GetCollectionProxy()) {
311 if (
fClass->GetCollectionProxy()->GetValueClass() == 0
341 while( (obj = it.
Next()) ) {
344 arr.push_back( rule );
361 while( (obj = it.
Next()) ) {
364 arr.push_back( rule );
381 while( (obj = it.
Next()) ) {
384 arr.push_back( rule );
453 while( (obj = it.
Next()) ) {
476 for(
auto rule : *
this ) {
477 if( rule->HasSource(
name ) )
return rule;
487 for(
auto rule : *
this ) {
488 if( rule->HasTarget(
name ) )
return rule;
501 for(
auto rule : *
this ) {
502 if( rule->HasSource(
name ) ) {
504 const TObjArray *targets = rule->GetTarget();
513 if (rule->GetReadFunctionPointer() || rule->GetReadRawFunctionPointer()) {
531 for(
auto rule : *
this) {
532 if( rule->HasTarget(
name ) ) {
534 const TObjArray *targets = rule->GetTarget();
538 const TObjArray *sources = rule->GetSource();
547 if (rule->GetReadFunctionPointer() || rule->GetReadRawFunctionPointer()) {
int Int_t
Signed integer 4 bytes (int).
bool Bool_t
Boolean (0=false, 1=true) (bool).
const char Option_t
Option string (const char).
const TSchemaRule * GetRuleWithSource(const TString &name) const
Return the rule that has 'name' as a source.
Bool_t HasRuleWithSource(const TString &name, Bool_t needingAlloc) const
Return true if the set of rules has at least one rule that has the data member named 'name' as a sour...
Bool_t HasRuleWithTarget(const TString &name, Bool_t willset) const
Return true if the set of rules has at least one rule that has the data member named 'name' as a targ...
const TSchemaRule * GetRuleWithTarget(const TString &name) const
Return the rule that has 'name' as a target.
void Streamer(TBuffer &) override
Stream an object of class ROOT::TSchemaRuleSet.
TObjArray * fRemainingRules
! Array of non-persistent rules - just for cleanup purposes - owns the elements
TClassRef fClass
! Target class pointer (for consistency checking)
void RemoveRule(TSchemaRule *rule)
Remove given rule from the set - the rule is not being deleted!
const TMatches FindRules(const TString &source) const
Return all the rules that are about the given 'source' class.
const TObjArray * GetPersistentRules() const
Bool_t AddRule(TSchemaRule *rule, EConsistencyCheck checkConsistency=kCheckAll, TString *errmsg=nullptr)
The consistency check always fails if the TClass object was not set!
void AsString(TString &out) const
Fill the string 'out' with the string representation of the rule.
UInt_t GetClassCheckSum() const
Bool_t AddRules(TSchemaRuleSet *rules, EConsistencyCheck checkConsistency=kCheckAll, TString *errmsg=nullptr)
void ls(Option_t *option="") const override
The ls function lists the contents of a class on stdout.
Int_t GetClassVersion() const
TString GetClassName() const
TObjArray * fAllRules
! Array of all rules
void SetClass(TClass *cls)
Set the TClass associated with this rule set.
void RemoveRules(TObjArray *rules)
remove given array of rules from the set - the rules are not being deleted!
TObjArray * fPersistentRules
const TObjArray * GetRules() const
Bool_t HasRuleWithSourceClass(const TString &source) const
Return True if we have any rule whose source class is 'source'.
virtual ~TSchemaRuleSet()
Destructor.
TSchemaRuleSet()
Default constructor.
void AsString(TString &out, const char *options="") const
Add to the string 'out' the string representation of the rule.
Bool_t TestVersion(Int_t version) const
Check if given version number is defined in this rule.
const TObjArray * GetTarget() const
Get the target data members of this rule (i.e. the in memory data member).
Bool_t Conflicts(const TSchemaRule *rule) const
Check if this rule conflicts with the given one.
void SetTargetClass(const TString &classname)
Set the target class of this rule (i.e. the in memory class).
const char * GetSourceClass() const
Get the source class of this rule (i.e. the onfile class).
Bool_t TestChecksum(UInt_t checksum) const
Check if given checksum is defined in this rule.
Bool_t SetVersion(const TString &version)
Set the version string - returns kFALSE if the format is incorrect.
Bool_t IsValid() const
Return kTRUE if this rule is valid.
Bool_t GetEmbed() const
Return true if this rule should be saved in the ROOT File.
void SetSourceClass(const TString &classname)
Set the source class of this rule (i.e. the onfile class).
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TClass instances represent classes, structs and namespaces in the ROOT type system.
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
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).
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.
const char * GetName() const override
Returns name of object.
Iterator of object array.
TObject * Next() override
Return next object in array. Returns 0 when no more objects in array.
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
TObject * UncheckedAt(Int_t i) const
Bool_t IsEmpty() const override
TObject * FindObject(const char *name) const override
Find an object in this collection using its name.
Collectable string class.
virtual const char * GetName() const
Returns name of object.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
TObject()
TObject constructor.
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().
Describe one element (data member) to be Streamed.
TClass * GetClass() const
const char * Data() const
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Defines a common interface to inspect/change the contents of an object that represents a collection.
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 Bool_t HasPointers() const =0
Return true if the content is of type 'pointer to'.
Abstract Interface class describing Streamer information for one class.
virtual TObjArray * GetElements() const =0
Special implementation of ROOT::RRangeCast for TCollection, including a check that the cast target ty...
bool IsStdPair(std::string_view name)