12namespace fs = std::filesystem;
15 const std::string& baseTemplateRoot,
16 const std::string& assetsRoot) {
17 test_template_root = templateRoot;
18 test_base_template_root = baseTemplateRoot;
19 test_assets_root = assetsRoot;
23 test_template_root.clear();
24 test_base_template_root.clear();
25 test_assets_root.clear();
29 if (wilson.empty() || model.empty()) {
30 throw std::runtime_error(
"FileNameManager must be initialized with Wilson and model parameters.");
33 auto adapter = std::make_shared<MartyAdapter>();
34 auto proxy = std::make_shared<MartyPathProxy>(adapter);
35 return std::shared_ptr<FileNameManager>(
new FileNameManager(wilson, model, proxy));
39 const std::string& model,
40 std::shared_ptr<IMartyPathProxy> path_proxy)
41 : path_proxy_(
std::move(path_proxy)),
44 lowercaseWilson_(toLowercase(wilson)),
45 lowercaseModel_(toLowercase(model)) {
47 throw std::invalid_argument(
"FileNameManager requires a non-null IMartyPathProxy.");
50 const fs::path output_root = !test_template_root.empty()
51 ? fs::path(test_template_root)
54 const fs::path base_template_root = !test_base_template_root.empty()
55 ? fs::path(test_base_template_root)
58 templateDir_ = ensureTrailingSlash(output_root.string());
59 baseTemplateDir_ = ensureTrailingSlash(base_template_root.string());
61 if (!test_assets_root.empty()) {
62 const fs::path mapping_dir = fs::path(test_assets_root) /
"input_files" /
"marty_mapping";
63 smMappingFile_ = (mapping_dir /
"sm.json").
string();
64 bsmMappingFile_ = (mapping_dir / (lowercaseModel_ +
".json")).string();
69 if (bsm_path.has_value()) {
70 bsmMappingFile_ = bsm_path.value().string();
74 fs::create_directories(templateDir_);
77std::string FileNameManager::toLowercase(std::string value) {
78 std::transform(value.begin(), value.end(), value.begin(),
79 [](
unsigned char c){ return static_cast<char>(std::tolower(c)); });
83std::string FileNameManager::ensureTrailingSlash(
const std::string& value) {
88 if (value.back() ==
'/' || value.back() ==
'\\') {
96 return templateDir_ +
"generated_" + model_ +
"_" + wilson_ +
".cpp";
100 return templateDir_ +
"generated_" + model_ +
"_" + wilson_;
104 return templateDir_ +
"libs/" + wilson_ +
"_" + model_+
"/script/example_" + lowercaseWilson_ +
"_" + lowercaseModel_ +
".cpp";
108 return templateDir_ +
"libs/" + wilson_ +
"_" + model_+
"/bin/example_" + lowercaseWilson_ +
"_" + lowercaseModel_ +
".x";
112 return templateDir_ +
"libs/" + wilson_ +
"_" + model_+
"/include/params.h";
116 if (ext==
"h")
return templateDir_ +
"libs/" + wilson_ +
"_" + model_ +
"/include/csv_helper." + ext;
117 if (ext==
"cpp")
return templateDir_ +
"libs/" + wilson_ +
"_" + model_ +
"/src/csv_helper." + ext;
118 throw std::runtime_error(
"Unsupported extension");
122 if (ext==
"h" || ext==
"cpp")
return baseTemplateDir_ +
"csv_helper." + ext;
123 throw std::runtime_error(
"Unsupported extension");
131 return baseTemplateDir_;
135 return templateDir_ +
"libs/" + wilson_ +
"_" + model_ +
"/";
139 return templateDir_ + model_ +
"_wilson.csv";
143 return bsmMappingFile_.value_or(smMappingFile_);
148 return smMappingFile_;
152 return bsmMappingFile_;
156 return getLibDir() +
"bin/paramlist.csv";
Manages file and directory names for generated MARTY code and assets.
@ TEMPLATE_DIR
Read-only directory containing generated-code templates.
@ MARTY_TEMP_DIR
Writable cache directory used for generated MARTY files.
Core-side adapter giving MARTY access to configuration and managed paths.
MartyPath
Enumerates MARTY-related filesystem resources.
static std::shared_ptr< FileNameManager > getInstance(const std::string &wilson="", const std::string &model="")
Retrieves a FileNameManager for a given (wilson, model) pair.
std::string getNumGeneratedFileName() const
std::string getCsvWilsonFileName() const
std::optional< std::string > getBsmMappingFileName() const
std::string getGeneratedFileName() const
std::string getExecutableFileName() const
std::string getParamFileName() const
std::string getOutputDir() const
static void setTestingRoots(const std::string &templateRoot, const std::string &baseTemplateRoot, const std::string &assetsRoot)
Testing-only root overrides.
std::string getNumExecutableFileName() const
std::string getTemplateDir() const
std::string getNumParamFileName() const
std::string getHelperFileName(const std::string &extension) const
std::string getBaseHelperFileName(const std::string &extension) const
std::string getSmMappingFileName() const
std::string getLibDir() const
static void clearTestingRoots()
FileNameManager(const FileNameManager &)=delete
std::string getjsondbmodel() const
Legacy accessor kept for existing code.
Hash specialization for SymbolId<Tag>.