Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 26x 26x 2x 24x 24x 24x 44x 24x 64x 64x 64x 24x 24x | /**
* Enum Header Generator
*
* Generates C typedef enum declarations from symbol information.
* Used by HeaderGenerator to emit full enum definitions in headers.
*/
import IHeaderTypeInput from "./IHeaderTypeInput";
/**
* Generate a C typedef enum declaration for the given enum name.
*
* Output format:
* ```c
* typedef enum {
* EnumName_MEMBER1 = 0,
* EnumName_MEMBER2 = 1
* } EnumName;
* ```
*
* @param name - The enum type name
* @param input - Symbol information containing enum members
* @returns C typedef enum declaration, or comment if enum data unavailable
*/
function generateEnumHeader(name: string, input: IHeaderTypeInput): string {
const members = input.enumMembers.get(name);
// Graceful fallback if enum data not available
if (!members || members.size === 0) {
return `/* Enum: ${name} (see implementation for values) */`;
}
const lines: string[] = [];
lines.push("typedef enum {");
// Convert members to sorted array for consistent output
const memberEntries = Array.from(members.entries()).sort(
([, a], [, b]) => a - b,
);
memberEntries.forEach(([memberName, value], index) => {
// Prefix member names with enum name to avoid C namespace collisions
const prefixedName = `${name}_${memberName}`;
const comma = index < memberEntries.length - 1 ? "," : "";
lines.push(` ${prefixedName} = ${value}${comma}`);
});
lines.push(`} ${name};`);
return lines.join("\n");
}
export default generateEnumHeader;
|