/* 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, created originally */ /* for recording used font handles. */ /* */ /* Author : A.D.Hodgkinson, adapted from the */ /* TCPIPLibs source sys/types.h */ /* */ /* History: 10-Mar-97: Created. */ /* 16-Apr-97: Modified to vary the size */ /* of the bitfield according */ /* to Limits_OS_FontHandles. */ /***************************************************/ #include "Limits.h" #define Bits_In_A_Byte 8 #define Bitfield_Size Limits_OS_FontHandles 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)))