diff --git a/README/ReleaseNotes/v642/index.md b/README/ReleaseNotes/v642/index.md index f54e8f6cc0bc8..cd290593ce63b 100644 --- a/README/ReleaseNotes/v642/index.md +++ b/README/ReleaseNotes/v642/index.md @@ -46,6 +46,7 @@ The following people have contributed to this new version: * The ROOT **auth** package together with `TVirtualAuth` and `TROOT::GetListOfSecContexts()`, and the **authenticated sockets** (`TSocket::CreateAuthSocket()`) feature are now removed following deprecation in ROOT 6.40. * The `TSSLSocket` class is now removed following deprecation in ROOT 6.40. * The bindings to the R programming language that are enabled with the `r=ON` or `tmva-rmva=ON` build options (`TRInterface`, RMVA, and friends) are removed, following deprecation in ROOT 6.40. Their maintenance is no longer justified, given the broader adoption of the scientific Python ecosystem. Users who still rely on R from C++ are encouraged to call R directly via https://cran.r-project.org/package=RInside, which is what the ROOT bindings were using internally. +* Several enums that are redundant with `ROOT::ESTLType` are deprecated and will be removed in ROOT 6.44: `TClassEdit::ESTLType`, `TDictionary::ESTLType`, `TStreamerElement::ESTLType`. Please use `ROOT::ESTLType` instead. ## Python Interface @@ -83,4 +84,4 @@ If the vectorized backend does not work for a given use case, **please report it The version of the following packages has been updated: - - xrootd: 5.9.5 \ No newline at end of file + - xrootd: 5.9.5 diff --git a/bindings/pyroot/cppyy/cppyy-backend/clingwrapper/src/clingwrapper.cxx b/bindings/pyroot/cppyy/cppyy-backend/clingwrapper/src/clingwrapper.cxx index 26086a1a32b09..86954bba721cd 100644 --- a/bindings/pyroot/cppyy/cppyy-backend/clingwrapper/src/clingwrapper.cxx +++ b/bindings/pyroot/cppyy/cppyy-backend/clingwrapper/src/clingwrapper.cxx @@ -622,11 +622,17 @@ std::string Cppyy::ResolveEnum(const std::string& enum_type) std::ostringstream decl; // TODO: now presumed fixed with https://sft.its.cern.ch/jira/browse/ROOT-6988 for (auto& itype : {"unsigned int"}) { - decl << "std::is_same<" + // This is pure type introspection: silence any deprecation warning that + // would otherwise be emitted just because the enum being resolved (or its + // scope) happens to be marked deprecated. + decl << "_Pragma(\"clang diagnostic push\")" + "_Pragma(\"clang diagnostic ignored \\\"-Wdeprecated-declarations\\\"\")" + << "std::is_same<" << itype << ", std::underlying_type<" << et_short - << ">::type>::value;"; + << ">::type>::value;" + "_Pragma(\"clang diagnostic pop\")"; if (gInterpreter->ProcessLine(decl.str().c_str())) { // TODO: "re-sugaring" like this is brittle, but the top // should be re-translated into AST-based code anyway diff --git a/core/foundation/inc/TClassEdit.h b/core/foundation/inc/TClassEdit.h index ee69d729cf7fa..b407dd37e7134 100644 --- a/core/foundation/inc/TClassEdit.h +++ b/core/foundation/inc/TClassEdit.h @@ -91,22 +91,22 @@ namespace TClassEdit { kDropHash = 1<<13 /* Drop the hash if applies to the collection */ }; - enum ESTLType { - kNotSTL = ROOT::kNotSTL, - kVector = ROOT::kSTLvector, - kList = ROOT::kSTLlist, - kForwardlist = ROOT::kSTLforwardlist, - kDeque = ROOT::kSTLdeque, - kMap = ROOT::kSTLmap, - kMultiMap = ROOT::kSTLmultimap, - kSet = ROOT::kSTLset, - kMultiSet = ROOT::kSTLmultiset, - kUnorderedSet = ROOT::kSTLunorderedset, - kUnorderedMultiSet = ROOT::kSTLunorderedmultiset, - kUnorderedMap = ROOT::kSTLunorderedmap, - kUnorderedMultiMap = ROOT::kSTLunorderedmultimap, - kBitSet = ROOT::kSTLbitset, - kEnd = ROOT::kSTLend + enum R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") ESTLType { + kNotSTL R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kNotSTL, + kVector R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLvector, + kList R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLlist, + kForwardlist R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLforwardlist, + kDeque R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLdeque, + kMap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmap, + kMultiMap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmultimap, + kSet R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLset, + kMultiSet R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmultiset, + kUnorderedSet R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedset, + kUnorderedMultiSet R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmultiset, + kUnorderedMap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmap, + kUnorderedMultiMap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmultimap, + kBitSet R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLbitset, + kEnd R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLend }; enum class EComplexType : short { diff --git a/core/meta/inc/TDictionary.h b/core/meta/inc/TDictionary.h index 1d2d651817ba2..a63db53a4caa8 100644 --- a/core/meta/inc/TDictionary.h +++ b/core/meta/inc/TDictionary.h @@ -195,21 +195,21 @@ class TDictionary : public TNamed { static TDictionary* GetDictionary(const std::type_info &typeinfo); // Type of STL container (returned by IsSTLContainer). - enum ESTLType { - kNone = ROOT::kNotSTL, - kVector = ROOT::kSTLvector, - kList = ROOT::kSTLlist, - kForwardlist = ROOT::kSTLforwardlist, - kDeque = ROOT::kSTLdeque, - kMap = ROOT::kSTLmap, - kMultimap = ROOT::kSTLmultimap, - kSet = ROOT::kSTLset, - kMultiset = ROOT::kSTLmultiset, - kUnorderedSet = ROOT::kSTLunorderedset, - kUnorderedMultiset = ROOT::kSTLunorderedmultiset, - kUnorderedMap = ROOT::kSTLunorderedmap, - kUnorderedMultimap = ROOT::kSTLunorderedmultimap, - kBitset = ROOT::kSTLbitset + enum R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") ESTLType { + kNone R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kNotSTL, + kVector R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLvector, + kList R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLlist, + kForwardlist R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLforwardlist, + kDeque R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLdeque, + kMap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmap, + kMultimap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmultimap, + kSet R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLset, + kMultiset R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmultiset, + kUnorderedSet R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedset, + kUnorderedMultiset R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmultiset, + kUnorderedMap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmap, + kUnorderedMultimap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmultimap, + kBitset R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLbitset }; /// Kinds of members to include in lists. diff --git a/core/meta/inc/TStreamerElement.h b/core/meta/inc/TStreamerElement.h index 840ab8842b279..2ec647963f318 100644 --- a/core/meta/inc/TStreamerElement.h +++ b/core/meta/inc/TStreamerElement.h @@ -49,22 +49,22 @@ class TStreamerElement : public TNamed { public: - enum ESTLtype { - kSTL = ROOT::kSTLany, - kSTLstring = ROOT::kSTLstring, - kSTLvector = ROOT::kSTLvector, - kSTLlist = ROOT::kSTLlist, - kSTLforwardlist = ROOT::kSTLforwardlist, - kSTLdeque = ROOT::kSTLdeque, - kSTLmap = ROOT::kSTLmap, - kSTLmultimap = ROOT::kSTLmultimap, - kSTLset = ROOT::kSTLset, - kSTLmultiset = ROOT::kSTLmultiset, - kSTLunorderedset = ROOT::kSTLunorderedset, - kSTLunorderedmultiset = ROOT::kSTLunorderedmultiset, - kSTLunorderedmap = ROOT::kSTLunorderedmap, - kSTLunorderedmultimap = ROOT::kSTLunorderedmultimap, - kSTLbitset = ROOT::kSTLbitset + enum R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") ESTLtype { + kSTL R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLany, + kSTLstring R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLstring, + kSTLvector R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLvector, + kSTLlist R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLlist, + kSTLforwardlist R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLforwardlist, + kSTLdeque R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLdeque, + kSTLmap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmap, + kSTLmultimap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmultimap, + kSTLset R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLset, + kSTLmultiset R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLmultiset, + kSTLunorderedset R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedset, + kSTLunorderedmultiset R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmultiset, + kSTLunorderedmap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmap, + kSTLunorderedmultimap R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLunorderedmultimap, + kSTLbitset R__DEPRECATED(6, 44, "Please use ROOT::ESTLType instead.") = ROOT::kSTLbitset }; // TStreamerElement status bits enum EStatusBits { diff --git a/io/io/src/TBufferJSON.cxx b/io/io/src/TBufferJSON.cxx index 33f2550360063..b9f5c3299018f 100644 --- a/io/io/src/TBufferJSON.cxx +++ b/io/io/src/TBufferJSON.cxx @@ -110,6 +110,7 @@ class Container { #include "Compression.h" +#include "ESTLType.h" #include "TArrayI.h" #include "TError.h" #include "TBase64.h" @@ -1278,19 +1279,19 @@ void TBufferJSON::JsonStartElement(const TStreamerElement *elem, const TClass *b elem_name = "fLineStyles"; } break; - case TClassEdit::kVector: elem_name = "fVector"; break; - case TClassEdit::kList: elem_name = "fList"; break; - case TClassEdit::kForwardlist: elem_name = "fForwardlist"; break; - case TClassEdit::kDeque: elem_name = "fDeque"; break; - case TClassEdit::kMap: elem_name = "fMap"; break; - case TClassEdit::kMultiMap: elem_name = "fMultiMap"; break; - case TClassEdit::kSet: elem_name = "fSet"; break; - case TClassEdit::kMultiSet: elem_name = "fMultiSet"; break; - case TClassEdit::kUnorderedSet: elem_name = "fUnorderedSet"; break; - case TClassEdit::kUnorderedMultiSet: elem_name = "fUnorderedMultiSet"; break; - case TClassEdit::kUnorderedMap: elem_name = "fUnorderedMap"; break; - case TClassEdit::kUnorderedMultiMap: elem_name = "fUnorderedMultiMap"; break; - case TClassEdit::kBitSet: elem_name = "fBitSet"; break; + case ROOT::ESTLType::kSTLvector: elem_name = "fVector"; break; + case ROOT::ESTLType::kSTLlist: elem_name = "fList"; break; + case ROOT::ESTLType::kSTLforwardlist: elem_name = "fForwardlist"; break; + case ROOT::ESTLType::kSTLdeque: elem_name = "fDeque"; break; + case ROOT::ESTLType::kSTLmap: elem_name = "fMap"; break; + case ROOT::ESTLType::kSTLmultimap: elem_name = "fMultiMap"; break; + case ROOT::ESTLType::kSTLset: elem_name = "fSet"; break; + case ROOT::ESTLType::kSTLmultiset: elem_name = "fMultiSet"; break; + case ROOT::ESTLType::kSTLunorderedset: elem_name = "fUnorderedSet"; break; + case ROOT::ESTLType::kSTLunorderedmultiset: elem_name = "fUnorderedMultiSet"; break; + case ROOT::ESTLType::kSTLunorderedmap: elem_name = "fUnorderedMap"; break; + case ROOT::ESTLType::kSTLunorderedmultimap: elem_name = "fUnorderedMultiMap"; break; + case ROOT::ESTLType::kSTLbitset: elem_name = "fBitSet"; break; case json_TArray: elem_name = "fArray"; break; case json_TString: case json_stdstring: elem_name = "fString"; break; @@ -1400,8 +1401,9 @@ void TBufferJSON::JsonWriteObject(const void *obj, const TClass *cl, Bool_t chec } else if ((special_kind <= 0) || (special_kind > json_TArray)) { // FIXME: later post processing should be active for all special classes, while they all keep output in the value JsonDisablePostprocessing(); - } else if ((special_kind == TClassEdit::kMap) || (special_kind == TClassEdit::kMultiMap) || - (special_kind == TClassEdit::kUnorderedMap) || (special_kind == TClassEdit::kUnorderedMultiMap)) { + } else if ((special_kind == ROOT::ESTLType::kSTLmap) || (special_kind == ROOT::ESTLType::kSTLmultimap) || + (special_kind == ROOT::ESTLType::kSTLunorderedmap) || + (special_kind == ROOT::ESTLType::kSTLunorderedmultimap)) { if ((fMapAsObject && (fStack.size()==1)) || (stack && stack->fElem && strstr(stack->fElem->GetTitle(), "JSON_object"))) map_convert = 2; // mapped into normal object @@ -1455,7 +1457,8 @@ void TBufferJSON::JsonWriteObject(const void *obj, const TClass *cl, Bool_t chec } else { - bool base64 = ((special_kind == TClassEdit::kVector) && stack && stack->fElem && strstr(stack->fElem->GetTitle(), "JSON_base64")); + bool base64 = ((special_kind == ROOT::ESTLType::kSTLvector) && stack && stack->fElem && + strstr(stack->fElem->GetTitle(), "JSON_base64")); // for array, string and STL collections different handling - // they not recognized at the end as objects in JSON @@ -1915,8 +1918,8 @@ void *TBufferJSON::JsonReadObject(void *obj, const TClass *objClass, TClass **re } Int_t map_convert = 0; - if ((special_kind == TClassEdit::kMap) || (special_kind == TClassEdit::kMultiMap) || - (special_kind == TClassEdit::kUnorderedMap) || (special_kind == TClassEdit::kUnorderedMultiMap)) { + if ((special_kind == ROOT::ESTLType::kSTLmap) || (special_kind == ROOT::ESTLType::kSTLmultimap) || + (special_kind == ROOT::ESTLType::kSTLunorderedmap) || (special_kind == ROOT::ESTLType::kSTLunorderedmultimap)) { map_convert = json->is_object() ? 2 : 1; // check if map was written as array or as object if (objClass && !objClass->HasDictionary()) {