def Generate(self): """Generates a Code object for features. """ c = Code() (c.Append(cpp_util.CHROMIUM_LICENSE).Append().Append( cpp_util.GENERATED_FEATURE_MESSAGE % self._source_file).Append(). Append('#include <string>').Append().Append( '#include "%s.h"' % self._source_file_filename).Append().Append( '#include "base/logging.h"').Append().Concat( cpp_util.OpenNamespace(self._namespace)).Append()) # Generate the constructor. (c.Append('%s::%s() {' % (self._class_name, self._class_name)).Sblock()) for feature in self._feature_defs: c.Append('features_["%s"] = %s;' % (feature.name, cpp_util.ConstantName(feature.name))) (c.Eblock().Append('}').Append()) # Generate the ToString function. (c.Append( 'const char* %s::ToString(' '%s::ID id) const {' % (self._class_name, self._class_name)).Sblock().Append('switch (id) {').Sblock()) for feature in self._feature_defs: c.Append('case %s: return "%s";' % (cpp_util.ConstantName(feature.name), feature.name)) (c.Append('case kUnknown: break;').Append('case kEnumBoundary: break;') .Eblock().Append('}').Append('NOTREACHED();').Append('return "";')) (c.Eblock().Append('}').Append()) # Generate the FromString function. (c.Append( '%s::ID %s::FromString(' 'const std::string& id) const {' % (self._class_name, self._class_name)).Sblock().Append( 'const auto& it = features_.find(id);' % self._class_name).Append( 'return (it == features_.end()) ? kUnknown : it->second;'). Eblock().Append('}').Append().Cblock( cpp_util.CloseNamespace(self._namespace))) return c
def _GenerateEnumConstants(self): c = Code() (c.Sblock().Append('kUnknown,')) for feature in self._feature_defs: c.Append('%s,' % cpp_util.ConstantName(feature.name)) c.Append('kEnumBoundary') return c