const Value & SimpleTensorEngine::join(const Value &a, const Value &b, join_fun_t function, Stash &stash) const { if (a.is_double() && b.is_double()) { return stash.create<DoubleValue>(function(a.as_double(), b.as_double())); } return to_value(SimpleTensor::join(to_simple(a, stash), to_simple(b, stash), function), stash); }
/* ** brief : for a cone determine its luminosity ** @scene : our scene ** @cone : our cone ** @point : our vector point P ** return : the color */ t_color *lumi_cone(t_scene *scene, t_cone *cone, t_vector *point) { t_color *color; int nb_l; t_light *light; nb_l = 0; light = scene->list_light; if (light == NULL) return (cone->color); color = create_color(0, 0, 0); while (light != NULL) { ++nb_l; to_simple(&(light)->coord, cone->coord, cone->rot); if (scene->ambiance) _normal_cone_amb(light, point, cone, &color); else _normal_cone(light, point, cone, &color); to_real_life(&(light)->coord, cone->coord, cone->rot); light = light->next; } div_color(&color, nb_l); return (color); }
const Value & SimpleTensorEngine::map(const Value &a, map_fun_t function, Stash &stash) const { if (a.is_double()) { return stash.create<DoubleValue>(function(a.as_double())); } return to_value(to_simple(a, stash).map(function), stash); }
const Value & SimpleTensorEngine::rename(const Value &a, const std::vector<vespalib::string> &from, const std::vector<vespalib::string> &to, Stash &stash) const { return to_value(to_simple(a, stash).rename(from, to), stash); }
const Value & SimpleTensorEngine::concat(const Value &a, const Value &b, const vespalib::string &dimension, Stash &stash) const { return to_value(SimpleTensor::concat(to_simple(a, stash), to_simple(b, stash), dimension), stash); }
const Value & SimpleTensorEngine::reduce(const Value &a, Aggr aggr, const std::vector<vespalib::string> &dimensions, Stash &stash) const { return to_value(to_simple(a, stash).reduce(Aggregator::create(aggr, stash), dimensions), stash); }