61 lines
2.6 KiB
C
Executable File
61 lines
2.6 KiB
C
Executable File
/*
|
|
FILE NAME: bits.h
|
|
|
|
TITLE: Include file of package for work with bits
|
|
|
|
DESCRIPTION:
|
|
This is header file contains macros and the ANSI C prototype
|
|
definitions for the package for work with bits and bit strings
|
|
and C++ class for work with bits and bit strings. A bit is
|
|
given by address (start address) of byte from which counting
|
|
bits starts and its displacement which is any non negative
|
|
number of bit from the start address. The most significant bit
|
|
of the start address byte has number 0. The bit string is
|
|
given by its first bit and its length in bits.
|
|
|
|
*/
|
|
|
|
#ifndef __BITS__
|
|
#define __BITS__
|
|
|
|
#include "ammunition_limits.h"
|
|
|
|
/* This macro value returns bit vlaue (0 or 1) with given bit
|
|
displacement (0, 1, ...). The macro has side effects! Value of
|
|
`bit_displacement' must be nonegative and can be greater than
|
|
CHAR_BIT. */
|
|
|
|
#define BIT(start_byte, bit_displacement)\
|
|
((((const char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
|
|
>> (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)) & 1)
|
|
|
|
|
|
/* This macro value sets up new value (must be `0' or `1') of a given
|
|
bit (bit displacement starts with 0). The macro has side effects!
|
|
Value of `bit_displacement' must be nonegative and can be greater
|
|
than CHAR_BIT. */
|
|
|
|
#define SET_BIT(start_byte, bit_displacement, bit)\
|
|
(((char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
|
|
= (((char *) (start_byte)) [(bit_displacement) / CHAR_BIT]\
|
|
& ~(1 << (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)))\
|
|
| ((bit) << (CHAR_BIT - 1 - (bit_displacement) % CHAR_BIT)))
|
|
|
|
int ammunition_is_zero_bit_string ( const void *start_byte,
|
|
int bit_displacement,
|
|
int bit_length );
|
|
void ammunition_bit_string_set ( void *start_byte, int bit_displacement,
|
|
int bit,
|
|
int bit_length );
|
|
void ammunition_bit_string_copy ( void *to, int to_bit_displacement,
|
|
const void *from, int from_bit_displacement,
|
|
int bit_length );
|
|
void ammunition_bit_string_move ( void *to, int to_bit_displacement,
|
|
const void *from, int from_bit_displacement,
|
|
int bit_length );
|
|
int ammunition_bit_string_comparison ( const void *str1, int bit_displacement1,
|
|
const void *str2, int bit_displacement2,
|
|
int bit_length );
|
|
|
|
#endif /* #ifndef __BITS__ */
|