aconfig: update c/c++ codegen
Two major changes to c/c++ codegen
(1) explicit setter for each flag instead of a generic flag setter
void override_flag(std::string name, bool val) is replaced with
void <flag name>(bool val) for each flag name
This has several advantages:
(a) generated code is more c++ idomatic
(b) no longer need to create flag name string constants
(c) any typo in the code is caught early in the build time
(2) remove flag setter and flag override reset methods/functions when
generating code targets for production. If developers want to update
their main function to take command line arg for flag overrides, they
can use compile time macros to decide if the flag override code should
be included.
Bug: b/279483801
Test: atest aconfig.test
Change-Id: I6141f7f979b32fe0426154d578edeb997ae5ff7c
diff --git a/tools/aconfig/templates/cpp_test_flag_provider.template b/tools/aconfig/templates/cpp_test_flag_provider.template
index a24116b..afa56cf 100644
--- a/tools/aconfig/templates/cpp_test_flag_provider.template
+++ b/tools/aconfig/templates/cpp_test_flag_provider.template
@@ -8,25 +8,20 @@
{{ endif }}
#include <unordered_map>
-#include <unordered_set>
-#include <cassert>
namespace {cpp_namespace} \{
class flag_provider : public flag_provider_interface \{
private:
std::unordered_map<std::string, bool> overrides_;
- std::unordered_set<std::string> flag_names_;
public:
flag_provider()
- : overrides_(),
- flag_names_() \{
- {{ for item in class_elements}}
- flag_names_.insert({item.uppercase_flag_name});{{ endfor }}
- }
+ : overrides_()
+ \{}
+
{{ for item in class_elements}}
virtual bool {item.flag_name}() override \{
- auto it = overrides_.find({item.uppercase_flag_name});
+ auto it = overrides_.find("{item.flag_name}");
if (it != overrides_.end()) \{
return it->second;
} else \{
@@ -40,13 +35,13 @@
{{ -endif }}
}
}
- {{ endfor }}
- virtual void override_flag(std::string const& flag, bool val) override \{
- assert(flag_names_.count(flag));
- overrides_[flag] = val;
- }
- virtual void reset_overrides() override \{
+ virtual void {item.flag_name}(bool val) override \{
+ overrides_["{item.flag_name}"] = val;
+ }
+ {{ endfor }}
+
+ virtual void reset_flags() override \{
overrides_.clear();
}
};