3.1.2.1 : Le fichier header
Écrivons le fichier temporary_alloc.h :
Nous commençons par la classique définition de macro pour éviter les inclusions multiples de notre 
header :
	
		
			| 1
2
 | 
#ifndef __TEMPORARY_ALLOC_H__
#define __TEMPORARY_ALLOC_H__
 | 
	
Ensuite nous incluons le 
header qui nous permettra de manipuler des tenseurs :
Nous ajoutons une petite fonction 
template bonus pour interchanger des valeurs (on les utilisera plus tard avec des pointeurs) :
	
		
			| 1
2
3
4
5
6
7
8
9
10
 | 
///Swap two values
/**	@param[out] a : value will be b
 * 	@param[out] b : value will be a
*/
template<typename T>
void swapValue(T & a, T & b){
	T c(a);
	a = b;
	b = c;
} | 
	
Nous définissons le prototype de notre fonction d'initialisation de temporaires. Ils sont très utiles pour éviter les allocations redondantes et inutile dans un programme. Nous passons donc 4 temporaires la matrice 
U entrée/sortie et la la matrice 
V entrée/sortie.
Nous passons 4 pointeur car ils seront simple à interchanger et 4 
PTensor car ils géreront la désallocation pour nous.
Enfin nous passons la taille des images temporaires 
(nbRow, nbCol) :
	
		
			| 1
2
3
 | 
void allocate_temporary(float *& tmpU1, float *& tmpU2, float *& tmpV1, float *& tmpV2,
			PTensor<float> & tmpInU, PTensor<float> & tmpInV, PTensor<float> & tmpOutU, PTensor<float> & tmpOutV,
			size_t nbRow, size_t nbCol); | 
	
Finalement nous fermons la condition du preprocesseur pour éviter les inclusions multiples de notre 
header :
Le fichier 
temporary_alloc.h complet :
	
		
			| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 | 
#ifndef __TEMPORARY_ALLOC_H__
#define __TEMPORARY_ALLOC_H__
#include "PTensor.h"
///Swap two values
/**	@param[out] a : value will be b
 * 	@param[out] b : value will be a
*/
template<typename T>
void swapValue(T & a, T & b){
	T c(a);
	a = b;
	b = c;
}
void allocate_temporary(float *& tmpU1, float *& tmpU2, float *& tmpV1, float *& tmpV2,
			PTensor<float> & tmpInU, PTensor<float> & tmpInV, PTensor<float> & tmpOutU, PTensor<float> & tmpOutV,
			size_t nbRow, size_t nbCol);
#endif
 | 
	
Vous pouvez le télécharger 
ici.