Exemple #1
0
    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
Exemple #2
0
    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