Bitvec now is RAII (sorta).
I should probably use either a `std::vector< uint8_t >` or maybe a bitvector object... but for now, this is progress.
This commit is contained in:
@ -21,9 +21,9 @@ extern "C" {
|
||||
/**
|
||||
* Create a new bitvec with 'num_bits' size
|
||||
*/
|
||||
bitvec_t *a_Bitvec_new(int num_bits)
|
||||
std::unique_ptr< bitvec_t > a_Bitvec_new(int num_bits)
|
||||
{
|
||||
bitvec_t *bvec = dNew(bitvec_t, 1);
|
||||
auto bvec = std::make_unique< bitvec_t >();
|
||||
|
||||
bvec->vec = dNew0(uchar_t, num_bits/BVEC_SIZE + 1);
|
||||
bvec->len = num_bits;
|
||||
@ -41,12 +41,9 @@ void a_Bitvec_clear(bitvec_t *bvec)
|
||||
/**
|
||||
* Free a bitvec
|
||||
*/
|
||||
void a_Bitvec_free(bitvec_t *bvec)
|
||||
bitvec_t::~bitvec_t()
|
||||
{
|
||||
if (bvec) {
|
||||
dFree(bvec->vec);
|
||||
dFree(bvec);
|
||||
}
|
||||
dFree(vec);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,6 +1,11 @@
|
||||
#ifndef __BITVEC_H__
|
||||
#define __BITVEC_H__
|
||||
|
||||
extern "C++"
|
||||
{
|
||||
#include <memory>
|
||||
}
|
||||
|
||||
#include "d_size.h"
|
||||
|
||||
using BVEC_TYPE= uchar_t;
|
||||
@ -9,6 +14,8 @@ constexpr auto BVEC_SIZE= sizeof(BVEC_TYPE);
|
||||
struct bitvec_t {
|
||||
BVEC_TYPE *vec;
|
||||
int len; /* number of bits [1 based] */
|
||||
|
||||
~bitvec_t();
|
||||
};
|
||||
|
||||
|
||||
@ -16,8 +23,7 @@ extern "C" {
|
||||
/*
|
||||
* Function prototypes
|
||||
*/
|
||||
bitvec_t *a_Bitvec_new(int bits);
|
||||
void a_Bitvec_free(bitvec_t *bvec);
|
||||
std::unique_ptr< bitvec_t > a_Bitvec_new(int bits);
|
||||
int a_Bitvec_get_bit(bitvec_t *bvec, int pos);
|
||||
void a_Bitvec_set_bit(bitvec_t *bvec, int pos);
|
||||
void a_Bitvec_clear(bitvec_t *bvec);
|
||||
|
||||
@ -183,7 +183,7 @@ static void Dicache_remove(const DilloUrl *Url, int version)
|
||||
/* entry cleanup */
|
||||
delete entry->url;
|
||||
dFree(entry->cmap);
|
||||
a_Bitvec_free(entry->BitVec);
|
||||
delete entry->BitVec;
|
||||
a_Imgbuf_unref(entry->v_imgbuf);
|
||||
if (entry->Decoder) {
|
||||
entry->Decoder(CA_Abort, reinterpret_cast< CacheClient * >( entry->DecoderData ));
|
||||
@ -270,7 +270,7 @@ void a_Dicache_set_parms(DilloUrl *url, int version, DilloImage *Image,
|
||||
DicEntry->width = width;
|
||||
DicEntry->height = height;
|
||||
DicEntry->type = type;
|
||||
DicEntry->BitVec = a_Bitvec_new((int)height);
|
||||
DicEntry->BitVec = a_Bitvec_new((int)height).release();
|
||||
DicEntry->State = DIC_SetParms;
|
||||
|
||||
dicache_size_total += DicEntry->TotalSize;
|
||||
@ -592,7 +592,7 @@ void a_Dicache_freeall(void)
|
||||
dList_remove_fast(CachedIMGs, entry);
|
||||
delete entry->url;
|
||||
dFree(entry->cmap);
|
||||
a_Bitvec_free(entry->BitVec);
|
||||
delete entry->BitVec;
|
||||
a_Imgbuf_unref(entry->v_imgbuf);
|
||||
dicache_size_total -= entry->TotalSize;
|
||||
dFree(entry);
|
||||
|
||||
@ -78,7 +78,7 @@ void *a_Image_get_dw(DilloImage *Image)
|
||||
*/
|
||||
static void Image_free(DilloImage *Image)
|
||||
{
|
||||
a_Bitvec_free(Image->BitVec);
|
||||
delete Image->BitVec;
|
||||
dFree(Image);
|
||||
}
|
||||
|
||||
@ -118,7 +118,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);
|
||||
Image->BitVec = a_Bitvec_new(height).release();
|
||||
Image->width = width;
|
||||
Image->height = height;
|
||||
Image->State = IMG_SetParms;
|
||||
|
||||
Reference in New Issue
Block a user