]> gerrit.simantics Code Review - simantics/fmil.git/blob - org.simantics.fmil.core/native/FMILibrary/src/XML/src/FMI1/fmi1_xml_capabilities.c
Merge "Added getters and setters for all FMI data types."
[simantics/fmil.git] / org.simantics.fmil.core / native / FMILibrary / src / XML / src / FMI1 / fmi1_xml_capabilities.c
1 /*
2     Copyright (C) 2012 Modelon AB
3
4     This program is free software: you can redistribute it and/or modify
5     it under the terms of the BSD style license.
6
7      This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10     FMILIB_License.txt file for more details.
11
12     You should have received a copy of the FMILIB_License.txt file
13     along with this program. If not, contact Modelon AB <http://www.modelon.com>.
14 */
15
16 #include "fmi1_xml_parser.h"
17 #include "fmi1_xml_capabilities_impl.h"
18 #include "fmi1_xml_model_description_impl.h"
19
20 int fmi1_xml_get_canHandleVariableCommunicationStepSize(fmi1_xml_capabilities_t* c ) {
21     return c->canHandleVariableCommunicationStepSize;
22 }
23 int fmi1_xml_get_canHandleEvents(fmi1_xml_capabilities_t* c ) {
24     return c->canHandleEvents;
25 }
26 int fmi1_xml_get_canRejectSteps(fmi1_xml_capabilities_t* c ) {
27     return c->canRejectSteps;
28 }
29 int fmi1_xml_get_canInterpolateInputs(fmi1_xml_capabilities_t* c ) {
30     return c->canInterpolateInputs;
31 }
32 unsigned int fmi1_xml_get_maxOutputDerivativeOrder(fmi1_xml_capabilities_t* c ) {
33     return c->maxOutputDerivativeOrder;
34 }
35 int fmi1_xml_get_canRunAsynchronuously(fmi1_xml_capabilities_t* c ) {
36     return c->canRunAsynchronuously;
37 }
38 int fmi1_xml_get_canSignalEvents(fmi1_xml_capabilities_t* c ) {
39     return c->canSignalEvents;
40 }
41 int fmi1_xml_get_canBeInstantiatedOnlyOncePerProcess(fmi1_xml_capabilities_t* c ) {
42     return c->canBeInstantiatedOnlyOncePerProcess;
43 }
44 int fmi1_xml_get_canNotUseMemoryManagementFunctions(fmi1_xml_capabilities_t* c ) {
45     return c->canNotUseMemoryManagementFunctions;
46 }
47
48 fmi1_xml_capabilities_t *fmi1_xml_default_capabilities(jm_callbacks *cb) {
49     return cb->calloc(1, sizeof(fmi1_xml_capabilities_t));
50 }
51
52 int fmi1_xml_handle_Capabilities(fmi1_xml_parser_context_t *context, const char* data) {
53     fmi1_xml_model_description_t* md = context->modelDescription;
54     jm_callbacks *cb = context->callbacks;
55
56     if (data) return 0;
57
58     md->capabilities = cb->calloc(1, sizeof(fmi1_xml_capabilities_t));
59     
60     if (fmi1_xml_is_attr_defined(context, fmi_attr_id_canSignalEvents)) {
61         fmi1_xml_parse_error(context, "Found capability flag canSignalEvents "
62             "which have been deprecated as it fills no function");
63     }
64
65     return (
66         /* <xs:attribute name="canHandleVariableCommunicationStepSize" type="xs:boolean" default="false"/> */
67         fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canHandleVariableCommunicationStepSize,0,
68                                  &md->capabilities->canHandleVariableCommunicationStepSize,0) ||
69         /* <xs:attribute name="canHandleEvents" type="xs:boolean" default="false"/> */
70         fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canHandleEvents,0,
71                                  &md->capabilities->canHandleEvents,0) ||
72         /* <xs:attribute name="canRejectSteps" type="xs:boolean" default="false"/> */
73         fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canRejectSteps,0,
74                                  &md->capabilities->canRejectSteps,0) ||
75         /* <xs:attribute name="canInterpolateInputs" type="xs:boolean" default="false"/> */
76         fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canInterpolateInputs,0,
77                                  &md->capabilities->canInterpolateInputs,0) ||
78         /* <xs:attribute name="maxOutputDerivativeOrder" type="xs:unsignedInt" default="0"/> */
79         fmi1_xml_set_attr_uint(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_maxOutputDerivativeOrder,0,
80                                  &md->capabilities->maxOutputDerivativeOrder,0) ||
81         /* <xs:attribute name="canRunAsynchronuously" type="xs:boolean" default="false"/> */
82         fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canRunAsynchronuously,0,
83                                  &md->capabilities->canRunAsynchronuously,0) ||
84         /* <xs:attribute name="canSignalEvents" type="xs:boolean" default="false"/> */
85         fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canSignalEvents,0,
86                                  &md->capabilities->canSignalEvents,0) ||
87         /* <xs:attribute name="canBeInstantiatedOnlyOncePerProcess" type="xs:boolean" default="false"/> */
88         fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canBeInstantiatedOnlyOncePerProcess,0,
89                                  &md->capabilities->canBeInstantiatedOnlyOncePerProcess,0) ||
90         /* <xs:attribute name="canNotUseMemoryManagementFunctions" type="xs:boolean" default="false"/> */
91         fmi1_xml_set_attr_boolean(context,fmi1_xml_elmID_Capabilities, fmi_attr_id_canNotUseMemoryManagementFunctions,0,
92                                  &md->capabilities->canNotUseMemoryManagementFunctions,0)
93         );
94     return 0;
95 }