34 static bool isAlreadySetup =
false;
39 isAlreadySetup =
true;
41 std::stringstream exportkeys;
42 exportkeys << RooFitHS3_wsexportkeys;
48 static bool isAlreadySetup =
false;
53 isAlreadySetup =
true;
55 std::stringstream factoryexpressions;
56 factoryexpressions << RooFitHS3_wsfactoryexpressions;
70 static std::map<const std::string, std::vector<std::unique_ptr<const Exporter>>> toAdd;
85 for (
auto &item : exportersToAdd()) {
88 auto &toAdd = item.second;
91 auto nullIt = std::find(toAdd.begin(), toAdd.end(),
nullptr);
93 if (nullIt == toAdd.end()) {
94 throw std::runtime_error(
"toAdd does not contain nullptr separator");
98 exporters.insert(
exporters.end(), std::make_move_iterator(nullIt + 1), std::make_move_iterator(toAdd.end()));
101 exporters.insert(
exporters.begin(), std::make_move_iterator(toAdd.begin()), std::make_move_iterator(nullIt));
105 exportersToAdd().clear();
106 return exportersImpl();
113 return _factoryExpressions;
123bool registerImporter(
const std::string &key, std::unique_ptr<const Importer>
f,
bool topPriority)
126 vec.insert(topPriority ?
vec.begin() :
vec.end(), std::move(
f));
133 vec.insert(topPriority ?
vec.begin() :
vec.end(), std::move(
f));
137bool registerExporter(
const std::string &key, std::unique_ptr<const Exporter>
f,
bool topPriority)
139 auto &
vec = exportersToAdd()[key];
144 vec.emplace_back(
nullptr);
146 vec.insert(topPriority ?
vec.begin() :
vec.end(), std::move(
f));
154 for (
size_t i = element.second.size(); i > 0; --i) {
155 auto *imp = element.second[i - 1].get();
156 std::string
name(
typeid(*imp).name());
157 if (
name.find(needle) != std::string::npos) {
158 element.second.erase(element.second.begin() + i - 1);
170 for (
size_t i = element.second.size(); i > 0; --i) {
171 auto *imp = element.second[i - 1].get();
172 std::string
name(
typeid(*imp).name());
173 if (
name.find(needle) != std::string::npos) {
174 element.second.erase(element.second.begin() + i - 1);
185 for (
const auto &ePtr :
x.second) {
187 auto const &
e = *ePtr;
188 std::cout <<
x.first <<
"\t" <<
typeid(
e).
name() << std::endl;
195 for (
const auto &ePtr :
x.second) {
197 auto const &
e = *ePtr;
198 std::cout <<
x.first->GetName() <<
"\t" <<
typeid(
e).
name() << std::endl;
206 std::ifstream infile(fname);
207 if (!infile.is_open()) {
208 std::cerr <<
"unable to read file '" << fname <<
"'" << std::endl;
220 for (
const auto &cl :
n.children()) {
221 std::string key = cl.key();
222 if (!cl.has_child(
"class")) {
223 std::cerr <<
"error for entry '" << key <<
"': 'class' key is required!" << std::endl;
226 std::string classname(cl[
"class"].val());
229 std::cerr <<
"unable to find class " << classname <<
", skipping." << std::endl;
234 if (!cl.has_child(
"arguments")) {
235 std::cerr <<
"class " << classname <<
" seems to have no arguments attached, skipping" << std::endl;
238 for (
const auto &arg : cl[
"arguments"].children()) {
239 ex.arguments.push_back(arg.val());
241 factoryExpressions[key] =
ex;
255 std::cout << it.first;
256 std::cout <<
" " << it.second.tclass->GetName();
257 for (
auto v : it.second.arguments) {
258 std::cout <<
" " <<
v;
260 std::cout << std::endl;
271 std::ifstream infile(fname);
272 if (!infile.is_open()) {
273 std::cerr <<
"unable to read file '" << fname <<
"'" << std::endl;
285 for (
const auto &cl :
n.children()) {
286 std::string classname = cl.key();
289 std::cerr <<
"unable to find class " << classname <<
", skipping." << std::endl;
293 auto *type = cl.find(
"type");
294 auto *proxies = cl.find(
"proxies");
296 std::cerr <<
"class " << classname <<
"has not type key set, skipping" << std::endl;
300 std::cerr <<
"class " << classname <<
"has no proxies identified, skipping" << std::endl;
303 ex.type = type->val();
304 for (
const auto &k : proxies->children()) {
305 ex.proxies[k.key()] = k.val();
321 std::cout << it.first->GetName() <<
": " << it.second.type;
322 for (
const auto &kv : it.second.proxies) {
323 std::cout <<
" " << kv.first <<
"=" << kv.second;
325 std::cout << std::endl;
static std::unique_ptr< JSONTree > create()
TClass instances represent classes, structs and namespaces in the ROOT type system.
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.
static bool registerImporter(const std::string &key, bool topPriority=true)
void loadFactoryExpressions(std::istream &is)
void setupFactoryExpressions()
ImportExpressionMap & importExpressions()
static bool registerExporter(const TClass *key, bool topPriority=true)
void clearFactoryExpressions()
int removeImporters(const std::string &needle)
int removeExporters(const std::string &needle)
std::map< TClass const *, std::vector< std::unique_ptr< const Exporter > > > ExportMap
void loadExportKeys(std::istream &is)
std::map< const std::string, ImportExpression > ImportExpressionMap
void printFactoryExpressions()
ExportKeysMap & exportKeys()
std::map< TClass const *, ExportKeys > ExportKeysMap
std::map< const std::string, std::vector< std::unique_ptr< const Importer > > > ImportMap