#ifndef __PVECTOR_H__ #define __PVECTOR_H__ #include #define SIZE_PVECTOR_TAB 5000 #include "PBaseExpressionTemplateIterator.h" struct PVector{ // Définition des types iterateurs typedef double* Iterator; typedef const double* ConstIterator; // Fonctions de récupération des itérateurs de début et de fin Iterator begin(){return p_elements;} Iterator end(){return p_elements + SIZE_PVECTOR_TAB;} ConstIterator begin()const{return p_elements;} ConstIterator end()const{return p_elements + SIZE_PVECTOR_TAB;} void setValue(double val){ for(Iterator it = begin(); it != end(); ++it){ *it = val; } } template const PVector& operator = (T expr); // Et enfin les données double p_elements[SIZE_PVECTOR_TAB]; }; ///Surcharge de l'opérateur d'affectation = /** @param expr : expression template ou le calcul est définit sou forme d'arbre par le compilateur * @return PVector calculé comme il faut * C'est un méthode qui permet de transformer une expression de calcul compliquée en une expression en C avec une boucle qui poura éventuellement vectorisée * si cela est possible ou parallèlisée avec OpenMP sans que le programmeur ne se soit cassé la tête */ template const PVector& PVector::operator = (T expr){ //je ne suis pas convaincu que l'on puisse faire du OpenMP avec une boucle for définie comme ça for(Iterator i = begin(); i != end(); ++i, ++expr){ *i = *expr; } return *this; } //Surcharge des opérateurs pour le PVector PSURCHAGE_IT_TYPE_ALL_OP(PVector,PVector::ConstIterator) #endif