LIGBIT (3I)     version 4.6.9     March 2022

User Intro    Prog Intro    Liste des programmes    Liste des manuels
Table of Contents


NAME

ligbit, buffer_size, buffer_pgsize, buffer_align, buffer_split, buffer_pgsplit - calculs de tailles de buffers.

SYNOPSIS

function ligbit(lfmt,ibs)
integer lfmt(9),ibs

#include <inrimage/image.h>

Fort_int ligbit_(lfmt,ibs)
Fort_int lfmt[9],*ibs;

int buffer_size(lfmt,nlig)
Fort_int *lfmt;int nlig;

int buffer_pgsize(lfmt,nlig)
Fort_int *lfmt;int nlig;

int buffer_align(buf)
char *buf;

int buffer_split(size,nb)
int size, nb;

int buffer_pgsplit(size,nb)
int size, nb;

DESCRIPTION

ligbit (c_ligbit, ligbit_) renvoie la taille, en nombre de bits, de la ligne d'une image de format lfmt et met dans ibs le nombre de bits réellement utilisé pour coder chaque valeur (multiple de 8 pour le format virgule fixe non compact)

buffer_size, buffer_pgsize renvoient la taille en octets du buffer contenant nlig lignes d'une image de format donné par lfmt. Cette taille, arrondie par excès, est multiple d'une quantité qui est sizeof(t_aligned) pour buffer_size et la constante SUBPG_SIZE pour buffer_pgsize (SUBPG_SIZE vaut 128 sur KSR).
La valeur de sizeof(t_aligned) est 4 sur les machines 32 bits, et 8 sur les machines 64 bits (ALPHA, KSR1).
La valeur de SUBPG_SIZE est égale à sizeof(t_aligned), sauf sur KSR1 où elle est égale à la taille de la sous-page (128).

buffer_align donne le nombre d'octets à rajouter au pointeur char * buf pour obtenir une adresse alignée sur une frontière d'objet de type t_aligned (de taille 4 ou 8 octets selons les systèmes).

buffer_split, buffer_pgsplit renvoient la taille en octets des buffers obtenus en partageant un tableau de size octets en nb parties égales. La taille calculée (avec arrondi par défaut) est multiple d'une quantité qui est sizeof(t_aligned) pour buffer_split et la constante SUBPG_SIZE pour buffer_pgsplit.

buffer_split, buffer_size peuvent être utilisés pour calculer les adresses de début des blocs de lignes lors de l'utilisation de lectpl, ecrpl. Par exemple :
Si on suppose que nbytes est la taille totale en octets de buf, on pourra ecrire :


	char *buf;
	n = buffer_split(nbytes,nplan);
	/* on suppose lfmt[I_BSIZE] > 0 */
	nligne = n / (lfmt[I_DIMX] * lfmt[I_BSIZE]);
	c_lectpl(nf,iy,iz,nplan,nligne,buf);
	/* diviser incr par sizeof(...) selon le type de buf */
	incr = n;
	for(i=0;i<nplan;i++)
		calcul(buf,...);
		buf += incr;
	}

"SEE ALSO"

Intro(3i)

DIAGNOSTICS

ligbit, buffer_size, buffer_pgsize appellent imerror si lfmt est incorrect (buffer_size, buffer_pgsize appellent ligbit_).
buffer_align appelle imerror si la taille du type long est inférieure à celle du type pointeur.