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.