#define _SIDE_MACROS_H
#include <stddef.h>
+#include <limits.h>
/* Helper macros */
(type *)((char *)__ptr - offsetof(type, member)); \
})
+#define side_struct_field_sizeof_bit(_struct, _field) \
+ (sizeof(((_struct * )NULL)->_field) * CHAR_BIT)
+
#if defined(__SIZEOF_LONG__)
#define SIDE_BITS_PER_LONG (__SIZEOF_LONG__ * 8)
#elif defined(_LP64)
static side_define_struct_sg(mystructsgdef,
side_field_sg_list(
- side_field_sg_unsigned_integer("a", offsetof(struct test, a), 32, 0, 32, side_attr_list()),
- side_field_sg_signed_integer("d", offsetof(struct test, d), 32, 0, 32, side_attr_list()),
- side_field_sg_unsigned_integer("e", offsetof(struct test, e), 16, 8, 4,
+ side_field_sg_unsigned_integer("a", offsetof(struct test, a),
+ side_struct_field_sizeof_bit(struct test, a), 0,
+ side_struct_field_sizeof_bit(struct test, a), side_attr_list()),
+ side_field_sg_signed_integer("d", offsetof(struct test, d),
+ side_struct_field_sizeof_bit(struct test, d), 0,
+ side_struct_field_sizeof_bit(struct test, d), side_attr_list()),
+ side_field_sg_unsigned_integer("e", offsetof(struct test, e),
+ side_struct_field_sizeof_bit(struct test, e), 8, 4,
side_attr_list(side_attr("std.integer.base", side_attr_u8(16)))),
),
side_attr_list()