/** * Set limit of TBF qdisc by latency. * @arg qdisc TBF qdisc to be modified. * @arg latency Latency in micro seconds. * * Calculates and sets the limit based on the desired latency and the * configured rate and peak rate. In order for this operation to succeed, * the rate and if required the peak rate must have been set in advance. * * @f[ * limit_n = \frac{{rate_n} \times {latency}}{10^6}+{bucketsize}_n * @f] * @f[ * limit = min(limit_{rate},limit_{peak}) * @f] * * @return 0 on success or a negative error code. */ int rtnl_qdisc_tbf_set_limit_by_latency(struct rtnl_qdisc *qdisc, int latency) { struct rtnl_tbf *tbf; double limit, limit2; if (!(tbf = rtnl_tc_data(TC_CAST(qdisc)))) BUG(); if (!(tbf->qt_mask & TBF_ATTR_RATE)) return -NLE_MISSING_ATTR; limit = calc_limit(&tbf->qt_rate, latency, tbf->qt_rate_bucket); if (tbf->qt_mask & TBF_ATTR_PEAKRATE) { limit2 = calc_limit(&tbf->qt_peakrate, latency, tbf->qt_peakrate_bucket); if (limit2 < limit) limit = limit2; } rtnl_qdisc_tbf_set_limit(qdisc, (int) limit); return 0; }
int inter_tore(t_camera *camera, t_object *object, t_detail *detail, double *vector) { double k; double k_tab[4]; double indice[5]; if (!camera || !object || !detail || !vector || inter_indice_tore(camera, object, vector, indice)) return (EXIT_FAILURE); inter_equation4deg(indice, k_tab); if (object->image != NULL && object->image->type_texture == 1) if (calc_cut_texture(k_tab, object, vector, camera)) return (EXIT_FAILURE); calc_limit(object, camera->position, vector, &k_tab[0]); calc_limit(object, camera->position, vector, &k_tab[1]); calc_limit(object, camera->position, vector, &k_tab[2]); calc_limit(object, camera->position, vector, &k_tab[3]); k = calcul_solution_smallest(k_tab); if (k > CONST_ERROR && (k < detail->k || detail->k < CONST_ERROR)) { detail->k = k; detail->object = object; } return (EXIT_SUCCESS); }
int inter_plan(t_camera *camera, t_object *object, t_detail *detail, double *vector) { double k; double pos[NB_DIMENSION]; double u[NB_DIMENSION]; if (!camera || !object || !detail || !vector) return (EXIT_FAILURE); modif_position(camera->position, object, pos, INVERSE_ROTATION); modif_vector(object->rotation, vector, u, INVERSE_ROTATION); if (!u[Z]) u[Z] += EPSILON; k = (pos[Z] * (-1.0F)) / (u[Z] + 0.0000001F); if (object->limit != NULL && calc_limit(object->limit, camera->position, vector, &k)) return (EXIT_FAILURE); if (k > CONST_ERROR && (k < detail->k || detail->k < CONST_ERROR)) { detail->k = k; detail->object = object; } return (EXIT_SUCCESS); }