86 lines
2.3 KiB
C
86 lines
2.3 KiB
C
/*++
|
|
|
|
Copyright (c) 1997-2000 Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
aligned.h
|
|
|
|
Abstract:
|
|
|
|
Various macros for validating alignment.
|
|
|
|
Author:
|
|
|
|
Dale Sather (DaleSat) 24-Mar-1997
|
|
|
|
--*/
|
|
|
|
#ifndef _ALIGNED_
|
|
#define _ALIGNED_
|
|
|
|
|
|
|
|
|
|
#define SIZEOF_FIELD(structure,field) \
|
|
sizeof(((structure *) 0)->field)
|
|
|
|
#define OFFSETOF_FIELD(structure,field) \
|
|
((ULONG)&(((structure *) 0)->field))
|
|
|
|
|
|
|
|
|
|
#define VALID_QWORD_ALIGNMENT(base) \
|
|
((ULONG)(base) % sizeof(ULONGLONG) == 0)
|
|
|
|
#define VALID_DWORD_ALIGNMENT(base) \
|
|
((ULONG)(base) % sizeof(ULONG) == 0)
|
|
|
|
#define VALID_WORD_ALIGNMENT(base) \
|
|
((ULONG)(base) % sizeof(USHORT) == 0)
|
|
|
|
#define VALID_ALIGNMENT(size,base) \
|
|
( ((size) >= sizeof(ULONGLONG)) \
|
|
? VALID_QWORD_ALIGNMENT(base) \
|
|
: ( ((size) >= sizeof(ULONG)) \
|
|
? VALID_DWORD_ALIGNMENT(base) \
|
|
: ( ((size) >= sizeof(USHORT)) \
|
|
? VALID_WORD_ALIGNMENT(base) \
|
|
: TRUE \
|
|
) \
|
|
) \
|
|
)
|
|
|
|
#define VALID_FIELD_ALIGNMENT(structure,field) \
|
|
VALID_ALIGNMENT( \
|
|
SIZEOF_FIELD(structure,field), \
|
|
OFFSETOF_FIELD(structure,field) \
|
|
)
|
|
|
|
|
|
|
|
|
|
#define ASSERT_VALID_QWORD_ALIGNMENT(base) \
|
|
ASSERT(VALID_QWORD_ALIGNMENT(base))
|
|
|
|
#define ASSERT_VALID_DWORD_ALIGNMENT(base) \
|
|
ASSERT(VALID_DWORD_ALIGNMENT(base))
|
|
|
|
#define ASSERT_VALID_WORD_ALIGNMENT(base) \
|
|
ASSERT(VALID_WORD_ALIGNMENT(base))
|
|
|
|
#define ASSERT_VALID_ALIGNMENT(size,base) \
|
|
ASSERT(VALID_ALIGNMENT(size,base))
|
|
|
|
#define ASSERT_VALID_FIELD_ALIGNMENT(structure,field) \
|
|
ASSERT(VALID_FIELD_ALIGNMENT(structure,field))
|
|
|
|
#define ASSERT_VALID_MEMBER_ALIGNMENT(member) \
|
|
ASSERT(VALID_ALIGNMENT(sizeof(member),&(member)))
|
|
|
|
|
|
|
|
|
|
#endif // _ALIGNED_
|