www.pudn.com > sfalic-03-src.rar.rar > bigendian.h
#ifndef __BIGENDIAN_H #define __BIGENDIAN_H /* funkcje zalezne od Endianness maszyny; sprawdzenie ustawien kompilacji i poprawnosci zalozen implementacyjnych */ /* funkcje pomocnicze do operacji na liczbach Big Endian do 32b */ /* funkcje operujace na plikach BEread.../BEwrite... potencjalnie wolne */ /* funkcje operujace wierszach pikseli sprawdzaja endianness maszyny, szybkie */ /* makro BE_MACHINE mozna (nie musi sie) zdefiniowac na komputerach BigEndian */ /* makra BE_MACHINE _nie wolno_ definiowac na maszynach LittleEndian */ /* makro BE_STORE_WORD warunkowe od makra BE_MACHINE, po jego zdefiniowaniu bedzie szybsze */ #include "cdftypes.h" #include/* sprawdzenie ustawien kompilacji i poprawnosci zalozen implementacyjnych */ /* dotyczy calego kompresora, nie tylko tego modulu */ /* zwraca 0-ok, >=1 blad */ int CheckAssumptions(); /* makro BE_MACHINE mozna (nie musi sie) zdefiniowac na komputerach BigEndian */ /* makra BE_MACHINE _nie wolno_ definiowac na maszynach LittleEndian, sprawdzane przez assert w BEmachine() */ /* #define BE_MACHINE /**/ /* zapisz pod adres adr slowo towrite w kolejnosci BigEndian */ /* adr moze byc dowolnym wyrazeniem typu wskaznikowego */ /* towrite powinno byc 32-bitowa zmienna lub stala */ /* makro BE_STORE_WORD warunkowe od makra BE_MACHINE, po jego zdefiniowaniu bedzie szybsze */ #ifdef BE_MACHINE #define BE_STORE_WORD(adr, towrite) \ *(unsigned int *)(adr)=(towrite) #define BE_LOAD_WORD(adr, toread) \ (toread)=*(unsigned int *)(adr) #else #define BE_STORE_WORD(adr, towrite) \ { \ BYTE * const bp=(BYTE *)(adr); \ bp[0]=(BYTE)((towrite)>>24); \ bp[1]=(BYTE)((towrite)>>16); \ bp[2]=(BYTE)((towrite)>>8); \ bp[3]=(BYTE)(towrite); \ } #define BE_LOAD_WORD(adr, toread) \ { \ const BYTE * const bp=(BYTE *)(adr); \ (toread)= (((unsigned int)bp[0])<<24) \ | (((unsigned int)bp[1])<<16) \ | (((unsigned int)bp[2])<<8) \ | ((unsigned int)bp[3]); \ } #endif /* zwroc endianness maszyny 1-BigEndian, 0-Little */ int BEmachine(); /* endian-aware*/ /* zamienia wczytane z pliku piksele BigEndian rawBYTESpp Bajtow/piksel (1 lub 2), */ /* na ActualEndian sizeof(PIXEL) Bajtow/piksel */ /* width- liczba pikseli */ void BErawrowtopixelrow(const BYTE * const filerow, PIXEL * const currow, const int width, const int rawBYTESpp); /* operacja odwrotna do BErawrowtopixelrow*/ void BEpixelrowtorawrow(BYTE * const filerow, const PIXEL * const currow, const int width, const int rawBYTESpp); /* zapisz do pliku liczbe 16-bitowa w formacie BigEndian*/ /* zwroc EOF jak blad */ int BEwrite2Bytes(int val, FILE *f); /* odczytaj z pliku liczbe 16-bitowa w formacie BigEndian*/ int BEread2Bytes(FILE *f); /* zapisz do pliku liczbe 32-bitowa w formacie BigEndian*/ /* zwroc EOF jak blad */ int BEwrite4Bytes(int val, FILE *f); /* odczytaj z pliku liczbe 16-bitowa w formacie BigEndian*/ int BEread4Bytes(FILE *f); #endif