00001 #ifndef PhysicsTools_Utilities_DecomposeProduct_h 00002 #define PhysicsTools_Utilities_DecomposeProduct_h 00003 #include "PhysicsTools/Utilities/interface/Product.h" 00004 00005 namespace funct { 00006 00007 template<typename A, typename B> 00008 struct DecomposeProduct { }; 00009 00010 template<typename A> 00011 struct DecomposeProduct<A, A> { 00012 inline static const A& get(const A & a) { return a; } 00013 }; 00014 00015 template<typename A, typename B> 00016 struct DecomposeProduct<ProductStruct<A, B>, A> { 00017 inline static const A& get(const ProductStruct<A, B> & _ ) { return _._1; } 00018 }; 00019 00020 template<typename A, typename B> 00021 struct DecomposeProduct<ProductStruct<A, B>, B> { 00022 inline static const B& get(const ProductStruct<A, B> & _ ) { return _._2; } 00023 }; 00024 00025 } 00026 00027 #endif