Move type operations to another structure
Every type has free, print, check_constraints, ber_decoder, der_encoder,
xer_decoder, xer_encoder, uper_decoder, uper_encoder and outmost_tag
operations. We move them out to a separate structure asn_TYPE_operation_t.
Combined with previous logic simplification, these operations are based
on ASN.1 basic types, constructed types and string types. So we can
reduce the space occupied by asn_TYPE_descriptor_t variables.
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types
index a13c18b..85146a2 100644
--- a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types
@@ -33,17 +33,8 @@
asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited = {
"CN-IntegerUnlimited",
"CN-IntegerUnlimited",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
INTEGER_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_CN_IntegerUnlimited_tags_1,
sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
/sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
@@ -97,8 +88,7 @@
}
/* Replace with underlying type checker */
- td->check_constraints = asn_DEF_INTEGER.check_constraints;
- return td->check_constraints(td, sptr, ctfailcb, app_key);
+ return td->op->check_constraints(td, sptr, ctfailcb, app_key);
}
/*
@@ -114,17 +104,8 @@
asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax = {
"CN-IntegerMinMax",
"CN-IntegerMinMax",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
CN_IntegerMinMax_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_CN_IntegerMinMax_tags_1,
sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
/sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
@@ -203,17 +184,8 @@
asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow = {
"CN-IntegerMinLow",
"CN-IntegerMinLow",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
CN_IntegerMinLow_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_CN_IntegerMinLow_tags_1,
sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
/sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
@@ -292,17 +264,8 @@
asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh = {
"NO-IntegerMinHigh",
"NO-IntegerMinHigh",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
NO_IntegerMinHigh_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_NO_IntegerMinHigh_tags_1,
sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
/sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
@@ -380,17 +343,8 @@
asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh = {
"NO-IntegerLowHigh",
"NO-IntegerLowHigh",
- NativeInteger_free,
- NativeInteger_print,
- NativeInteger_compare,
+ &asn_OP_NativeInteger,
NO_IntegerLowHigh_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_NO_IntegerLowHigh_tags_1,
sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
/sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
@@ -469,17 +423,8 @@
asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax = {
"CN-IntegerLowMax",
"CN-IntegerLowMax",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
CN_IntegerLowMax_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_CN_IntegerLowMax_tags_1,
sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
/sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
@@ -558,17 +503,8 @@
asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax = {
"NO-IntegerHighMax",
"NO-IntegerHighMax",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
NO_IntegerHighMax_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_NO_IntegerHighMax_tags_1,
sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
/sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
@@ -647,17 +583,8 @@
asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax = {
"NO-IntegerLowestMax",
"NO-IntegerLowestMax",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
NO_IntegerLowestMax_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_NO_IntegerLowestMax_tags_1,
sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
/sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
@@ -735,17 +662,8 @@
asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange = {
"NO-IntegerOutRange",
"NO-IntegerOutRange",
- NativeInteger_free,
- NativeInteger_print,
- NativeInteger_compare,
+ &asn_OP_NativeInteger,
NO_IntegerOutRange_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_NO_IntegerOutRange_tags_1,
sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
/sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
@@ -823,17 +741,8 @@
asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue = {
"NO-IntegerOutValue",
"NO-IntegerOutValue",
- NativeInteger_free,
- NativeInteger_print,
- NativeInteger_compare,
+ &asn_OP_NativeInteger,
NO_IntegerOutValue_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_NO_IntegerOutValue_tags_1,
sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
/sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
@@ -906,17 +815,8 @@
asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1 = {
"OK-IntegerInRange1",
"OK-IntegerInRange1",
- NativeInteger_free,
- NativeInteger_print,
- NativeInteger_compare,
+ &asn_OP_NativeInteger,
OK_IntegerInRange1_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_OK_IntegerInRange1_tags_1,
sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
/sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
@@ -989,17 +889,8 @@
asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2 = {
"OK-IntegerInRange2",
"OK-IntegerInRange2",
- NativeInteger_free,
- NativeInteger_print,
- NativeInteger_compare,
+ &asn_OP_NativeInteger,
OK_IntegerInRange2_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_OK_IntegerInRange2_tags_1,
sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
/sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
@@ -1072,17 +963,8 @@
asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3 = {
"OK-IntegerInRange3",
"OK-IntegerInRange3",
- NativeInteger_free,
- NativeInteger_print,
- NativeInteger_compare,
+ &asn_OP_NativeInteger,
OK_IntegerInRange3_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_OK_IntegerInRange3_tags_1,
sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
/sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
@@ -1155,17 +1037,8 @@
asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4 = {
"OK-IntegerInRange4",
"OK-IntegerInRange4",
- NativeInteger_free,
- NativeInteger_print,
- NativeInteger_compare,
+ &asn_OP_NativeInteger,
OK_IntegerInRange4_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_OK_IntegerInRange4_tags_1,
sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
/sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
@@ -1244,17 +1117,8 @@
asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5 = {
"OK-IntegerInRange5",
"OK-IntegerInRange5",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
OK_IntegerInRange5_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_OK_IntegerInRange5_tags_1,
sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
/sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
@@ -1323,17 +1187,8 @@
asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6 = {
"NO-IntegerInRange6",
"NO-IntegerInRange6",
- NativeInteger_free,
- NativeInteger_print,
- NativeInteger_compare,
+ &asn_OP_NativeInteger,
NO_IntegerInRange6_constraint,
- NativeInteger_decode_ber,
- NativeInteger_encode_der,
- NativeInteger_decode_xer,
- NativeInteger_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_NO_IntegerInRange6_tags_1,
sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
/sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
@@ -1388,17 +1243,8 @@
asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1 = {
"CN-IntegerEnumerated1",
"CN-IntegerEnumerated1",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
INTEGER_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_CN_IntegerEnumerated1_tags_1,
sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
/sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
@@ -1453,17 +1299,8 @@
asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2 = {
"NO-IntegerEnumerated2",
"NO-IntegerEnumerated2",
- INTEGER_free,
- INTEGER_print,
- INTEGER_compare,
+ &asn_OP_INTEGER,
INTEGER_constraint,
- INTEGER_decode_ber,
- INTEGER_encode_der,
- INTEGER_decode_xer,
- INTEGER_encode_xer,
- 0, 0, /* No OER support, use "-gen-OER" to enable */
- 0, 0, /* No PER support, use "-gen-PER" to enable */
- 0, /* Use generic outmost tag fetcher */
asn_DEF_NO_IntegerEnumerated2_tags_1,
sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
/sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */