--- 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::exists + // + // Ahem. + // + // Difficile de faire plus rŽpugnant. + // Le principe: si la classe dŽrive de destructible, on passe true comme troisime + // paramtre 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 extrmement 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'aprs 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 - void context_t::store(const T &d,T v) + void context_t::store_nd(const T &d,T v) { back::exists> + false > + ::store(d,v,data,destructibles); + } + template + T get_nd(const T &d) + { + bool present=true; + return back + ::get(d,data,present,destructibles); + }; + template + T get_nd(const T &d,bool &present) + { + present=true; + return back + ::get(d,data,present,destructibles); + }; + template + void context_t::store_d(const T &d,T v) + { + back ::store(d,v,data,destructibles); } - template - T get(const T &d) + T get_d(const T &d) { bool present=true; return back::exists> + true > ::get(d,data,present,destructibles); }; template - T get(const T &d,bool &present) + T get_d(const T &d,bool &present) { present=true; return back::exists> + true > ::get(d,data,present,destructibles); };