#ifndef SPROUT_DARKROOM_INTERSECTS_INTERSECTION_HPP #define SPROUT_DARKROOM_INTERSECTS_INTERSECTION_HPP #include #include #include #include #include #include namespace sprout { namespace darkroom { namespace intersects { // // does_intersect // distance // point_of_intersection // normal // material // template inline SPROUT_CONSTEXPR auto does_intersect(T&& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(sprout::darkroom::access::get<0>(sprout::forward(t)))) -> decltype(sprout::darkroom::access::get<0>(sprout::forward(t))) { return sprout::darkroom::access::get<0>(sprout::forward(t)); } template inline SPROUT_CONSTEXPR auto distance(T&& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(sprout::darkroom::access::get<1>(sprout::forward(t)))) -> decltype(sprout::darkroom::access::get<1>(sprout::forward(t))) { return sprout::darkroom::access::get<1>(sprout::forward(t)); } template inline SPROUT_CONSTEXPR auto point_of_intersection(T&& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(sprout::darkroom::access::get<2>(sprout::forward(t)))) -> decltype(sprout::darkroom::access::get<2>(sprout::forward(t))) { return sprout::darkroom::access::get<2>(sprout::forward(t)); } template inline SPROUT_CONSTEXPR auto normal(T&& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(sprout::darkroom::access::get<3>(sprout::forward(t)))) -> decltype(sprout::darkroom::access::get<3>(sprout::forward(t))) { return sprout::darkroom::access::get<3>(sprout::forward(t)); } template inline SPROUT_CONSTEXPR auto material(T&& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(sprout::darkroom::access::get<4>(sprout::forward(t)))) -> decltype(sprout::darkroom::access::get<4>(sprout::forward(t))) { return sprout::darkroom::access::get<4>(sprout::forward(t)); } // // make_intersection // template inline SPROUT_CONSTEXPR sprout::tuples::tuple make_intersection(bool b, Distance const& dist, Point const& p, Normal const& nor, Material const& mat) { return sprout::tuples::make_tuple(b, dist, p, nor, mat); } // // intersection // typedef sprout::tuples::tuple< bool, double, sprout::darkroom::coords::vector3d, sprout::darkroom::coords::vector3d, sprout::darkroom::materials::material > intersection; } // namespace intersects } // namespace darkroom } // namespace sprout #endif // #ifndef SPROUT_DARKROOM_INTERSECTS_INTERSECTION_HPP