27   static Bool_t IsIrrelevantCharacter(
char c)
 
   29      return (
c == 
' ' || 
c == 
'\n' || 
c == 
'\t');
 
   32   static void AdvanceOverIrrelevantCharacter(
const char*& str)
 
   34      while (IsIrrelevantCharacter(*str)) {
 
   46         const char null = 
'\0';
 
   47         const char* left = lhs.
Data();
 
   48         const char* right = rhs.
Data();
 
   51         AdvanceOverIrrelevantCharacter(left);
 
   52         AdvanceOverIrrelevantCharacter(right);
 
   54         while (*left != null || *right  != null) {
 
   56            if (!literal && IsIrrelevantCharacter(*left) && IsIrrelevantCharacter(*right)) {
 
   57               AdvanceOverIrrelevantCharacter(left);
 
   58               AdvanceOverIrrelevantCharacter(right);
 
   62            if (*left == null || *right == null) {
 
   63               AdvanceOverIrrelevantCharacter(left);
 
   64               AdvanceOverIrrelevantCharacter(right);
 
   69            if (*left != *right) {
 
   90                            fTargetVect( nullptr ), fSourceVect( nullptr ),
 
   91                            fIncludeVect( nullptr ), fEmbed( 
kTRUE ),
 
   92                            fReadFuncPtr( nullptr ), fReadRawFuncPtr( nullptr ),
 
  113                            fVersionVect( nullptr ), fChecksumVect( nullptr ),
 
  114                            fTargetVect( nullptr ), fSourceVect( nullptr ),
 
  115                            fIncludeVect( nullptr ), fEmbed( 
kTRUE ),
 
  116                            fReadFuncPtr( nullptr ), fReadRawFuncPtr( nullptr ),
 
  180   std::cout << 
"Schema Evolution Rule: ";
 
  189   if (targetname && targetname[0]) std::cout << 
"targetClass=\"" << targetname << 
"\" ";
 
  190   else std::cout << 
"targetClass\"" << 
fTargetClass << 
"\" ";
 
  193   std::cout << 
"source=\"" << 
fSource << 
"\" ";
 
  194   std::cout << 
"target=\"" << 
fTarget << 
"\" ";
 
  198      std::cout << 
"include=\"" << 
fInclude << 
"\" " << 
"\n";
 
  202      std::cout << 
"attributes=\"" << 
fAttributes << 
"\"" << 
"\n";
 
  206      std::cout << 
"code=\"{" << 
fCode << 
"}\" " 
  236      else { out += 
"-- "; end = 
"-->"; }
 
  255   if (!shortform || (
fVersion != 
"[1-]")) {
 
  260      out += 
"source=\""      + 
fSource + 
"\" ";
 
  261      out += 
"target=\""      + 
fTarget + 
"\" ";
 
  270         out += 
"\n<![CDATA[ { " + 
fCode + 
" ]]>\n ";
 
  280         out += 
"code=\"{" + 
fCode + 
"}\" ";
 
  329   std::string error_string;
 
  331      Error(
"SetFromRule",
"The rule (%s) is invalid: %s",rule,error_string.c_str());
 
  334   ROOT::Internal::MembersMap_t::const_iterator it1;
 
  336   it1 = rule_values.find( 
"type" );
 
  337   if( it1 != rule_values.end() ) {
 
  338      if (it1->second == 
"read" || it1->second == 
"Read") {
 
  340      } 
else if (it1->second == 
"readraw" || it1->second == 
"ReadRaw") {
 
  349   it1 = rule_values.find( 
"targetClass" );
 
  351   it1 = rule_values.find( 
"sourceClass" );
 
  353   it1 = rule_values.find( 
"target" );
 
  354   if( it1 != rule_values.end() ) 
SetTarget( it1->second );
 
  355   it1 = rule_values.find( 
"source" );
 
  356   if( it1 != rule_values.end() ) 
SetSource( it1->second );
 
  357   it1 = rule_values.find( 
"version" );
 
  358   if( it1 != rule_values.end() ) 
SetVersion( it1->second );
 
  359   it1 = rule_values.find( 
"checksum" );
 
  360   if( it1 != rule_values.end() ) 
SetChecksum( it1->second );
 
  361   it1 = rule_values.find( 
"embed" );
 
  362   if( it1 != rule_values.end() ) 
SetEmbed( it1->second == 
"false" ? 
false : true );
 
  363   it1 = rule_values.find( 
"include" );
 
  364   if( it1 != rule_values.end() ) 
SetInclude( it1->second );
 
  365   it1 = rule_values.find( 
"attributes" );
 
  367   it1 = rule_values.find( 
"code" );
 
  368   if( it1 != rule_values.end() ) 
SetCode( it1->second );
 
  416         if( version >= it.first && version <= it.second )
 
  458   std::string normalizedName;
 
  476   std::string normalizedName;
 
  679   while( (obj = it.
Next()) ) {
 
  697   while( (obj = it.
Next()) ) {
 
  793   while( (obj = titer.
Next() ) ) {
 
  796         haveCommonTargets = 
kTRUE;
 
  799   if( !haveCommonTargets )
 
  807      std::vector<UInt_t>::iterator it;
 
  819      std::vector<std::pair<Int_t, Int_t> >::iterator it1;
 
  820      std::vector<std::pair<Int_t, Int_t> >::iterator it2;
 
  828            if( it1->first >= it2->first && it1->first <= it2->second )
 
  831            if( it1->first < it2->first && it1->second >= it2->first )
 
  848   if( version[0] != 
'[' || version[version.
Length()-1] != 
']' )
 
  850   std::string ver = version.
Data();
 
  852   std::list<std::string> versions;
 
  855   if( versions.empty() )
 
  863      fVersionVect = 
new std::vector<std::pair<Int_t, Int_t> >;
 
  870   std::list<std::string>::iterator it;
 
  871   for( it = versions.begin(); it != versions.end(); ++it ) {
 
  872      std::pair<Int_t, Int_t> verpair;
 
  895   std::string chk = (
const char*)checksum;
 
  896   if( chk[0] != 
'[' || chk[chk.size()-1] != 
']' )
 
  899   std::list<std::string> checksums;
 
  902   if( checksums.empty() ) {
 
  916   for( 
const auto& checksumStr : checksums ) {
 
  934  std::istringstream converter(checksum);
 
  936  converter >> std::hex >> chksum;
 
  937  if (converter.fail()) {
 
  940    converter >> std::dec >> chksum;
 
  943  if( converter.fail() ) {
 
  955   std::list<std::string>           elems;
 
  956   std::list<std::string>::iterator it;
 
  964   for( it = elems.begin(); it != elems.end(); ++it ) {
 
  976   std::list<std::pair<ROOT::Internal::TSchemaType,std::string> >           elems;
 
  977   std::list<std::pair<ROOT::Internal::TSchemaType,std::string> >::iterator it;
 
  985   for( it = elems.begin(); it != elems.end(); ++it ) {
 
  986      TSources *
type = 
new TSources( it->second.c_str(), it->first.fType.c_str(), it->first.fDimensions.c_str() ) ;
 
 1002   funcname += 
"_" + 
name;
 
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 filename
 
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 target
 
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 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
 
static void SplitDeclaration(const std::string &source, std::list< std::pair< ROOT::Internal::TSchemaType, std::string > > &result)
 
static bool ProcessVersion(const std::string &source, std::pair< Int_t, Int_t > &result)
 
static void SplitList(const std::string &source, std::list< std::string > &result, char delimiter=',')
 
void SetRuleType(RuleType_t type)
Set the type of the rule.
 
void SetCode(const TString &code)
Set the source code of this rule.
 
TString fCode
Includes vector.
 
void SetTarget(const TString &target)
Set the target member of this rule (i.e. the in memory data member).
 
ReadFuncPtr_t fReadFuncPtr
 
void SetReadRawFunctionPointer(ReadRawFuncPtr_t ptr)
Set the pointer to the function to be run for the rule (if it is a raw read rule).
 
void SetInclude(const TString &include)
Set the comma separated list of header files to include to be able to compile this rule.
 
void AsString(TString &out, const char *options="") const
Add to the string 'out' the string representation of the rule.
 
const TObjArray * GetSource() const
Get the list of source members as a TObjArray of TNamed object, with the name being the member name a...
 
void SetReadFunctionPointer(ReadFuncPtr_t ptr)
Set the pointer to the function to be run for the rule (if it is a read rule).
 
void ls(Option_t *option="") const override
The ls function lists the contents of a class on stdout.
 
std::vector< UInt_t > * fChecksumVect
 
UInt_t ParseChecksum(const char *checksum) const
Parse the checksum in the given string.
 
static void ProcessList(TObjArray *array, const TString &list)
Split the list as a comma separated list into a TObjArray of TObjString.
 
Bool_t operator==(const TSchemaRule &rhs) const
Return true if the rule have the same effects.
 
Bool_t SetFromRule(const char *rule)
Set the content fot this object from the rule See TClass::AddRule for details on the syntax.
 
void Clear(Option_t *="") override
Zero out this rule object.
 
Bool_t TestVersion(Int_t version) const
Check if given version number is defined in this rule.
 
TString fSource
Target data member vector (for searching purposes)
 
Bool_t HasSource(const TString &source) const
Return true if one of the rule's data member source is 'source'.
 
ReadRawFuncPtr_t GetReadRawFunctionPointer() const
Get the pointer to the function to be run for the rule (if it is a raw read rule).
 
const TObjArray * GetTarget() const
Get the target data members of this rule (i.e. the in memory data member).
 
Bool_t ProcessChecksum(const TString &checksum) const
Check if specified checksum string is correct and build checksum vector.
 
void(* ReadFuncPtr_t)(char *, TVirtualObject *)
 
void SetEmbed(Bool_t embed)
Set whether this rule should be save in the ROOT file (if true)
 
RuleType_t GetRuleType() const
Return the type of the rule.
 
Bool_t Conflicts(const TSchemaRule *rule) const
Check if this rule conflicts with the given one.
 
TSchemaRule & operator=(const TSchemaRule &rhs)
Copy operator.
 
void SetTargetClass(const TString &classname)
Set the target class of this rule (i.e. the in memory class).
 
void(* ReadRawFuncPtr_t)(char *, TBuffer &)
 
const char * GetSourceClass() const
Get the source class of this rule (i.e. the onfile class).
 
virtual ~TSchemaRule()
Destructor.
 
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.
 
TString fInclude
Source data member vector (for searching purposes)
 
TString fChecksum
Source version vector (for searching purposes)
 
void SetSource(const TString &source)
Set the list of source members.
 
Bool_t IsRenameRule() const
Return kTRUE if the rule is a strict renaming of the class to a new name.
 
void SetAttributes(const TString &attributes)
Set the attributes code of this rule.
 
TString fSourceClass
Source checksum vector (for searching purposes)
 
Bool_t HasTarget(const TString &target) const
Return true if one of the rule's data member target is 'target'.
 
const char * GetTargetString() const
Get the target data members of this rule as a simple string (i.e. the in memory data member).
 
std::vector< std::pair< Int_t, Int_t > > * fVersionVect
 
ReadRawFuncPtr_t fReadRawFuncPtr
Conversion function pointer for read rule.
 
RuleType_t fRuleType
Conversion function pointer for readraw rule.
 
Bool_t IsValid() const
Return kTRUE if this rule is valid.
 
ReadFuncPtr_t GetReadFunctionPointer() const
Get the pointer to the function to be run for the rule (if it is a read rule).
 
const char * GetVersion() const
Get the version string.
 
const char * GetAttributes() const
Get the attributes code of this rule.
 
Bool_t GetEmbed() const
Return true if this rule should be saved in the ROOT File.
 
const char * GetCode() const
Get the source code of this rule.
 
void SetSourceClass(const TString &classname)
Set the source class of this rule (i.e. the onfile class).
 
TSchemaRule()
Default Constructor.
 
Bool_t SetChecksum(const TString &checksum)
Set the checksum string - returns kFALSE if the format is incorrect.
 
const TObjArray * GetInclude() const
Return the list of header files to include to be able to compile this rule as a TObjArray of TObjStri...
 
Bool_t IsAliasRule() const
Return kTRUE if the rule is a strict renaming of one of the data member of the class.
 
const char * GetTargetClass() const
Get the targte class of this rule (i.e. the in memory class).
 
static void ProcessDeclaration(TObjArray *array, const TString &list)
Split the list as a declaration into as a TObjArray of TNamed(name,type).
 
Bool_t ProcessVersion(const TString &version) const
Check if specified version string is correct and build version vector.
 
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
 
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.
 
void Clear(Option_t *option="") override
Remove all objects from the array.
 
void Add(TObject *obj) override
 
Collectable string class.
 
const TString & GetString() const
 
Mother of all ROOT objects.
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
 
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().
 
Describes a persistent version of a class.
 
Int_t GetClassVersion() const override
 
void ToLower()
Change string to lower-case.
 
void Clear()
Clear string without changing its capacity.
 
const char * Data() const
 
TString & ReplaceAll(const TString &s1, const TString &s2)
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
std::map< std::string, std::string > MembersMap_t
 
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
 
void WriteReadRuleFunc(SchemaRuleMap_t &rule, int index, std::string &mappedName, MembersTypeMap_t &members, std::ostream &output)
Write the conversion function for Read rule, the function name is being written to rule["funcname"].
 
void WriteReadRawRuleFunc(SchemaRuleMap_t &rule, int index, std::string &mappedName, MembersTypeMap_t &members, std::ostream &output)
Write the conversion function for ReadRaw rule, the function name is being written to rule["funcname"...
 
bool ParseRule(std::string rule, ROOT::Internal::MembersMap_t &result, std::string &error_string)
Parse the schema rule as specified in the LinkDef file.
 
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.