/* Copyright 1997 Acorn Computers Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /***************************************************/ /* File : Bitfields.h */ /* Purpose: A few macros and definitions to handle */ /* large bitfields (e.g. 256 bits), */ /* created originally for recording used */ /* font handles. */ /* Author : A.D.Hodgkinson, adapted from the */ /* TCPIPLibs source sys/types.h. */ /* History: 10-Mar-97: Created */ /***************************************************/ #define Bits_In_A_Byte 8 #define Bitfield_Size 256 typedef long bitfield_mask; #define Number_Of_Bits (sizeof(bitfield_mask) * Bits_In_A_Byte) #define How_Many_Bits(x,y) (((x) + ((y) - 1)) / (y)) typedef struct bitfield_set { bitfield_mask bitfield_bits[How_Many_Bits(Bitfield_Size, Number_Of_Bits)]; } bitfield_set; #define Bitfield_Set_Bit(p,n) ((p)->bitfield_bits[(n) / Number_Of_Bits] |= (1l << ((n) % Number_Of_Bits))) #define Bitfield_Clear_Bit(p,n) ((p)->bitfield_bits[(n) / Number_Of_Bits] &= ~(1l << ((n) % Number_Of_Bits))) #define Bitfield_Is_Set(p,n) ((p)->bitfield_bits[(n) / Number_Of_Bits] & (1l << ((n) % Number_Of_Bits)))