Use std::string_view for CodeFactory parameters (where possible)
This commit is contained in:
parent
8f1909dfdf
commit
e3d32ddfa1
|
@ -30,8 +30,8 @@ CodeFactory::ToolInvocation::ToolInvocation(CodeFactory &factory)
|
|||
* \brief Constructs a new instance.
|
||||
* \remarks The specified arguments are not copied and must remain valid for the live-time of the code factory.
|
||||
*/
|
||||
CodeFactory::CodeFactory(
|
||||
const char *applicationPath, const std::vector<const char *> &sourceFiles, const std::vector<string> &clangOptions, std::ostream &os)
|
||||
CodeFactory::CodeFactory(std::string_view applicationPath, const std::vector<const char *> &sourceFiles,
|
||||
const std::vector<std::string_view> &clangOptions, std::ostream &os)
|
||||
: m_applicationPath(applicationPath)
|
||||
, m_sourceFiles(sourceFiles)
|
||||
, m_clangOptions(clangOptions)
|
||||
|
@ -50,7 +50,7 @@ CodeFactory::~CodeFactory()
|
|||
*/
|
||||
std::vector<string> CodeFactory::makeClangArgs() const
|
||||
{
|
||||
static const initializer_list<const char *> flags
|
||||
static const initializer_list<std::string_view> flags
|
||||
= { m_applicationPath, "-x", "c++", "-Wno-pragma-once-outside-header", "-std=c++14", "-fsyntax-only" };
|
||||
vector<string> clangArgs;
|
||||
clangArgs.reserve(flags.size() + m_clangOptions.size() + m_sourceFiles.size());
|
||||
|
|
|
@ -29,8 +29,8 @@ class CodeFactory {
|
|||
friend class Visitor;
|
||||
|
||||
public:
|
||||
CodeFactory(
|
||||
const char *applicationPath, const std::vector<const char *> &sourceFiles, const std::vector<std::string> &clangOptions, std::ostream &os);
|
||||
CodeFactory(std::string_view applicationPath, const std::vector<const char *> &sourceFiles, const std::vector<std::string_view> &clangOptions,
|
||||
std::ostream &os);
|
||||
~CodeFactory();
|
||||
|
||||
const std::vector<std::unique_ptr<CodeGenerator>> &generators() const;
|
||||
|
@ -50,9 +50,9 @@ private:
|
|||
bool generate() const;
|
||||
std::vector<std::string> makeClangArgs() const;
|
||||
|
||||
const char *const m_applicationPath;
|
||||
std::string_view m_applicationPath;
|
||||
const std::vector<const char *> &m_sourceFiles;
|
||||
const std::vector<std::string> &m_clangOptions;
|
||||
const std::vector<std::string_view> &m_clangOptions;
|
||||
std::ostream &m_os;
|
||||
std::vector<std::unique_ptr<CodeGenerator>> m_generators;
|
||||
std::unique_ptr<ToolInvocation> m_toolInvocation;
|
||||
|
|
|
@ -69,14 +69,16 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
// compose options passed to the clang tool invocation
|
||||
vector<string> clangOptions;
|
||||
auto clangOptions = std::vector<std::string_view>();
|
||||
if (clangOptionsArg.isPresent()) {
|
||||
// add additional options specified via CLI argument
|
||||
for (const auto *const value : clangOptionsArg.values(0)) {
|
||||
// split options by ";" - not nice but this eases using CMake generator expressions
|
||||
const auto splittedValues(splitString<vector<string>>(value, ";", EmptyPartsTreat::Omit));
|
||||
const auto splittedValues = splitStringSimple<std::vector<std::string_view>>(value, ";");
|
||||
for (const auto &splittedValue : splittedValues) {
|
||||
clangOptions.emplace_back(move(splittedValue));
|
||||
if (!splittedValue.empty()) {
|
||||
clangOptions.emplace_back(splittedValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -88,7 +90,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
// instantiate the code factory and add generators to it
|
||||
CodeFactory factory(parser.executable(), inputFileArg.values(0), clangOptions, *os);
|
||||
auto factory = CodeFactory(parser.executable(), inputFileArg.values(0), clangOptions, *os);
|
||||
factory.setErrorResilient(errorResilientArg.isPresent());
|
||||
// add specified generators if the --generator argument is present; otherwise add default generators
|
||||
if (generatorsArg.isPresent()) {
|
||||
|
|
|
@ -64,13 +64,14 @@ JsonGeneratorTests::JsonGeneratorTests()
|
|||
*/
|
||||
void JsonGeneratorTests::testGeneratorItself()
|
||||
{
|
||||
const string inputFilePath(testFilePath("some_structs.h"));
|
||||
const vector<const char *> inputFiles{ inputFilePath.data() };
|
||||
const vector<string> clangOptions{ "-resource-dir", REFLECTION_GENERATOR_CLANG_RESOURCE_DIR, "-std=c++17", "-I", CPP_UTILITIES_INCLUDE_DIRS,
|
||||
const auto inputFilePath = testFilePath("some_structs.h");
|
||||
const auto inputFiles = vector<const char *>{ inputFilePath.data() };
|
||||
const auto clangOptions
|
||||
= vector<std::string_view>{ "-resource-dir", REFLECTION_GENERATOR_CLANG_RESOURCE_DIR, "-std=c++17", "-I", CPP_UTILITIES_INCLUDE_DIRS,
|
||||
#ifdef RAPIDJSON_INCLUDE_DIRS
|
||||
"-I", RAPIDJSON_INCLUDE_DIRS
|
||||
"-I", RAPIDJSON_INCLUDE_DIRS
|
||||
#endif
|
||||
};
|
||||
};
|
||||
|
||||
stringstream buffer;
|
||||
JsonSerializationCodeGenerator::Options jsonOptions;
|
||||
|
|
Loading…
Reference in New Issue