/* * * Gimp-Print color management module - traditional Gimp-Print algorithm. * * Copyright 1997-2000 Michael Sweet (mike@easysw.com) and * Robert Krawitz (rlk@alum.mit.edu) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /* * This file must include only standard C header files. The core code must * compile on generic platforms that don't support glib, gimp, gtk, etc. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "gutenprint-internal.h" #include #include #include #ifdef HAVE_LIMITS_H #include #endif #include 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); } 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); } }