Repository: celix
Updated Branches:
refs/heads/feature/CELIX-237_rsa-ffi 4c4a5e9bd - 62ede189c
CELIX-237: Added support for argument meta info (output types) and added use of
this info in the export_registration
Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/62ede189
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/62ede189
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/62ede189
Branch: refs/heads/feature/CELIX-237_rsa-ffi
Commit: 62ede189c0e5cbc32b1a29256f3c109e8acef02c
Parents: 4c4a5e9
Author: Pepijn Noltes pepijnnol...@gmail.com
Authored: Wed Aug 12 18:16:08 2015 +0200
Committer: Pepijn Noltes pepijnnol...@gmail.com
Committed: Wed Aug 12 18:16:08 2015 +0200
--
...apache.celix.calc.api.Calculator2.descriptor | 6 +-
.../dynamic_function_interface/dyn_function.c | 114 +--
.../dynamic_function_interface/dyn_function.h | 15 ++-
.../dynamic_function_interface/dyn_type.c | 13 ++-
.../tst/dyn_function_tests.cpp | 55 -
.../private/src/export_registration_dfi.c | 81 -
6 files changed, 238 insertions(+), 46 deletions(-)
--
http://git-wip-us.apache.org/repos/asf/celix/blob/62ede189/remote_services/examples/calculator_service/public/include/org.apache.celix.calc.api.Calculator2.descriptor
--
diff --git
a/remote_services/examples/calculator_service/public/include/org.apache.celix.calc.api.Calculator2.descriptor
b/remote_services/examples/calculator_service/public/include/org.apache.celix.calc.api.Calculator2.descriptor
index 711df0b..52e3322 100644
---
a/remote_services/examples/calculator_service/public/include/org.apache.celix.calc.api.Calculator2.descriptor
+++
b/remote_services/examples/calculator_service/public/include/org.apache.celix.calc.api.Calculator2.descriptor
@@ -6,6 +6,6 @@ version=1.0.0
classname=org.example.Calculator
:types
:methods
-add(DD)D=add(PDD*D)N
-sub(DD)D=sub(PDD*D)N
-sqrt(D)D=sqrt(PD*D)N
+add(DD)D=add(#PDD^*D)N
+sub(DD)D=sub(#PDD^*D)N
+sqrt(D)D=sqrt(#PD^*D)N
http://git-wip-us.apache.org/repos/asf/celix/blob/62ede189/remote_services/remote_service_admin_dfi/dynamic_function_interface/dyn_function.c
--
diff --git
a/remote_services/remote_service_admin_dfi/dynamic_function_interface/dyn_function.c
b/remote_services/remote_service_admin_dfi/dynamic_function_interface/dyn_function.c
index 0e12791..8880bc7 100644
---
a/remote_services/remote_service_admin_dfi/dynamic_function_interface/dyn_function.c
+++
b/remote_services/remote_service_admin_dfi/dynamic_function_interface/dyn_function.c
@@ -27,6 +27,7 @@ typedef struct _dyn_function_argument_type
dyn_function_argument_type;
struct _dyn_function_argument_type {
int index;
char *name;
+int argumentType;
dyn_type *type;
TAILQ_ENTRY(_dyn_function_argument_type) entries;
};
@@ -40,7 +41,11 @@ DFI_SETUP_LOG(dynFunction)
static int dynFunction_initCif(dyn_function_type *dynFunc);
static int dynFunction_parseDescriptor(dyn_function_type *dynFunc, FILE
*descriptor);
-static void dynFunction_ffiBind(ffi_cif *cif, void *ret, void *args[], void
*userData);
+static void dynFunction_ffiBind(ffi_cif *cif, void *ret, void *args[], void
*userData);
+
+static int dynFunction_checkArgument(dyn_function_argument_type *argument);
+
+static void dynFunction_parseArgMeta(FILE *descriptor, int *meta);
int dynFunction_parse(FILE *descriptor, struct types_head *refTypes,
dyn_function_type **out) {
int status = OK;
@@ -67,7 +72,12 @@ int dynFunction_parse(FILE *descriptor, struct types_head
*refTypes, dyn_functio
if (status == 0) {
*out = dynFunc;
-}
+}else {
+if (dynFunc != NULL) {
+dynFunction_destroy(dynFunc);
+}
+
+}
return status;
}
@@ -106,22 +116,50 @@ static int dynFunction_parseDescriptor(dyn_function_type
*dynFunc, FILE *descrip
int nextChar = fgetc(descriptor);
int index = 0;
dyn_type *type = NULL;
+int argMetaInfo = DYN_FUNCTION_ARG_META_STD_TYPE;
+char argName[32];
while (nextChar != ')' status == 0) {
-type = NULL;
ungetc(nextChar, descriptor);
-status = dynType_parse(descriptor, NULL, dynFunc-refTypes, type);
+type = NULL;
+
+dynFunction_parseArgMeta(descriptor, argMetaInfo);
+dyn_function_argument_type *arg = NULL;
+
+status = dynType_parse(descriptor, NULL, dynFunc-refTypes, type);
if (status == 0) {
-dyn_function_argument_type *arg = calloc(1, sizeof(*arg));
-arg-index = index++;
-arg-type = type;
-arg-name = NULL; //TODO
+