#include <gimp-print/gimp-print.h>
#include "gimp-print-internal.h"
#include <gimp-print/gimp-print-intl-internal.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
Go to the source code of this file.
Data Structures | |
struct | stp_curve |
Defines | |
#define | inline |
#define | DEFINE_DATA_SETTER(t, name) |
#define | DEFINE_DATA_ACCESSOR(t, name) |
Functions | |
void | check_curve (const stp_curve_t *curve) |
size_t | get_real_point_count (const stp_curve_t *curve) |
size_t | get_point_count (const stp_curve_t *curve) |
void | invalidate_auxiliary_data (stp_curve_t *curve) |
void | clear_curve_data (stp_curve_t *curve) |
void | compute_linear_deltas (stp_curve_t *curve) |
void | compute_spline_deltas_piecewise (stp_curve_t *curve) |
void | compute_spline_deltas_dense (stp_curve_t *curve) |
void | compute_spline_deltas (stp_curve_t *curve) |
void | compute_intervals (stp_curve_t *curve) |
int | stpi_curve_set_points (stp_curve_t *curve, size_t points) |
void | stpi_curve_ctor (stp_curve_t *curve, stp_curve_wrap_mode_t wrap_mode) |
stp_curve_t * | stp_curve_create (stp_curve_wrap_mode_t wrap_mode) |
Create a new curve. | |
void | curve_dtor (stp_curve_t *curve) |
void | stp_curve_destroy (stp_curve_t *curve) |
Destroy an curve. | |
void | stp_curve_copy (stp_curve_t *dest, const stp_curve_t *source) |
Copy an curve. | |
stp_curve_t * | stp_curve_create_copy (const stp_curve_t *curve) |
Copy and allocate an curve. | |
int | stp_curve_set_bounds (stp_curve_t *curve, double low, double high) |
Set the lower and upper bounds on a curve. | |
void | stp_curve_get_bounds (const stp_curve_t *curve, double *low, double *high) |
Get the lower and upper bounds on a curve. | |
void | stp_curve_get_range (const stp_curve_t *curve, double *low, double *high) |
size_t | stp_curve_count_points (const stp_curve_t *curve) |
Get the number of allocated points in the curve. | |
stp_curve_wrap_mode_t | stp_curve_get_wrap (const stp_curve_t *curve) |
Get the wrapping mode. | |
int | stp_curve_is_piecewise (const stp_curve_t *curve) |
Determine whether the curve is piecewise. | |
int | stp_curve_set_interpolation_type (stp_curve_t *curve, stp_curve_type_t itype) |
Set the curve interpolation type. | |
stp_curve_type_t | stp_curve_get_interpolation_type (const stp_curve_t *curve) |
Get the curve interpolation type. | |
int | stp_curve_set_gamma (stp_curve_t *curve, double fgamma) |
Set the gamma of a curve. | |
double | stp_curve_get_gamma (const stp_curve_t *curve) |
Get the gamma value of the curve. | |
int | stp_curve_set_data (stp_curve_t *curve, size_t count, const double *data) |
Set all data points of the curve. | |
int | stp_curve_set_data_points (stp_curve_t *curve, size_t count, const stp_curve_point_t *data) |
Set all data points of the curve. | |
const double * | stp_curve_get_data (const stp_curve_t *curve, size_t *count) |
Get a pointer to the curve's raw data. | |
const stp_curve_point_t * | stp_curve_get_data_points (const stp_curve_t *curve, size_t *count) |
Get a pointer to the curve's raw data as points. | |
const double * | stpi_curve_get_data_internal (const stp_curve_t *curve, size_t *count) |
stp_curve_t * | stp_curve_get_subrange (const stp_curve_t *curve, size_t start, size_t count) |
Get a curve containing a subrange of data. | |
int | stp_curve_set_subrange (stp_curve_t *curve, const stp_curve_t *range, size_t start) |
int | stp_curve_set_point (stp_curve_t *curve, size_t where, double data) |
Set a point along the curve. | |
int | stp_curve_get_point (const stp_curve_t *curve, size_t where, double *data) |
Get a point along the curve. | |
const stp_sequence_t * | stp_curve_get_sequence (const stp_curve_t *curve) |
Get the underlying stp_sequence_t data structure which stp_curve_t is derived from. | |
int | stp_curve_rescale (stp_curve_t *curve, double scale, stp_curve_compose_t mode, stp_curve_bounds_t bounds_mode) |
Rescale a curve (multiply all points by a scaling constant). | |
int | stpi_curve_check_parameters (stp_curve_t *curve, size_t points) |
double | interpolate_gamma_internal (const stp_curve_t *curve, double where) |
double | do_interpolate_spline (double low, double high, double frac, double interval_low, double interval_high, double x_interval) |
double | interpolate_point_internal (stp_curve_t *curve, double where) |
int | stp_curve_interpolate_value (const stp_curve_t *curve, double where, double *result) |
Interpolate a point along the curve. | |
int | stp_curve_resample (stp_curve_t *curve, size_t points) |
Resample a curve (change the number of points). | |
unsigned | gcd (unsigned a, unsigned b) |
unsigned | lcm (unsigned a, unsigned b) |
int | create_gamma_curve (stp_curve_t **retval, double lo, double hi, double fgamma, int points) |
int | interpolate_points (stp_curve_t *a, stp_curve_t *b, stp_curve_compose_t mode, int points, double *tmp_data) |
int | stp_curve_compose (stp_curve_t **retval, stp_curve_t *a, stp_curve_t *b, stp_curve_compose_t mode, int points) |
Compose two curves, creating a third curve. | |
stp_curve_t * | stp_curve_create_from_xmltree (stp_mxml_node_t *curve) |
stp_mxml_node_t * | stp_xmltree_create_from_curve (const stp_curve_t *curve) |
stp_mxml_node_t * | xmldoc_create_from_curve (const stp_curve_t *curve) |
int | curve_whitespace_callback (stp_mxml_node_t *node, int where) |
int | stp_curve_write (FILE *file, const stp_curve_t *curve) |
Write a curve to a file. | |
char * | stp_curve_write_string (const stp_curve_t *curve) |
Write a curve to a string. | |
stp_curve_t * | xml_doc_get_curve (stp_mxml_node_t *doc) |
stp_curve_t * | stp_curve_create_from_file (const char *file) |
Create a curve from a stream. | |
stp_curve_t * | stp_curve_create_from_stream (FILE *fp) |
Create a curve from a stream. | |
stp_curve_t * | stp_curve_create_from_string (const char *string) |
Create a curve from a string. | |
Variables | |
const int | curve_point_limit = 1048576 |
const char *const | stpi_curve_type_names [] |
const int | stpi_curve_type_count |
const char *const | stpi_wrap_mode_names [] |
const int | stpi_wrap_mode_count |
|
Value: const t * \ stp_curve_get_##name##_data(const stp_curve_t *curve, size_t *count) \ { \ if (curve->piecewise) \ return 0; \ return stp_sequence_get_##name##_data(curve->seq, count); \ } |
|
Value: int \ stp_curve_set_##name##_data(stp_curve_t *curve, size_t count, const t *data) \ { \ double *tmp_data; \ size_t i; \ int status; \ size_t real_count = count; \ \ check_curve(curve); \ if (count < 2) \ return 0; \ if (curve->wrap_mode == STP_CURVE_WRAP_AROUND) \ real_count++; \ if (real_count > curve_point_limit) \ return 0; \ tmp_data = stp_malloc(count * sizeof(double)); \ for (i = 0; i < count; i++) \ tmp_data[i] = (double) data[i]; \ status = stp_curve_set_data(curve, count, tmp_data); \ stp_free(tmp_data); \ return status; \ } |
|
|
|
|
Definition at line 133 of file curve.c. References invalidate_auxiliary_data(), stp_curve::recompute_interval, stp_curve::seq, stp_curve_t, and stp_sequence_set_size(). Referenced by curve_dtor(), stp_curve_set_gamma(), and stpi_curve_set_points(). |
|
Definition at line 359 of file curve.c. References compute_linear_deltas(), compute_spline_deltas(), stp_curve::curve_type, stp_curve::interval, stp_curve::recompute_interval, stp_curve::seq, stp_curve_t, STP_CURVE_TYPE_LINEAR, STP_CURVE_TYPE_SPLINE, stp_free(), and stp_sequence_get_size(). Referenced by interpolate_point_internal(), and stp_curve_resample(). |
|
Definition at line 142 of file curve.c. References get_real_point_count(), stp_curve::interval, stp_curve::piecewise, stp_curve::seq, stp_curve_t, stp_malloc(), and stp_sequence_get_data(). Referenced by compute_intervals(). |
|
Definition at line 345 of file curve.c. References compute_spline_deltas_dense(), compute_spline_deltas_piecewise(), stp_curve::piecewise, and stp_curve_t. Referenced by compute_intervals(). |
|
Definition at line 262 of file curve.c. References get_point_count(), stp_curve::interval, stp_curve::seq, stp_curve_t, STP_CURVE_WRAP_AROUND, stp_free(), stp_malloc(), stp_sequence_get_data(), and stp_curve::wrap_mode. Referenced by compute_spline_deltas(). |
|
Definition at line 171 of file curve.c. References get_point_count(), stp_curve::interval, stp_curve::seq, stp_curve_t, STP_CURVE_WRAP_AROUND, STP_DBG_CURVE, stp_deprintf(), stp_free(), stp_malloc(), stp_sequence_get_data(), stp_curve::wrap_mode, stp_curve_point_t::x, and stp_curve_point_t::y. Referenced by compute_spline_deltas(). |
|
Definition at line 1263 of file curve.c. References stp_curve_create(), stp_curve_destroy(), stp_curve_resample(), stp_curve_set_bounds(), stp_curve_set_gamma(), and STP_CURVE_WRAP_NONE. Referenced by stp_curve_compose(). |
|
Definition at line 431 of file curve.c. References check_curve(), clear_curve_data(), stp_curve::curve_type, stp_curve::seq, stp_curve_t, and stp_sequence_destroy(). Referenced by stp_curve_copy(), and stp_curve_destroy(). |
|
Definition at line 1697 of file curve.c. References stp_mxml_value_u::element, stp_mxml_value_s::name, STP_MXML_ELEMENT, stp_mxml_node_t, STP_MXML_WS_AFTER_CLOSE, STP_MXML_WS_AFTER_OPEN, STP_MXML_WS_BEFORE_CLOSE, STP_MXML_WS_BEFORE_OPEN, stp_mxmlElementGetAttr(), stp_mxml_node_s::type, and stp_mxml_node_s::value. Referenced by stp_curve_write(), and stp_curve_write_string(). |
|
Definition at line 1022 of file curve.c. Referenced by interpolate_point_internal(), and stp_curve_resample(). |
|
|
|
Definition at line 117 of file curve.c. References get_real_point_count(), stp_curve_t, STP_CURVE_WRAP_AROUND, and stp_curve::wrap_mode. Referenced by compute_spline_deltas_dense(), compute_spline_deltas_piecewise(), interpolate_point_internal(), stp_curve_count_points(), stp_curve_get_data(), stp_curve_get_data_points(), stp_curve_get_point(), stp_curve_rescale(), stp_curve_set_point(), and stpi_curve_get_data_internal(). |
|
Definition at line 103 of file curve.c. References stp_curve::piecewise, stp_curve::seq, stp_curve_t, and stp_sequence_get_size(). Referenced by compute_linear_deltas(), get_point_count(), interpolate_gamma_internal(), stp_curve_interpolate_value(), and stp_curve_rescale(). |
|
Definition at line 999 of file curve.c. References stp_curve::gamma, get_real_point_count(), stp_curve::seq, stp_curve_t, STP_DBG_CURVE, stp_deprintf(), and stp_sequence_get_bounds(). Referenced by stp_curve_interpolate_value(). |
|
Definition at line 1036 of file curve.c. References compute_intervals(), stp_curve::curve_type, do_interpolate_spline(), get_point_count(), stp_curve::interval, stp_curve::recompute_interval, stp_curve::seq, stp_curve_t, STP_CURVE_TYPE_LINEAR, stp_sequence_get_bounds(), and stp_sequence_get_point(). |
|
Definition at line 1277 of file curve.c. References STP_CURVE_COMPOSE_ADD, stp_curve_count_points(), stp_curve_interpolate_value(), STP_DBG_CURVE_ERRORS, and stp_deprintf(). Referenced by stp_curve_compose(). |
|
Definition at line 127 of file curve.c. References stp_curve::interval, stp_curve_t, and STP_SAFE_FREE. Referenced by clear_curve_data(), stp_curve_rescale(), stp_curve_set_point(), and stp_curve_set_subrange(). |
|
Definition at line 1246 of file curve.c. References curve_point_limit, and gcd(). |
|
|
|
Definition at line 979 of file curve.c. References stp_curve::gamma, stp_curve::seq, stp_curve_t, STP_DBG_CURVE_ERRORS, stp_deprintf(), stp_sequence_get_bounds(), and stp_curve::wrap_mode. Referenced by stp_curve_create_from_xmltree(). |
|
Definition at line 404 of file curve.c. References stp_curve::curve_type, stp_curve::piecewise, stp_curve::seq, stp_curve_t, STP_CURVE_TYPE_LINEAR, STP_CURVE_WRAP_NONE, stp_sequence_create(), stp_sequence_set_bounds(), stp_sequence_set_point(), stpi_curve_set_points(), and stp_curve::wrap_mode. Referenced by stp_curve_create(). |
|
Definition at line 717 of file curve.c. References check_curve(), get_point_count(), stp_curve::piecewise, stp_curve::seq, stp_curve_t, and stp_sequence_get_data(). Referenced by stp_xmltree_create_from_curve(). |
|
Definition at line 382 of file curve.c. References clear_curve_data(), curve_point_limit, stp_curve::piecewise, stp_curve::seq, stp_curve_t, STP_CURVE_WRAP_AROUND, stp_sequence_set_size(), and stp_curve::wrap_mode. Referenced by stp_curve_rescale(), stp_curve_set_data(), stp_curve_set_data_points(), and stpi_curve_ctor(). |
|
Definition at line 1801 of file curve.c. References stp_mxml_node_s::child, stp_curve_create_from_xmltree(), stp_curve_t, STP_DBG_CURVE_ERRORS, stp_deprintf(), stp_mxml_node_t, and stp_xml_get_node(). Referenced by stp_curve_create_from_file(), stp_curve_create_from_stream(), and stp_curve_create_from_string(). |
|
Definition at line 1660 of file curve.c. References stp_mxml_node_s::child, STP_DBG_CURVE_ERRORS, stp_deprintf(), STP_MXML_ADD_AFTER, stp_mxml_node_t, stp_mxmlAdd(), stp_mxmlDelete(), stp_xmldoc_create_generic(), and stp_xmltree_create_from_curve(). Referenced by stp_curve_write(), and stp_curve_write_string(). |
|
Definition at line 48 of file curve.c. Referenced by lcm(), stp_curve_compose(), stp_curve_set_data(), stp_curve_set_data_points(), and stpi_curve_set_points(). |
|
Initial value: (sizeof(stpi_curve_type_names) / sizeof(const char *)) Definition at line 69 of file curve.c. Referenced by stp_curve_set_interpolation_type(). |
|
Initial value: { "linear", "spline", } Definition at line 63 of file curve.c. Referenced by stp_xmltree_create_from_curve(). |
|
Initial value: (sizeof(stpi_wrap_mode_names) / sizeof(const char *)) |
|
Initial value: { "nowrap", "wrap" } Definition at line 72 of file curve.c. Referenced by stp_xmltree_create_from_curve(). |