選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

elog-internal.h 903B

1234567891011121314151617181920212223242526272829303132
  1. #ifndef __ELOG_INTERNAL_H__
  2. #define __ELOG_INTERNAL_H__
  3. #include <stddef.h>
  4. #include <stdint.h>
  5. #include <limits.h>
  6. #define MSGPTR_LEN_BITS (CHAR_BIT / 2)
  7. #define MSGPTR_LEN_BITS_OFFSET ((sizeof(msgptr_t) * CHAR_BIT) - MSGPTR_LEN_BITS) // << (32 - 4): 高4位(参数最多1+14个)用来存长度
  8. #define MSGPTR_MSG_MASK ((1 << MSGPTR_LEN_BITS_OFFSET) - 1)
  9. #define MSGPTR_LEN_MASK ((1 << MSGPTR_LEN_BITS) - 1)
  10. #define MSGPTR_LEN(v) (((v) >> MSGPTR_LEN_BITS_OFFSET) & MSGPTR_LEN_MASK)
  11. #define MSGPTR_MSG(v) ((v) & MSGPTR_MSG_MASK)
  12. #define MSGPTR_MAKE(l, p) (((p) & MSGPTR_MSG_MASK) | (((l) & MSGPTR_LEN_MASK) << MSGPTR_LEN_BITS_OFFSET))
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16. typedef uint32_t msgptr_t;
  17. typedef uint32_t msgparam_t;
  18. typedef struct {
  19. msgptr_t msgid;
  20. msgparam_t data[0];
  21. } __attribute__((__packed__)) elog_entry_t;
  22. #ifdef __cplusplus
  23. }
  24. #endif
  25. #endif /* __ELOG_INTERNAL_H__ */