Introduce side_struct_field_sizeof_bit() macro
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 2 Nov 2022 00:27:14 +0000 (20:27 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 2 Nov 2022 00:27:14 +0000 (20:27 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/side/macros.h
src/test.c

index 2f2181252eb2ffa660210a548b86dc43b81f4fda..892a21a2ca25e5aec206fb530873ae973cc83340 100644 (file)
@@ -7,6 +7,7 @@
 #define _SIDE_MACROS_H
 
 #include <stddef.h>
+#include <limits.h>
 
 /* Helper macros */
 
@@ -43,6 +44,9 @@
                (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)
index 0c69fe98a8b0452191b36292d09d355069badef5..0d9adbfce49bc578d5f446ca78ef9e41d29fa763 100644 (file)
@@ -1494,9 +1494,14 @@ struct test {
 
 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()
This page took 0.040707 seconds and 4 git commands to generate.