mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-12-11 21:31:30 +00:00
a6a3d4c6b5
Array and single type overrides now allow the parsing of the items themselves to be customized. This makes it easy to handle arrays and pointers to single items while also using custom specifications, rather than relying entirely on the custom override.
49 lines
1.1 KiB
R
49 lines
1.1 KiB
R
#include <PropertyList.h>
|
|
|
|
#include "vkfieldarray.h"
|
|
#include "vkfieldtype.h"
|
|
#include "vkgen.h"
|
|
#include "vktype.h"
|
|
|
|
@implementation ArrayField
|
|
|
|
-init:(PLItem *) item struct:(Struct *)strct field:(string)fname
|
|
{
|
|
self = [super init:item struct:strct field:fname];
|
|
if (!self) {
|
|
return self;
|
|
}
|
|
|
|
PLItem *desc = [item getObjectForKey:"type"];
|
|
type = [[FieldType fieldType:[desc getObjectAtIndex:1]] retain];
|
|
|
|
value_field = [[item getObjectForKey:"values"] string];
|
|
size_field = [[item getObjectForKey:"size"] string];
|
|
return self;
|
|
}
|
|
|
|
-writeParseData
|
|
{
|
|
fprintf (output_file, "static parse_array_t parse_%s_%s_data = {\n",
|
|
struct_name, field_name);
|
|
[type writeParseData];
|
|
fprintf (output_file, "\tfield_offset (%s, %s),\n",
|
|
struct_name, value_field);
|
|
if (size_field) {
|
|
fprintf (output_file, "\tfield_offset (%s, %s),\n",
|
|
struct_name, size_field);
|
|
} else {
|
|
fprintf (output_file, "\t-1,\n");
|
|
}
|
|
fprintf (output_file, "};\n");
|
|
return self;
|
|
}
|
|
|
|
-writeField
|
|
{
|
|
fprintf (output_file, "\t{\"%s\", 0, %s, parse_%s, &parse_%s_%s_data},\n",
|
|
field_name, "QFArray", "array", struct_name, field_name);
|
|
return self;
|
|
}
|
|
|
|
@end
|