1/*
2 * Copyright 2015, Haiku, Inc. All RightsReserved.
3 * Copyright 2002, Thomas Kurschel. All rights reserved.
4 * Distributed under the terms of the MIT License.
5 */
6#ifndef LENDIAN_BITFIELD_H
7#define LENDIAN_BITFIELD_H
8
9
10#include <ByteOrder.h>
11
12
13#if B_HOST_IS_BENDIAN
14
15#define B_LBITFIELD8_2(b1,b2)						uint8 b2,b1
16#define B_LBITFIELD8_3(b1,b2,b3)					uint8 b3,b2,b1
17#define B_LBITFIELD8_4(b1,b2,b3,b4)					uint8 b4,b3,b2,b1
18#define B_LBITFIELD8_5(b1,b2,b3,b4,b5)				uint8 b5,b4,b3,b2,b1
19#define B_LBITFIELD8_6(b1,b2,b3,b4,b5,b6)			uint8 b6,b5,b4,b3,b2,b1
20#define B_LBITFIELD8_7(b1,b2,b3,b4,b5,b6,b7)		uint8 b7,b6,b5,b4,b3,b2,b1
21#define B_LBITFIELD8_8(b1,b2,b3,b4,b5,b6,b7,b8)		uint8 b8,b7,b6,b5,b4,b3,b2,b1
22
23
24#define B_LBITFIELD16_2(b1,b2)														uint16 b2,b1
25#define B_LBITFIELD16_3(b1,b2,b3)													uint16 b3,b2,b1
26#define B_LBITFIELD16_4(b1,b2,b3,b4)												uint16 b4,b3,b2,b1
27#define B_LBITFIELD16_5(b1,b2,b3,b4,b5)												uint16 b5,b4,b3,b2,b1
28#define B_LBITFIELD16_6(b1,b2,b3,b4,b5,b6)											uint16 b6,b5,b4,b3,b2,b1
29#define B_LBITFIELD16_7(b1,b2,b3,b4,b5,b6,b7)								 		uint16 b7,b6,b5,b4,b3,b2,b1
30#define B_LBITFIELD16_8(b1,b2,b3,b4,b5,b6,b7,b8)									uint16 b8,b7,b6,b5,b4,b3,b2,b1
31#define B_LBITFIELD16_9(b1,b2,b3,b4,b5,b6,b7,b8,b9)									uint16 b9,b8,b7,b6,b5,b4,b3,b2,b1
32#define B_LBITFIELD16_10(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10)							uint16 b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
33#define B_LBITFIELD16_11(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11)						uint16 b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
34#define B_LBITFIELD16_12(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12)					uint16 b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
35#define B_LBITFIELD16_13(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13)				uint16 b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
36#define B_LBITFIELD16_14(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14)			uint16 b14,b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
37#define B_LBITFIELD16_15(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15)		uint16 b15,b14,b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
38#define B_LBITFIELD16_16(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16)	uint16 b16,b15,b14,b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
39
40#define B_LBITFIELD32_2(b1,b2)														uint32 b2,b1
41#define B_LBITFIELD32_3(b1,b2,b3)													uint32 b3,b2,b1
42#define B_LBITFIELD32_4(b1,b2,b3,b4)												uint32 b4,b3,b2,b1
43#define B_LBITFIELD32_5(b1,b2,b3,b4,b5)												uint32 b5,b4,b3,b2,b1
44#define B_LBITFIELD32_6(b1,b2,b3,b4,b5,b6)											uint32 b6,b5,b4,b3,b2,b1
45#define B_LBITFIELD32_7(b1,b2,b3,b4,b5,b6,b7)							 			uint32 b7,b6,b5,b4,b3,b2,b1
46#define B_LBITFIELD32_8(b1,b2,b3,b4,b5,b6,b7,b8)									uint32 b8,b7,b6,b5,b4,b3,b2,b1
47#define B_LBITFIELD32_9(b1,b2,b3,b4,b5,b6,b7,b8,b9)									uint32 b9,b8,b7,b6,b5,b4,b3,b2,b1
48#define B_LBITFIELD32_10(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10)							uint32 b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
49#define B_LBITFIELD32_11(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11)						uint32 b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
50#define B_LBITFIELD32_12(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12)					uint32 b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
51#define B_LBITFIELD32_13(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13)				uint32 b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
52#define B_LBITFIELD32_14(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14)			uint32 b14,b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
53#define B_LBITFIELD32_15(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15)		uint32 b15,b14,b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
54#define B_LBITFIELD32_16(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16)	uint32 b16,b15,b14,b13,b12,b11,b10,b9,b8,b7,b6,b5,b4,b3,b2,b1
55
56#elif B_HOST_IS_LENDIAN
57
58#define B_LBITFIELD8_2(b1,b2)						uint8 b1,b2
59#define B_LBITFIELD8_3(b1,b2,b3)					uint8 b1,b2,b3
60#define B_LBITFIELD8_4(b1,b2,b3,b4)					uint8 b1,b2,b3,b4
61#define B_LBITFIELD8_5(b1,b2,b3,b4,b5)				uint8 b1,b2,b3,b4,b5
62#define B_LBITFIELD8_6(b1,b2,b3,b4,b5,b6)			uint8 b1,b2,b3,b4,b5,b6
63#define B_LBITFIELD8_7(b1,b2,b3,b4,b5,b6,b7)		uint8 b1,b2,b3,b4,b5,b6,b7
64#define B_LBITFIELD8_8(b1,b2,b3,b4,b5,b6,b7,b8)		uint8 b1,b2,b3,b4,b5,b6,b7,b8
65
66#define B_LBITFIELD16_2(b1,b2)														uint16 b1,b2
67#define B_LBITFIELD16_3(b1,b2,b3)													uint16 b1,b2,b3
68#define B_LBITFIELD16_4(b1,b2,b3,b4)												uint16 b1,b2,b3,b4
69#define B_LBITFIELD16_5(b1,b2,b3,b4,b5)												uint16 b1,b2,b3,b4,b5
70#define B_LBITFIELD16_6(b1,b2,b3,b4,b5,b6)											uint16 b1,b2,b3,b4,b5,b6
71#define B_LBITFIELD16_7(b1,b2,b3,b4,b5,b6,b7)										uint16 b1,b2,b3,b4,b5,b6,b7
72#define B_LBITFIELD16_8(b1,b2,b3,b4,b5,b6,b7,b8)									uint16 b1,b2,b3,b4,b5,b6,b7,b8
73#define B_LBITFIELD16_9(b1,b2,b3,b4,b5,b6,b7,b8,b9) 								uint16 b1,b2,b3,b4,b5,b6,b7,b8,b9
74#define B_LBITFIELD16_10(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10)							uint16 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10
75#define B_LBITFIELD16_11(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11)						uint16 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11
76#define B_LBITFIELD16_12(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12)					uint16 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12
77#define B_LBITFIELD16_13(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13)				uint16 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13
78#define B_LBITFIELD16_14(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14)			uint16 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14
79#define B_LBITFIELD16_15(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15)		uint16 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15
80#define B_LBITFIELD16_16(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16)	uint16 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16
81
82#define B_LBITFIELD32_2(b1,b2)														uint32 b1,b2
83#define B_LBITFIELD32_3(b1,b2,b3)													uint32 b1,b2,b3
84#define B_LBITFIELD32_4(b1,b2,b3,b4)												uint32 b1,b2,b3,b4
85#define B_LBITFIELD32_5(b1,b2,b3,b4,b5)												uint32 b1,b2,b3,b4,b5
86#define B_LBITFIELD32_6(b1,b2,b3,b4,b5,b6)											uint32 b1,b2,b3,b4,b5,b6
87#define B_LBITFIELD32_7(b1,b2,b3,b4,b5,b6,b7)										uint32 b1,b2,b3,b4,b5,b6,b7
88#define B_LBITFIELD32_8(b1,b2,b3,b4,b5,b6,b7,b8)									uint32 b1,b2,b3,b4,b5,b6,b7,b8
89#define B_LBITFIELD32_9(b1,b2,b3,b4,b5,b6,b7,b8,b9) 								uint32 b1,b2,b3,b4,b5,b6,b7,b8,b9
90#define B_LBITFIELD32_10(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10)							uint32 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10
91#define B_LBITFIELD32_11(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11)						uint32 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11
92#define B_LBITFIELD32_12(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12)					uint32 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12
93#define B_LBITFIELD32_13(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13)				uint32 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13
94#define B_LBITFIELD32_14(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14)			uint32 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14
95#define B_LBITFIELD32_15(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15)		uint32 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15
96#define B_LBITFIELD32_16(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16)	uint32 b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16
97
98#else
99#	error "Unknown host endianness"
100#endif
101
102#endif /* LENDIAN_BITFIELD_H */
103