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
|
* 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->vec = dNew0(uchar_t, num_bits/BVEC_SIZE + 1);
|
||||||
bvec->len = num_bits;
|
bvec->len = num_bits;
|
||||||
@ -41,12 +41,9 @@ void a_Bitvec_clear(bitvec_t *bvec)
|
|||||||
/**
|
/**
|
||||||
* Free a bitvec
|
* Free a bitvec
|
||||||
*/
|
*/
|
||||||
void a_Bitvec_free(bitvec_t *bvec)
|
bitvec_t::~bitvec_t()
|
||||||
{
|
{
|
||||||
if (bvec) {
|
dFree(vec);
|
||||||
dFree(bvec->vec);
|
|
||||||
dFree(bvec);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,6 +1,11 @@
|
|||||||
#ifndef __BITVEC_H__
|
#ifndef __BITVEC_H__
|
||||||
#define __BITVEC_H__
|
#define __BITVEC_H__
|
||||||
|
|
||||||
|
extern "C++"
|
||||||
|
{
|
||||||
|
#include <memory>
|
||||||
|
}
|
||||||
|
|
||||||
#include "d_size.h"
|
#include "d_size.h"
|
||||||
|
|
||||||
using BVEC_TYPE= uchar_t;
|
using BVEC_TYPE= uchar_t;
|
||||||
@ -9,6 +14,8 @@ constexpr auto BVEC_SIZE= sizeof(BVEC_TYPE);
|
|||||||
struct bitvec_t {
|
struct bitvec_t {
|
||||||
BVEC_TYPE *vec;
|
BVEC_TYPE *vec;
|
||||||
int len; /* number of bits [1 based] */
|
int len; /* number of bits [1 based] */
|
||||||
|
|
||||||
|
~bitvec_t();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -16,8 +23,7 @@ extern "C" {
|
|||||||
/*
|
/*
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
*/
|
*/
|
||||||
bitvec_t *a_Bitvec_new(int bits);
|
std::unique_ptr< bitvec_t > a_Bitvec_new(int bits);
|
||||||
void a_Bitvec_free(bitvec_t *bvec);
|
|
||||||
int a_Bitvec_get_bit(bitvec_t *bvec, int pos);
|
int a_Bitvec_get_bit(bitvec_t *bvec, int pos);
|
||||||
void a_Bitvec_set_bit(bitvec_t *bvec, int pos);
|
void a_Bitvec_set_bit(bitvec_t *bvec, int pos);
|
||||||
void a_Bitvec_clear(bitvec_t *bvec);
|
void a_Bitvec_clear(bitvec_t *bvec);
|
||||||
|
|||||||
@ -183,7 +183,7 @@ static void Dicache_remove(const DilloUrl *Url, int version)
|
|||||||
/* entry cleanup */
|
/* entry cleanup */
|
||||||
delete entry->url;
|
delete entry->url;
|
||||||
dFree(entry->cmap);
|
dFree(entry->cmap);
|
||||||
a_Bitvec_free(entry->BitVec);
|
delete entry->BitVec;
|
||||||
a_Imgbuf_unref(entry->v_imgbuf);
|
a_Imgbuf_unref(entry->v_imgbuf);
|
||||||
if (entry->Decoder) {
|
if (entry->Decoder) {
|
||||||
entry->Decoder(CA_Abort, reinterpret_cast< CacheClient * >( entry->DecoderData ));
|
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->width = width;
|
||||||
DicEntry->height = height;
|
DicEntry->height = height;
|
||||||
DicEntry->type = type;
|
DicEntry->type = type;
|
||||||
DicEntry->BitVec = a_Bitvec_new((int)height);
|
DicEntry->BitVec = a_Bitvec_new((int)height).release();
|
||||||
DicEntry->State = DIC_SetParms;
|
DicEntry->State = DIC_SetParms;
|
||||||
|
|
||||||
dicache_size_total += DicEntry->TotalSize;
|
dicache_size_total += DicEntry->TotalSize;
|
||||||
@ -592,7 +592,7 @@ void a_Dicache_freeall(void)
|
|||||||
dList_remove_fast(CachedIMGs, entry);
|
dList_remove_fast(CachedIMGs, entry);
|
||||||
delete entry->url;
|
delete entry->url;
|
||||||
dFree(entry->cmap);
|
dFree(entry->cmap);
|
||||||
a_Bitvec_free(entry->BitVec);
|
delete entry->BitVec;
|
||||||
a_Imgbuf_unref(entry->v_imgbuf);
|
a_Imgbuf_unref(entry->v_imgbuf);
|
||||||
dicache_size_total -= entry->TotalSize;
|
dicache_size_total -= entry->TotalSize;
|
||||||
dFree(entry);
|
dFree(entry);
|
||||||
|
|||||||
@ -78,7 +78,7 @@ void *a_Image_get_dw(DilloImage *Image)
|
|||||||
*/
|
*/
|
||||||
static void Image_free(DilloImage *Image)
|
static void Image_free(DilloImage *Image)
|
||||||
{
|
{
|
||||||
a_Bitvec_free(Image->BitVec);
|
delete Image->BitVec;
|
||||||
dFree(Image);
|
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);
|
I2IR(Image)->setBuffer((Imgbuf*)v_imgbuf, resize);
|
||||||
|
|
||||||
if (!Image->BitVec)
|
if (!Image->BitVec)
|
||||||
Image->BitVec = a_Bitvec_new(height);
|
Image->BitVec = a_Bitvec_new(height).release();
|
||||||
Image->width = width;
|
Image->width = width;
|
||||||
Image->height = height;
|
Image->height = height;
|
||||||
Image->State = IMG_SetParms;
|
Image->State = IMG_SetParms;
|
||||||
|
|||||||
Reference in New Issue
Block a user