FR_TYPE_VARIABLE_SIZE_DEF(_mid, _mid, _mid) \
FR_TYPE_NUMERIC_DEF(_mid, _mid, _end)
+/** Types which are internal, and should not be used for real data.
+ *
+ * - Boxes (can represent any type)
+ * - Void (opaque types)
+ * - Invalid values
+ */
+#define FR_TYPE_INTERNAL_DEF(_beg, _mid, _end) \
+ _beg(FR_TYPE_VALUE_BOX) \
+ _mid(FR_TYPE_VOID) \
+ _end(FR_TYPE_MAX)
+
/** Types which do not represent leaf values
*
* - Structural
* - Invalid values
*/
#define FR_TYPE_NON_LEAF_DEF(_beg, _mid, _end) \
- _beg(FR_TYPE_VALUE_BOX) \
- _mid(FR_TYPE_VOID) \
- _mid(FR_TYPE_NULL) \
- _mid(FR_TYPE_MAX) \
+ _beg(FR_TYPE_NULL) \
+ FR_TYPE_INTERNAL_DEF(_mid, _mid, _mid) \
FR_TYPE_STRUCTURAL_DEF(_mid, _mid, _end)
+
/** @} */
/** @name Macros that emit multiple case statements to group types
#define FR_TYPE_STRUCTURAL FR_TYPE_STRUCTURAL_DEF(CASE_BEG, CASE_MID, CASE_END)
#define FR_TYPE_LEAF FR_TYPE_LEAF_DEF(CASE_BEG, CASE_MID, CASE_END)
#define FR_TYPE_NON_LEAF FR_TYPE_NON_LEAF_DEF(CASE_BEG, CASE_MID, CASE_END)
+#define FR_TYPE_INTERNAL FR_TYPE_INTERNAL_DEF(CASE_BEG, CASE_MID, CASE_END)
/** @} */
/** @name Bool arrays that group types
/*
* Invalid types for casting (should have been caught earlier)
*/
- case FR_TYPE_VALUE_BOX:
- case FR_TYPE_STRUCTURAL:
- case FR_TYPE_NULL:
- case FR_TYPE_VOID:
- case FR_TYPE_MAX:
+ case FR_TYPE_NON_LEAF:
fr_strerror_printf("Invalid cast from %s to %s. Invalid destination type",
fr_type_to_str(src->type),
fr_type_to_str(dst_type));
case FR_TYPE_STRUCT:
case FR_TYPE_VSA:
case FR_TYPE_VENDOR:
- case FR_TYPE_VALUE_BOX:
- case FR_TYPE_VOID:
- case FR_TYPE_MAX:
+ case FR_TYPE_INTERNAL:
fr_strerror_printf("Cannot copy data type '%s'", fr_type_to_str(src->type));
return -1;
}
case FR_TYPE_STRUCT:
case FR_TYPE_VSA:
case FR_TYPE_VENDOR:
- case FR_TYPE_VALUE_BOX:
- case FR_TYPE_VOID:
- case FR_TYPE_MAX:
+ case FR_TYPE_INTERNAL:
fr_strerror_printf("Cannot escape data type '%s'", fr_type_to_str(vb->type));
return -1;