Allow arbitrary meta properties on enum fields
This commit is contained in:
@@ -1,10 +1,7 @@
|
||||
DQN_INSPECT enum struct EnumWithMetadata
|
||||
{
|
||||
Rect DQN_INSPECT_META(FilePath = "Rect.vert", FilePath2 = "Rect.frag"),
|
||||
Count,
|
||||
struct V3 {
|
||||
V3(float a, float b, float c) { (void)a; (void)b; (void)c; }
|
||||
float a, b, c;
|
||||
};
|
||||
|
||||
struct V3 { V3(float a, float b) { (void)a; (void)b; } float test; };
|
||||
struct V4 { float test; };
|
||||
|
||||
template <typename T, int Size>
|
||||
@@ -14,6 +11,8 @@ enum struct OpenGLShader { Vertex, Count, };
|
||||
|
||||
DQN_INSPECT struct SampleStruct
|
||||
{
|
||||
// TODO(doyle): This shit not support yet, you can imagine why
|
||||
int const *const b, c, *d, *e;
|
||||
// #if 0
|
||||
// #endif
|
||||
Array<V3, 32> lights;
|
||||
@@ -27,7 +26,6 @@ DQN_INSPECT struct SampleStruct
|
||||
int draw_call_count;
|
||||
|
||||
const int *const a;
|
||||
int const *const b, c, *d, *e;
|
||||
const int f;
|
||||
int const g;
|
||||
int *const h;
|
||||
@@ -35,13 +33,20 @@ DQN_INSPECT struct SampleStruct
|
||||
int *********const j, k, ******l, *m;
|
||||
};
|
||||
|
||||
DQN_INSPECT enum struct EnumWithMetadata
|
||||
{
|
||||
Rect DQN_INSPECT_META(char const *FilePath = "Rect.vert", V3 Coords = V3(1, 2, 3)),
|
||||
Square DQN_INSPECT_META(char const *FilePath = "Square.vert"),
|
||||
Count,
|
||||
};
|
||||
|
||||
DQN_INSPECT_GENERATE_PROTOTYPE(b = {}, c = nullptr, e = false, f = 1, g = "Hello world")
|
||||
void Function1(int a, float b, char const *c, bool e, int f, char *g)
|
||||
{
|
||||
(void)a; (void)b; (void)c; (void)e; (void)f; (void)g;
|
||||
}
|
||||
|
||||
DQN_INSPECT_GENERATE_PROTOTYPE(foo = V3(10, 20), bar = {120, 150})
|
||||
DQN_INSPECT_GENERATE_PROTOTYPE(foo = V3(10, 20, 50), bar = {120, 150, 20})
|
||||
void *Function2(V3 foo, V3 bar, ...) { (void)foo; (void)bar; return nullptr; }
|
||||
|
||||
DQN_INSPECT_GENERATE_PROTOTYPE()
|
||||
|
||||
@@ -12,205 +12,126 @@
|
||||
#define CHAR_COUNT(str) (ARRAY_COUNT(str) - 1)
|
||||
#define STR_AND_LEN(str) str, CHAR_COUNT(str)
|
||||
|
||||
char const *DqnInspect_EnumWithMetadata_Strings[] = {"Rect", "Count", };
|
||||
|
||||
char const *DqnInspect_EnumString(EnumWithMetadata val)
|
||||
{
|
||||
if (val == EnumWithMetadata::Rect) return DqnInspect_EnumWithMetadata_Strings[0]; // "Rect"
|
||||
if (val == EnumWithMetadata::Count) return DqnInspect_EnumWithMetadata_Strings[1]; // "Count"
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
char const *DqnInspect_FilePathMetadata(EnumWithMetadata val)
|
||||
{
|
||||
if (val == EnumWithMetadata::Rect) return "Rect.vert";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
char const *DqnInspect_FilePath2Metadata(EnumWithMetadata val)
|
||||
{
|
||||
if (val == EnumWithMetadata::Rect) return "Rect.frag";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DqnInspect_StructMemberMetadata const DqnInspect_SampleStruct_ebo_StructMemberMetadata[] =
|
||||
{
|
||||
{
|
||||
DqnInspect_StructMemberMetadataType::String,
|
||||
STR_AND_LEN("DisplayName"), STR_AND_LEN("Element Buffer Object"),
|
||||
},
|
||||
};
|
||||
|
||||
DqnInspect_StructMemberMetadata const DqnInspect_SampleStruct_vao_StructMemberMetadata[] =
|
||||
{
|
||||
{
|
||||
DqnInspect_StructMemberMetadataType::String,
|
||||
STR_AND_LEN("DisplayName"), STR_AND_LEN("Vertex Array Object"),
|
||||
},
|
||||
{
|
||||
DqnInspect_StructMemberMetadataType::String,
|
||||
STR_AND_LEN("OpenGLVersion"), STR_AND_LEN("330"),
|
||||
},
|
||||
};
|
||||
|
||||
DqnInspect_StructMemberMetadata const DqnInspect_SampleStruct_draw_color_StructMemberMetadata[] =
|
||||
{
|
||||
{
|
||||
DqnInspect_StructMemberMetadataType::String,
|
||||
STR_AND_LEN("DisplayName"), STR_AND_LEN("HelloWorld"),
|
||||
},
|
||||
};
|
||||
|
||||
DqnInspect_StructMember const DqnInspect_SampleStruct_StructMembers[] =
|
||||
{
|
||||
{
|
||||
STR_AND_LEN("Array"), STR_AND_LEN("lights"),
|
||||
STR_AND_LEN("V3, 32"), // template_expr
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("Array"), STR_AND_LEN("camera_matrixes"),
|
||||
STR_AND_LEN("V4, 32"), // template_expr
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("char"), STR_AND_LEN("bitmaps"),
|
||||
STR_AND_LEN("int const *c"), STR_AND_LEN("b"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
2 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("shaders"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("void"), STR_AND_LEN("win32_handle"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("ebo"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
DqnInspect_SampleStruct_ebo_StructMemberMetadata, 1,
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("vbo"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("vao"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
DqnInspect_SampleStruct_vao_StructMemberMetadata, 2,
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("V4"), STR_AND_LEN("draw_color"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
DqnInspect_SampleStruct_draw_color_StructMemberMetadata, 1,
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("V3"), STR_AND_LEN("lighting_ambient_coeff"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("draw_call_count"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("const"), STR_AND_LEN("int"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("const"), STR_AND_LEN("a"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("b"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("c"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("d"),
|
||||
STR_AND_LEN("int const *const b, c, *"), STR_AND_LEN("d"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("e"),
|
||||
STR_AND_LEN("int const *const b, c, *d, *"), STR_AND_LEN("e"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("Array"), STR_AND_LEN("lights"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("Array"), STR_AND_LEN("camera_matrixes"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("char **"), STR_AND_LEN("bitmaps"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
2 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("shaders"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("void *"), STR_AND_LEN("win32_handle"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("ebo"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("vao"), STR_AND_LEN("DQN_INSPECT_META"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("V4"), STR_AND_LEN("draw_color"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("V3"), STR_AND_LEN("lighting_ambient_coeff"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("draw_call_count"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("const"), STR_AND_LEN("int"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("const"), STR_AND_LEN("a"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("const"), STR_AND_LEN("int"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("g"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("h"),
|
||||
STR_AND_LEN("int *c"), STR_AND_LEN("h"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("i"),
|
||||
STR_AND_LEN("int const*"), STR_AND_LEN("i"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("j"),
|
||||
STR_AND_LEN("int *********c"), STR_AND_LEN("j"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
9 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("k"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
0 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("l"),
|
||||
STR_AND_LEN("int *********const j, k, ******"), STR_AND_LEN("l"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
6 // array_dimensions
|
||||
},
|
||||
{
|
||||
STR_AND_LEN("int"), STR_AND_LEN("m"),
|
||||
STR_AND_LEN("int *********const j, k, ******l, *"), STR_AND_LEN("m"),
|
||||
nullptr, 0, // template_expr and template_expr_len
|
||||
nullptr, 0, // metadata and metadata_len
|
||||
1 // array_dimensions
|
||||
},
|
||||
};
|
||||
@@ -229,9 +150,32 @@ DqnInspect_Struct const *DqnInspect_GetStruct(SampleStruct const *val)
|
||||
return result;
|
||||
}
|
||||
|
||||
void Function1(int a, float b = {}, char const *c = nullptr, bool e = false, int f = 1, char *g = "Hello world");
|
||||
void * Function2(V3 foo = V3(10, 20), V3 bar = {120, 150}, ...);
|
||||
Array<int const *, 3> const *const Function3(Array<int, 32> const *foobar);
|
||||
char const *DqnInspect_EnumWithMetadata_Strings[] = {"Rect", "Square", "Count", };
|
||||
|
||||
char const *DqnInspectEnum_Stringify(EnumWithMetadata val, int *len = nullptr)
|
||||
{
|
||||
if (val == EnumWithMetadata::Rect) { if (len) *len = CHAR_COUNT("Rect"); return DqnInspect_EnumWithMetadata_Strings[0]; }
|
||||
if (val == EnumWithMetadata::Square) { if (len) *len = CHAR_COUNT("Square"); return DqnInspect_EnumWithMetadata_Strings[1]; }
|
||||
if (val == EnumWithMetadata::Count) { if (len) *len = CHAR_COUNT("Count"); return DqnInspect_EnumWithMetadata_Strings[2]; }
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
char const * DqnInspectMetadata_FilePath(EnumWithMetadata val)
|
||||
{
|
||||
if (val == EnumWithMetadata::Rect) { return "Rect.vert"; }
|
||||
if (val == EnumWithMetadata::Square) { return "Square.vert"; }
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool DqnInspectMetadata_Coords(EnumWithMetadata val, V3 *value)
|
||||
{
|
||||
if (val == EnumWithMetadata::Rect) { *value = V3(1, 2, 3); return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
void Function1(int a, float b = {}, char const * c = nullptr, bool e = false, int f = 1, char * g = "Hello world");
|
||||
void * Function2(V3 foo = V3(10, 20, 50), V3 bar = {120, 150, 20}, ...);
|
||||
Array<int const *, 3> const *const Function3(Array<int, 32> const * foobar);
|
||||
|
||||
#undef ARRAY_COUNT
|
||||
#undef CHAR_COUNT
|
||||
|
||||
Reference in New Issue
Block a user