--- src/yafraycore/tools.h Tue Feb 3 16:42:26 2004 +++ /Users/krug/Desktop/yafray-0.0.6-2/src/yafraycore/tools.h Thu Feb 19 15:44:11 2004 @@ -98,31 +98,84 @@ public: + // Conversion<T,destructible *>::exists + // + // Ahem. + // + // Difficile de faire plus r�pugnant. + // Le principe: si la classe d�rive de destructible, on passe true comme troisi�me + // param�tre de back< ... >, sinon on passe false. + // + // Mais gcc: + // Thread model: posix + // gcc version 3.3 20030304 (Apple Computer, Inc. build 1495) + // + // n'aime pas du tout (ce qui ne semble pas extr�mement surprenant, je me demande si + // une version de gcc accepte vraiment ce code.) + // + // La hi�rarchie des types est la suivante: + // destructible + // photonData_t + // hemiSampler_t + // haltonSampler_t + // randomSampler_t + // photonSampler_t + // + // Donc si *T est un de ces types, on choisit la version _d (destructible) + // sinon, la version _nd. D'apr�s ce que j'ai vu, c'est ou bien un de ces types ou bien + // float. + // On pourrait raffiner en sp�cialisant pour float. + template<class T> - void context_t::store(const T &d,T v) + void context_t::store_nd(const T &d,T v) { back<T, sizeof(T)<=sizeof(double), - Conversion<T,destructible *>::exists> + false > + ::store(d,v,data,destructibles); + } + template<class T> + T get_nd(const T &d) + { + bool present=true; + return back<T, + sizeof(T)<=sizeof(double), + false > + ::get(d,data,present,destructibles); + }; + template<class T> + T get_nd(const T &d,bool &present) + { + present=true; + return back<T, + sizeof(T)<=sizeof(double), + false > + ::get(d,data,present,destructibles); + }; + template<class T> + void context_t::store_d(const T &d,T v) + { + back<T, + sizeof(T)<=sizeof(double), + true > ::store(d,v,data,destructibles); } - template<class T> - T get(const T &d) + T get_d(const T &d) { bool present=true; return back<T, sizeof(T)<=sizeof(double), - Conversion<T,destructible *>::exists> + true > ::get(d,data,present,destructibles); }; template<class T> - T get(const T &d,bool &present) + T get_d(const T &d,bool &present) { present=true; return back<T, sizeof(T)<=sizeof(double), - Conversion<T,destructible *>::exists> + true > ::get(d,data,present,destructibles); };