Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc132af7 authored by Muhammad Qureshi's avatar Muhammad Qureshi
Browse files

Generate constants for enum values in cpp header

This is the C++ counterpart of the enum generation for Java done in
ag/I1ad19b86e28d0df0f8c15d4c995d101423cff4c2

Bug: 120990429
Test: builds successfully, logged one of atoms with an enum in C++ code and verified statsd logcat

Change-Id: I2c1452c0590aecdef0dbede6d88014c748e6509e
parent affa55b4
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -674,7 +674,7 @@ write_stats_log_header(FILE* out, const Atoms& atoms, const AtomDecl &attributio
    build_non_chained_decl_map(atoms, &atom_code_to_non_chained_decl_map);

    size_t i = 0;
    // Print constants
    // Print atom constants
    for (set<AtomDecl>::const_iterator atom = atoms.decls.begin();
        atom != atoms.decls.end(); atom++) {
        string constant = make_constant_name(atom->name);
@@ -700,6 +700,30 @@ write_stats_log_header(FILE* out, const Atoms& atoms, const AtomDecl &attributio
    fprintf(out, "};\n");
    fprintf(out, "\n");

    // Print constants for the enum values.
    fprintf(out, "//\n");
    fprintf(out, "// Constants for enum values\n");
    fprintf(out, "//\n\n");
    for (set<AtomDecl>::const_iterator atom = atoms.decls.begin();
        atom != atoms.decls.end(); atom++) {
        for (vector<AtomField>::const_iterator field = atom->fields.begin();
            field != atom->fields.end(); field++) {
            if (field->javaType == JAVA_TYPE_ENUM) {
                fprintf(out, "// Values for %s.%s\n", atom->message.c_str(),
                    field->name.c_str());
                for (map<int, string>::const_iterator value = field->enumValues.begin();
                    value != field->enumValues.end(); value++) {
                    fprintf(out, "const int32_t %s__%s__%s = %d;\n",
                        make_constant_name(atom->message).c_str(),
                        make_constant_name(field->name).c_str(),
                        make_constant_name(value->second).c_str(),
                        value->first);
                }
                fprintf(out, "\n");
            }
        }
    }

    fprintf(out, "struct BytesField {\n");
    fprintf(out,
            "  BytesField(char const* array, size_t len) : arg(array), "