(cls, t, indent="", offset=0, sizeinfo=False)
| 376 | |
| 377 | @classmethod |
| 378 | def print_ct_map(cls, t, indent="", offset=0, sizeinfo=False): |
| 379 | map_lines = [] |
| 380 | try: |
| 381 | for field_name, field_type in t._fields_: |
| 382 | is_structured = (issubclass(field_type, ct.Structure) or |
| 383 | issubclass(field_type, ct.Union)) |
| 384 | field_type_name = cls.get_ct_name(field_type) |
| 385 | field_offset = getattr(t, field_name).offset |
| 386 | field_size = ct.sizeof(field_type) |
| 387 | sizedesc = cls.format_size_info(offset + field_offset, |
| 388 | field_size, sizeinfo) |
| 389 | if is_structured: |
| 390 | map_lines.append("%s%s%s {" % (indent, sizedesc, field_type_name)) |
| 391 | map_lines += cls.print_ct_map(field_type, |
| 392 | indent + " ", |
| 393 | offset + field_offset) |
| 394 | map_lines.append("%s} %s;" % (indent, field_name)) |
| 395 | else: |
| 396 | map_lines.append("%s%s%s %s;" % (indent, sizedesc, |
| 397 | field_type_name, |
| 398 | field_name)) |
| 399 | except ValueError: |
| 400 | # is a bit field |
| 401 | offset_bits = 0 |
| 402 | for field in t._fields_: |
| 403 | if len(field) == 3: |
| 404 | field_name, field_type, field_bits = field |
| 405 | field_type_name = cls.get_ct_name(field_type) |
| 406 | sizedesc = cls.format_size_info(offset, offset_bits, |
| 407 | sizeinfo, field_bits) |
| 408 | map_lines.append("%s%s%s %s:%d;" % (indent, sizedesc, |
| 409 | field_type_name, |
| 410 | field_name, |
| 411 | field_bits)) |
| 412 | else: |
| 413 | # end of previous bit field |
| 414 | field_name, field_type = field |
| 415 | field_type_name = cls.get_ct_name(field_type) |
| 416 | field_offset = getattr(t, field_name).offset |
| 417 | field_size = ct.sizeof(field_type) |
| 418 | field_bits = 0 |
| 419 | offset_bits = 0 |
| 420 | sizedesc = cls.format_size_info(offset + field_offset, |
| 421 | field_size, sizeinfo) |
| 422 | map_lines.append("%s%s%s %s;" % (indent, sizedesc, |
| 423 | field_type_name, |
| 424 | field_name)) |
| 425 | offset += field_offset |
| 426 | offset_bits += field_bits |
| 427 | return map_lines |
| 428 | |
| 429 | @classmethod |
| 430 | def print_map_ctype(cls, t, field_name, sizeinfo): |
no test coverage detected