Just about ready to make Image use shared_ptr.

This lets me get rid of the refcount member and the
ref/deref functions.
This commit is contained in:
2025-08-01 01:04:35 -04:00
parent a16f3cb74d
commit b2963b17d2
3 changed files with 7 additions and 16 deletions

View File

@ -528,17 +528,17 @@ void a_Dicache_callback(int Op, CacheClient_t *Client)
if (DicEntry->ScanNumber == Image->ScanNumber) { if (DicEntry->ScanNumber == Image->ScanNumber) {
for (i = 0; i < DicEntry->height; ++i) for (i = 0; i < DicEntry->height; ++i)
if (a_Bitvec_get_bit(DicEntry->BitVec, (int)i) && if (a_Bitvec_get_bit(DicEntry->BitVec, (int)i) &&
!a_Bitvec_get_bit(Image->BitVec, (int)i) ) !a_Bitvec_get_bit(Image->BitVec.get(), (int)i) )
a_Image_write(Image, i); a_Image_write(Image, i);
} else { } else {
for (i = 0; i < DicEntry->height; ++i) { for (i = 0; i < DicEntry->height; ++i) {
if (a_Bitvec_get_bit(DicEntry->BitVec, (int)i) || if (a_Bitvec_get_bit(DicEntry->BitVec, (int)i) ||
!a_Bitvec_get_bit(Image->BitVec, (int)i) || !a_Bitvec_get_bit(Image->BitVec.get(), (int)i) ||
DicEntry->ScanNumber > Image->ScanNumber + 1) { DicEntry->ScanNumber > Image->ScanNumber + 1) {
a_Image_write(Image, i); a_Image_write(Image, i);
} }
if (!a_Bitvec_get_bit(DicEntry->BitVec, (int)i)) if (!a_Bitvec_get_bit(DicEntry->BitVec, (int)i))
a_Bitvec_clear_bit(Image->BitVec, (int)i); a_Bitvec_clear_bit(Image->BitVec.get(), (int)i);
} }
Image->ScanNumber = DicEntry->ScanNumber; Image->ScanNumber = DicEntry->ScanNumber;
} }

View File

@ -45,7 +45,6 @@ DilloImage *a_Image_new(void *layout, void *img_rndr,
Image->bg_color = bg_color; Image->bg_color = bg_color;
Image->fg_color = fg_color; Image->fg_color = fg_color;
Image->ScanNumber = 0; Image->ScanNumber = 0;
Image->BitVec = NULL;
Image->State = IMG_Empty; Image->State = IMG_Empty;
Image->RefCount = 0; Image->RefCount = 0;
@ -73,14 +72,6 @@ void *a_Image_get_dw(DilloImage *Image)
{ {
return (dw::Image*)(dw::core::ImgRenderer*)Image->img_rndr; return (dw::Image*)(dw::core::ImgRenderer*)Image->img_rndr;
} }
/**
* Deallocate an Image structure
*/
static void Image_free(DilloImage *Image)
{
delete Image->BitVec;
dFree(Image);
}
/** /**
* Unref and free if necessary * Unref and free if necessary
@ -90,7 +81,7 @@ void a_Image_unref(DilloImage *Image)
{ {
_MSG(" %d ", Image->RefCount); _MSG(" %d ", Image->RefCount);
if (Image && --Image->RefCount == 0) if (Image && --Image->RefCount == 0)
Image_free(Image); delete Image;
} }
/** /**
@ -118,7 +109,7 @@ void a_Image_set_parms(DilloImage *Image, void *v_imgbuf, DilloUrl *url,
I2IR(Image)->setBuffer((Imgbuf*)v_imgbuf, resize); I2IR(Image)->setBuffer((Imgbuf*)v_imgbuf, resize);
if (!Image->BitVec) if (!Image->BitVec)
Image->BitVec = a_Bitvec_new(height).release(); Image->BitVec = a_Bitvec_new(height);
Image->width = width; Image->width = width;
Image->height = height; Image->height = height;
Image->State = IMG_SetParms; Image->State = IMG_SetParms;
@ -134,7 +125,7 @@ void a_Image_write(DilloImage *Image, uint_t y)
/* Update the row in DwImage */ /* Update the row in DwImage */
I2IR(Image)->drawRow(y); I2IR(Image)->drawRow(y);
a_Bitvec_set_bit(Image->BitVec, y); a_Bitvec_set_bit(Image->BitVec.get(), y);
Image->State = IMG_Write; Image->State = IMG_Write;
} }

View File

@ -66,7 +66,7 @@ struct DilloImage {
float dpi; /**< Dots per inch */ float dpi; /**< Dots per inch */
int32_t bg_color; /**< Background color */ int32_t bg_color; /**< Background color */
int32_t fg_color; /**< Foreground color */ int32_t fg_color; /**< Foreground color */
bitvec_t *BitVec; /**< Bit vector for decoded rows */ std::unique_ptr< bitvec_t > BitVec; /**< Bit vector for decoded rows */
uint_t ScanNumber; /**< Current decoding scan */ uint_t ScanNumber; /**< Current decoding scan */
ImageState State; /**< Processing status */ ImageState State; /**< Processing status */