It will let me put a lot more dtors into certain structs that C++ code calls `free` on members within.
85 lines
3.1 KiB
C++
85 lines
3.1 KiB
C++
#ifndef __DICACHE_H__
|
|
#define __DICACHE_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
#include "bitvec.h"
|
|
#include "image.hh"
|
|
#include "cache.hh"
|
|
|
|
/** Symbolic name to request the last version of an image */
|
|
#define DIC_Last -1
|
|
/** Flags: Last version, Valid entry */
|
|
#define DIF_Last 1
|
|
#define DIF_Valid 2
|
|
|
|
|
|
/* These will reflect the entry's "state" */
|
|
typedef enum {
|
|
DIC_Empty, /**< Just created the entry */
|
|
DIC_SetParms, /**< Parameters set */
|
|
DIC_SetCmap, /**< Color map set */
|
|
DIC_Write, /**< Feeding the entry */
|
|
DIC_Close, /**< Whole image got! */
|
|
DIC_Abort /**< Image transfer aborted */
|
|
} DicEntryState;
|
|
|
|
typedef struct DICacheEntry {
|
|
DilloUrl *url; /**< Image URL for this entry */
|
|
DilloImgType type; /**< Image type */
|
|
uint_t width, height; /**< As taken from image data */
|
|
short Flags; /**< See Flags */
|
|
short SurvCleanup; /**< Cleanup-pass survival for unused images */
|
|
uchar_t *cmap; /**< Color map */
|
|
void *v_imgbuf; /**< Void pointer to an Imgbuf object */
|
|
uint_t TotalSize; /**< Amount of memory the image takes up */
|
|
uint_t ScanNumber; /**< Current decoding scan */
|
|
bitvec_t *BitVec; /**< Bit vector for decoded rows */
|
|
DicEntryState State; /**< Current status for this entry */
|
|
int RefCount; /**< Reference Counter */
|
|
int version; /**< Version number, used for different
|
|
versions of the same URL image */
|
|
|
|
uint_t DecodedSize; /**< Size of already decoded data */
|
|
CA_Callback_t Decoder; /**< Client function */
|
|
void *DecoderData; /**< Client function data */
|
|
} DICacheEntry;
|
|
|
|
|
|
void a_Dicache_init (void);
|
|
|
|
DICacheEntry *a_Dicache_get_entry(const DilloUrl *Url, int version);
|
|
|
|
void *a_Dicache_png_image(const char *Type, void *Ptr, CA_Callback_t *Call,
|
|
void **Data);
|
|
void *a_Dicache_gif_image(const char *Type, void *Ptr, CA_Callback_t *Call,
|
|
void **Data);
|
|
void *a_Dicache_jpeg_image(const char *Type, void *Ptr, CA_Callback_t *Call,
|
|
void **Data);
|
|
void a_Dicache_callback(int Op, CacheClient_t *Client);
|
|
|
|
void a_Dicache_set_parms(DilloUrl *url, int version, DilloImage *Image,
|
|
uint_t width, uint_t height, DilloImgType type,
|
|
double gamma);
|
|
void a_Dicache_set_cmap(DilloUrl *url, int version, int bg_color,
|
|
const uchar_t *cmap, uint_t num_colors,
|
|
int num_colors_max, int bg_index);
|
|
void a_Dicache_new_scan(const DilloUrl *url, int version);
|
|
void a_Dicache_write(DilloUrl *url, int version, const uchar_t *buf, uint_t Y);
|
|
void a_Dicache_close(DilloUrl *url, int version, CacheClient_t *Client);
|
|
|
|
void a_Dicache_invalidate_entry(const DilloUrl *Url);
|
|
DICacheEntry* a_Dicache_ref(const DilloUrl *Url, int version);
|
|
void a_Dicache_unref(const DilloUrl *Url, int version);
|
|
void a_Dicache_cleanup(void);
|
|
void a_Dicache_freeall(void);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
#endif /* __DICACHE_H__ */
|