11 #include "TInterpreter.h"
12 #include "THashTable.h"
14 #include "boost/algorithm/string.hpp"
15 #include "boost/thread/tss.hpp"
25 TClass *
cl = TClass::GetClass(type.
typeInfo(),
true);
30 if(!cl->HasDictionary()) {
31 missingTypes.insert(type);
39 TClass *
cl = TClass::GetClass(type.
typeInfo(),
true);
45 cl->GetMissingDictionaries(result, recursive);
46 for(
auto const& item : result) {
47 TClass
const* cl =
static_cast<TClass
const*
>(item);
48 missingTypes.insert(
TypeID(cl->GetTypeInfo()));
54 TClass *
cl = TClass::GetClass(type.
typeInfo(),
true);
57 <<
"No TClass for class: '" << type.
className() <<
"'" << std::endl;
59 if(!cl->HasDictionary()) {
60 missingTypes.insert(type);
68 TClass *
cl = TClass::GetClass(type.
typeInfo(),
true);
71 <<
"No TClass for class: '" << type.
className() <<
"'" << std::endl;
74 cl->GetMissingDictionaries(result, recursive);
75 for(
auto const& item : result) {
76 TClass
const* cl =
static_cast<TClass
const*
>(item);
77 missingTypes.insert(
TypeID(cl->GetTypeInfo()));
83 if (!missingTypes.empty()) {
84 std::ostringstream ostr;
85 for(
auto const& item : missingTypes) {
86 ostr << item <<
"\n\n";
89 <<
"No data dictionary found for the following classes:\n\n"
91 <<
"Most likely each dictionary was never generated,\n"
92 <<
"but it may be that it was generated in the wrong package.\n"
93 <<
"Please add (or move) the specification\n"
94 <<
"<class name=\"whatever\"/>\n"
95 <<
"to the appropriate classes_def.xml file.\n"
96 <<
"If the class is a template instance, you may need\n"
97 <<
"to define a dummy variable of this type in classes.h.\n"
98 <<
"Also, if this class has any transient members,\n"
99 <<
"you need to specify them in classes_def.xml.";
105 while (!missingTypes.empty()) {
107 for(
auto const& item : missing) {
109 TClass::GetClass(item.typeInfo(), kTRUE);
114 missingTypes.clear();
115 for(
auto const& item : missing) {
118 if (missingTypes == missing) {
122 if (missingTypes.empty()) {
130 std::vector<TypeWithDict>& baseTypes) {
136 for (
auto const& basex : bases) {
142 if (!
bool(baseRflxType)) {
150 baseTypes.push_back(baseType);
bool checkTypeDictionary(TypeID const &type, TypeSet &missingTypes)
const std::type_info & typeInfo() const
void public_base_classes(TypeWithDict const &type, std::vector< TypeWithDict > &baseTypes)
std::set< TypeID > TypeSet
bool checkClassDictionary(TypeID const &type, TypeSet &missingTypes)
std::type_info const & typeInfo() const
TypeWithDict typeOf() const
void throwMissingDictionariesException(TypeSet const &)
bool search_all(ForwardSequence const &s, Datum const &d)
std::string const & className() const
void checkClassDictionaries(TypeID const &type, TypeSet &missingTypes, bool recursive=true)
void loadMissingDictionaries(TypeSet missingTypes)
void checkTypeDictionaries(TypeID const &type, TypeSet &missingTypes, bool recursive=true)