From b2963b17d28ed3ea1419c94b36beb743f913b19842e842623135bca60d37a8a4 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Fri, 1 Aug 2025 01:04:35 -0400 Subject: [PATCH] Just about ready to make Image use `shared_ptr`. This lets me get rid of the refcount member and the ref/deref functions. --- src/dicache.cc | 6 +++--- src/image.cc | 15 +++------------ src/image.hh | 2 +- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/dicache.cc b/src/dicache.cc index f8438ca..994e4a9 100644 --- a/src/dicache.cc +++ b/src/dicache.cc @@ -528,17 +528,17 @@ void a_Dicache_callback(int Op, CacheClient_t *Client) if (DicEntry->ScanNumber == Image->ScanNumber) { for (i = 0; i < DicEntry->height; ++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); } else { for (i = 0; i < DicEntry->height; ++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) { a_Image_write(Image, 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; } diff --git a/src/image.cc b/src/image.cc index d77695a..afec450 100644 --- a/src/image.cc +++ b/src/image.cc @@ -45,7 +45,6 @@ DilloImage *a_Image_new(void *layout, void *img_rndr, Image->bg_color = bg_color; Image->fg_color = fg_color; Image->ScanNumber = 0; - Image->BitVec = NULL; Image->State = IMG_Empty; Image->RefCount = 0; @@ -73,14 +72,6 @@ void *a_Image_get_dw(DilloImage *Image) { 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 @@ -90,7 +81,7 @@ void a_Image_unref(DilloImage *Image) { _MSG(" %d ", Image->RefCount); 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); if (!Image->BitVec) - Image->BitVec = a_Bitvec_new(height).release(); + Image->BitVec = a_Bitvec_new(height); Image->width = width; Image->height = height; Image->State = IMG_SetParms; @@ -134,7 +125,7 @@ void a_Image_write(DilloImage *Image, uint_t y) /* Update the row in DwImage */ I2IR(Image)->drawRow(y); - a_Bitvec_set_bit(Image->BitVec, y); + a_Bitvec_set_bit(Image->BitVec.get(), y); Image->State = IMG_Write; } diff --git a/src/image.hh b/src/image.hh index b6a5827..c1fdd6c 100644 --- a/src/image.hh +++ b/src/image.hh @@ -66,7 +66,7 @@ struct DilloImage { float dpi; /**< Dots per inch */ int32_t bg_color; /**< Background 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 */ ImageState State; /**< Processing status */