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:
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
15
src/image.cc
15
src/image.cc
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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 */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user