222 lines
6.6 KiB
C
222 lines
6.6 KiB
C
#include "schema.h"
|
|
|
|
void read_Node(const struct Node_ptr *p, struct Node *s) {
|
|
s->id = capn_read64(&p->p, 0);
|
|
s->displayName = capn_get_text(&p->p, 0);
|
|
s->scopeId = capn_read64(&p->p, 8);
|
|
s->nestedNodes = capn_getp(&p->p, 1);
|
|
s->annotations = capn_getp(&p->p, 2);
|
|
s->body_tag = capn_read16(&p->p, 16);
|
|
switch (s->body_tag) {
|
|
case Node_fileNode:
|
|
s->body.fileNode.p = capn_getp(&p->p, 3);
|
|
break;
|
|
case Node_structNode:
|
|
s->body.structNode.p = capn_getp(&p->p, 3);
|
|
break;
|
|
case Node_enumNode:
|
|
s->body.enumNode.p = capn_getp(&p->p, 3);
|
|
break;
|
|
case Node_interfaceNode:
|
|
s->body.interfaceNode.p = capn_getp(&p->p, 3);
|
|
break;
|
|
case Node_constNode:
|
|
s->body.constNode.p = capn_getp(&p->p, 3);
|
|
break;
|
|
case Node_annotationNode:
|
|
s->body.annotationNode.p = capn_getp(&p->p, 3);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void read_Node_NestedNode(const struct Node_NestedNode_ptr *p, struct Node_NestedNode *s) {
|
|
s->name = capn_get_text(&p->p, 0);
|
|
s->id = capn_read64(&p->p, 0);
|
|
}
|
|
|
|
void read_Type(const struct Type_ptr *p, struct Type *s) {
|
|
s->body_tag = capn_read16(&p->p, 0);
|
|
switch (s->body_tag) {
|
|
case Type_listType:
|
|
s->body.listType.p = capn_getp(&p->p, 0);
|
|
break;
|
|
case Type_enumType:
|
|
s->body.enumType = capn_read64(&p->p, 0);
|
|
break;
|
|
case Type_structType:
|
|
s->body.structType = capn_read64(&p->p, 0);
|
|
break;
|
|
case Type_interfaceType:
|
|
s->body.interfaceType = capn_read64(&p->p, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void read_Value(const struct Value_ptr *p, struct Value *s) {
|
|
s->body_tag = capn_read16(&p->p, 0);
|
|
switch (s->body_tag) {
|
|
case Value_boolValue:
|
|
s->body.boolValue = (capn_read8(&p->p, 8) & 1) != 0;
|
|
break;
|
|
case Value_int8Value:
|
|
s->body.int8Value = (int8_t) capn_read8(&p->p, 8);
|
|
break;
|
|
case Value_int16Value:
|
|
s->body.int16Value = (int16_t) capn_read16(&p->p, 8);
|
|
break;
|
|
case Value_int32Value:
|
|
s->body.int32Value = (int32_t) capn_read32(&p->p, 8);
|
|
break;
|
|
case Value_int64Value:
|
|
s->body.int64Value = (int64_t) capn_read64(&p->p, 8);
|
|
break;
|
|
case Value_uint8Value:
|
|
s->body.uint8Value = capn_read8(&p->p, 8);
|
|
break;
|
|
case Value_uint16Value:
|
|
s->body.uint16Value = capn_read16(&p->p, 8);
|
|
break;
|
|
case Value_uint32Value:
|
|
s->body.uint32Value = capn_read32(&p->p, 8);
|
|
break;
|
|
case Value_uint64Value:
|
|
s->body.uint64Value = capn_read64(&p->p, 8);
|
|
break;
|
|
case Value_float32Value:
|
|
s->body.float32Value = capn_read_float(&p->p, 8, 0.0f);
|
|
break;
|
|
case Value_float64Value:
|
|
s->body.float64Value = capn_read_double(&p->p, 8, 0.0);
|
|
break;
|
|
case Value_textValue:
|
|
s->body.textValue = capn_get_text(&p->p, 0);
|
|
break;
|
|
case Value_dataValue:
|
|
s->body.dataValue = capn_get_data(&p->p, 0);
|
|
break;
|
|
case Value_listValue:
|
|
s->body.listValue = capn_getp(&p->p, 0);
|
|
break;
|
|
case Value_enumValue:
|
|
s->body.enumValue = capn_read16(&p->p, 8);
|
|
break;
|
|
case Value_structValue:
|
|
s->body.structValue = capn_getp(&p->p, 0);
|
|
break;
|
|
case Value_objectValue:
|
|
s->body.objectValue = capn_getp(&p->p, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void read_Annotation(const struct Annotation_ptr *p, struct Annotation *s) {
|
|
s->id = capn_read64(&p->p, 0);
|
|
s->value.p = capn_getp(&p->p, 0);
|
|
}
|
|
|
|
void read_FileNode(const struct FileNode_ptr *p, struct FileNode *s) {
|
|
s->imports = capn_getp(&p->p, 0);
|
|
}
|
|
|
|
void read_FileNode_Import(const struct FileNode_Import_ptr *p, struct FileNode_Import *s) {
|
|
s->id = capn_read64(&p->p, 0);
|
|
s->name = capn_get_text(&p->p, 0);
|
|
}
|
|
|
|
void read_StructNode(const struct StructNode_ptr *p, struct StructNode *s) {
|
|
s->dataSectionWordSize = capn_read16(&p->p, 0);
|
|
s->pointerSectionSize = capn_read16(&p->p, 2);
|
|
s->preferredListEncoding = (enum ElementSize) capn_read16(&p->p, 4);
|
|
s->members = capn_getp(&p->p, 0);
|
|
}
|
|
|
|
void read_StructNode_Member(const struct StructNode_Member_ptr *p, struct StructNode_Member *s) {
|
|
s->name = capn_get_text(&p->p, 0);
|
|
s->ordinal = capn_read16(&p->p, 0);
|
|
s->codeOrder = capn_read16(&p->p, 2);
|
|
s->annotations = capn_getp(&p->p, 1);
|
|
s->body_tag = (enum StructNode_Member_body) capn_read16(&p->p, 4);
|
|
switch (s->body_tag) {
|
|
case StructNode_Member_fieldMember:
|
|
s->body.fieldMember.p = capn_getp(&p->p, 2);
|
|
break;
|
|
case StructNode_Member_unionMember:
|
|
s->body.unionMember.p = capn_getp(&p->p, 2);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void read_StructNode_Field(const struct StructNode_Field_ptr *p, struct StructNode_Field *s) {
|
|
s->offset = capn_read32(&p->p, 0);
|
|
s->type.p = capn_getp(&p->p, 0);
|
|
s->defaultValue.p = capn_getp(&p->p, 1);
|
|
}
|
|
|
|
void read_StructNode_Union(const struct StructNode_Union_ptr *p, struct StructNode_Union *s) {
|
|
s->discriminantOffset = capn_read32(&p->p, 0);
|
|
s->members = capn_getp(&p->p, 0);
|
|
}
|
|
|
|
void read_EnumNode(const struct EnumNode_ptr *p, struct EnumNode *s) {
|
|
s->enumerants = capn_getp(&p->p, 0);
|
|
}
|
|
|
|
void read_EnumNode_Enumerant(const struct EnumNode_Enumerant_ptr *p, struct EnumNode_Enumerant *s) {
|
|
s->name = capn_get_text(&p->p, 0);
|
|
s->codeOrder = capn_read16(&p->p, 0);
|
|
s->annotations = capn_getp(&p->p, 1);
|
|
}
|
|
|
|
void read_InterfaceNode(const struct InterfaceNode_ptr *p, struct InterfaceNode *s) {
|
|
s->methods = capn_getp(&p->p, 0);
|
|
}
|
|
|
|
void read_InterfaceNode_Method(const struct InterfaceNode_Method_ptr *p, struct InterfaceNode_Method *s) {
|
|
s->name = capn_get_text(&p->p, 0);
|
|
s->codeOrder = capn_read16(&p->p, 0);
|
|
s->params = capn_getp(&p->p, 1);
|
|
s->requiredParamCount = capn_read16(&p->p, 2);
|
|
s->returnType.p = capn_getp(&p->p, 2);
|
|
s->annotations = capn_getp(&p->p, 3);
|
|
}
|
|
|
|
void read_InterfaceNode_Method_Param(const struct InterfaceNode_Method_Param_ptr *p, struct InterfaceNode_Method_Param *s) {
|
|
s->name = capn_get_text(&p->p, 0);
|
|
s->type.p = capn_getp(&p->p, 1);
|
|
s->defaultValue.p = capn_getp(&p->p, 2);
|
|
s->annotations = capn_getp(&p->p, 3);
|
|
}
|
|
|
|
void read_ConstNode(const struct ConstNode_ptr *p, struct ConstNode *s) {
|
|
s->type.p = capn_getp(&p->p, 0);
|
|
s->value.p = capn_getp(&p->p, 1);
|
|
}
|
|
|
|
void read_AnnotationNode(const struct AnnotationNode_ptr *p, struct AnnotationNode *s) {
|
|
s->type.p = capn_getp(&p->p, 0);
|
|
s->targetsFile = (capn_read8(&p->p, 0) & 1) != 0;
|
|
s->targetsConst = (capn_read8(&p->p, 0) & 3) != 0;
|
|
s->targetsEnum = (capn_read8(&p->p, 0) & 4) != 0;
|
|
s->targetsEnumerant = (capn_read8(&p->p, 0) & 8) != 0;
|
|
s->targetsStruct = (capn_read8(&p->p, 0) & 16) != 0;
|
|
s->targetsField = (capn_read8(&p->p, 0) & 32) != 0;
|
|
s->targetsUnion = (capn_read8(&p->p, 0) & 64) != 0;
|
|
s->targetsInterface = (capn_read8(&p->p, 0) & 128) != 0;
|
|
s->targetsMethod = (capn_read8(&p->p, 1) & 1) != 0;
|
|
s->targetsParam = (capn_read8(&p->p, 1) & 2) != 0;
|
|
s->targetsAnnotation = (capn_read8(&p->p, 1) & 4) != 0;
|
|
}
|
|
|
|
void read_CodeGeneratorRequest(const struct CodeGeneratorRequest_ptr *p, struct CodeGeneratorRequest *s) {
|
|
s->nodes = capn_getp(&p->p, 0);
|
|
s->requestedFiles = capn_getp(&p->p, 1);
|
|
}
|
|
|