#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <gimp-print/gimp-print.h>
#include "gimp-print-internal.h"
#include <gimp-print/gimp-print-intl-internal.h>
#include <gimp-print/curve-cache.h>
#include <math.h>
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
#include <string.h>
void
stp_curve_free_curve_cache(stp_cached_curve_t *cache)
{
if (cache->curve)
stp_curve_destroy(cache->curve);
cache->curve = NULL;
cache->d_cache = NULL;
cache->s_cache = NULL;
cache->count = 0;
}
void
stp_curve_cache_curve_data(stp_cached_curve_t *cache)
{
if (cache->curve && !cache->d_cache)
{
cache->s_cache = stp_curve_get_ushort_data(cache->curve, &(cache->count));
cache->d_cache = stp_curve_get_data(cache->curve, &(cache->count));
}
}
stp_curve_t *
stp_curve_cache_get_curve(stp_cached_curve_t *cache)
{
return cache->curve;
}
void
stp_curve_cache_curve_invalidate(stp_cached_curve_t *cache)
{
cache->d_cache = NULL;
cache->s_cache = NULL;
cache->count = 0;
}
void
stp_curve_cache_set_curve(stp_cached_curve_t *cache, stp_curve_t *curve)
{
stp_curve_cache_curve_invalidate(cache);
cache->curve = curve;
}
void
stp_curve_cache_set_curve_copy(stp_cached_curve_t *cache, const stp_curve_t *curve)
{
stp_curve_cache_curve_invalidate(cache);
cache->curve = stp_curve_create_copy(curve);
}
const size_t
stp_curve_cache_get_count(stp_cached_curve_t *cache)
{
if (cache->curve)
{
if (!cache->d_cache)
cache->d_cache = stp_curve_get_data(cache->curve, &(cache->count));
return cache->count;
}
else
return 0;
}
const unsigned short *
stp_curve_cache_get_ushort_data(stp_cached_curve_t *cache)
{
if (cache->curve)
{
if (!cache->s_cache)
cache->s_cache =
stp_curve_get_ushort_data(cache->curve, &(cache->count));
return cache->s_cache;
}
else
return NULL;
}
const double *
stp_curve_cache_get_double_data(stp_cached_curve_t *cache)
{
if (cache->curve)
{
if (!cache->d_cache)
cache->d_cache = stp_curve_get_data(cache->curve, &(cache->count));
return cache->d_cache;
}
else
return NULL;
}
void
stp_curve_cache_copy(stp_cached_curve_t *dest, const stp_cached_curve_t *src)
{
stp_curve_cache_curve_invalidate(dest);
if (dest != src)
{
if (src->curve)
stp_curve_cache_set_curve_copy(dest, src->curve);
}
}