38 #include "visir_utils.h"
57 visir_imglist_new(
const cpl_size capacity, cpl_propertylist * mplist)
60 l->_capacity = capacity <= 0 ? 1 : capacity;
62 l->auxdata = cpl_calloc(l->_capacity,
sizeof(
void*));;
64 l->imgs = cpl_imagelist_new();
69 visir_imglist_delete(
visir_imglist * l, visir_free aux_destructor)
72 cpl_imagelist_delete(l->imgs);
74 for (cpl_size i = 0; i < visir_imglist_get_size(l); i++) {
75 void * data = visir_imglist_get_data(l, i);
86 visir_imglist_unwrap(
visir_imglist * l, visir_free aux_destructor)
89 visir_imagelist_unwrap(l->imgs);
91 for (cpl_size i = 0; i < visir_imglist_get_size(l); i++) {
92 void * data = visir_imglist_get_data(l, i);
104 if (n < imgs->_capacity)
106 imgs->auxdata = cpl_realloc(imgs->auxdata, n *
sizeof(
void *));
114 if (l->_size == l->_capacity)
115 visir_imglist_resize(l, l->_capacity * 2);
116 cpl_imagelist_set(l->imgs, img, cpl_imagelist_get_size(l->imgs));
117 l->auxdata[l->_size] = auxdata;
119 assert(l->_size == cpl_imagelist_get_size(l->imgs));
123 visir_imglist_append_imglist(
visir_imglist * l, cpl_imagelist * imgs,
126 for (cpl_size i = 0; i < cpl_imagelist_get_size(imgs); i++) {
127 void * data = auxdata == NULL ? NULL : auxdata[i];
128 cpl_image * img = cpl_imagelist_get(imgs, i);
129 visir_imglist_append(l, cpl_image_duplicate(img), data);
140 visir_imglist_get_img(
const visir_imglist * imgs,
const cpl_size index)
142 cpl_ensure(index < imgs->_size, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
143 cpl_ensure(index >= 0, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
144 return cpl_imagelist_get(imgs->imgs, index);
149 const cpl_size index,
void * auxdata)
151 cpl_ensure_code(index < imgs->_size, CPL_ERROR_ACCESS_OUT_OF_RANGE);
152 cpl_ensure_code(index >= 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);
153 imgs->auxdata[index] = auxdata;
154 return CPL_ERROR_NONE;
158 visir_imglist_get(
const visir_imglist * imgs,
const cpl_size index,
159 cpl_image ** img,
void ** auxdata)
161 cpl_ensure_code(index < imgs->_size, CPL_ERROR_ACCESS_OUT_OF_RANGE);
162 cpl_ensure_code(index >= 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);
164 *img = visir_imglist_get_img(imgs, index);
166 *auxdata = visir_imglist_get_data(imgs, index);
167 return CPL_ERROR_NONE;
171 visir_imglist_get_data(
const visir_imglist * imgs,
const cpl_size index)
173 cpl_ensure(index < imgs->_size, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
174 cpl_ensure(index >= 0, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
175 return imgs->auxdata[index];
179 visir_imglist_set_mplist(
visir_imglist * imgs, cpl_propertylist * mplist)
181 imgs->mplist = mplist;