further runtime support for information object classes
diff --git a/skeletons/constr_SEQUENCE_oer.c b/skeletons/constr_SEQUENCE_oer.c
index 84b0db9..7f162ae 100644
--- a/skeletons/constr_SEQUENCE_oer.c
+++ b/skeletons/constr_SEQUENCE_oer.c
@@ -7,6 +7,7 @@
#include <asn_internal.h>
#include <constr_SEQUENCE.h>
+#include <OPEN_TYPE.h>
#include <errno.h>
/*
@@ -150,8 +151,6 @@
for(edx = (ctx->step >> 1); edx < td->elements_count;
edx++, ctx->step = (ctx->step & ~1) + 2) {
asn_TYPE_member_t *elm = &td->elements[edx];
- void *memb_tmpptr; /* Temporary reference. */
- void **memb_ptr2; /* Pointer to a pointer to a memmber */
ASN_DEBUG("Decoding %s->%s", td->name, elm->name);
@@ -188,37 +187,20 @@
*/
ctx->step |= 1; /* Confirm entering next microphase */
microphase2_decode_continues:
- if(elm->flags & ATF_POINTER) {
- /* Member is a pointer to another structure */
- memb_ptr2 = (void **)((char *)st + elm->memb_offset);
- } else {
- memb_tmpptr = (char *)st + elm->memb_offset;
- memb_ptr2 = &memb_tmpptr; /* Ensure this & remains in scope! */
- }
-
if((elm->flags & ATF_OPEN_TYPE) && elm->type_selector) {
- asn_TYPE_descriptor_t *et = elm->type_selector(td, st);
- ssize_t ot_ret;
- if(!et) {
- ASN__DECODE_FAILED;
- }
- ot_ret = oer_open_type_get(opt_codec_ctx, et, NULL, memb_ptr2,
- ptr, size);
- switch(ot_ret) {
- case -1:
- rval.code = RC_FAIL;
- rval.consumed = 0;
- break;
- case 0:
- rval.code = RC_WMORE;
- rval.consumed = 1;
- break;
- default:
- rval.code = RC_OK;
- rval.consumed = ot_ret;
- break;
- }
+ rval = OPEN_TYPE_oer_get(opt_codec_ctx, td, st, elm, ptr, size);
} else {
+ void *memb_tmpptr; /* Temporary reference. */
+ void **memb_ptr2; /* Pointer to a pointer to a memmber */
+
+ if(elm->flags & ATF_POINTER) {
+ /* Member is a pointer to another structure */
+ memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+ } else {
+ memb_tmpptr = (char *)st + elm->memb_offset;
+ memb_ptr2 = &memb_tmpptr; /* Ensure remains in scope! */
+ }
+
rval = elm->type->oer_decoder(opt_codec_ctx, elm->type,
elm->oer_constraints, memb_ptr2,
ptr, size);