genesys: Use std::vector instead of custom vector implementation

merge-requests/76/head
Povilas Kanapickas 2019-05-25 11:15:40 +03:00
rodzic 69485e9f11
commit eb93267fa9
3 zmienionych plików z 7 dodań i 124 usunięć

Wyświetl plik

@ -46,6 +46,7 @@
#include "genesys_gl843.h"
#include <string>
#include <vector>
/****************************************************************************
@ -3189,10 +3190,9 @@ gl843_offset_calibration (Genesys_Device * dev)
pass = 0;
// FIXME: we'll leak debug image if we encounter errors below
Genesys_Vector debug_image = sanei_gl_vector_create(1);
std::vector<uint8_t> debug_image;
size_t debug_image_lines = 0;
Genesys_Vector debug_image_info = sanei_gl_vector_create(1);
std::string debug_image_info;
/* loop until acceptable level */
while ((pass < 32)
@ -3223,8 +3223,8 @@ gl843_offset_calibration (Genesys_Device * dev)
snprintf(title, 100, "lines: %d pixels_per_line: %d offsets[0..2]: %d %d %d\n",
lines, pixels,
dev->frontend.offset[0], dev->frontend.offset[1], dev->frontend.offset[2]);
sanei_gl_vector_append(&debug_image_info, title, strlen(title));
sanei_gl_vector_append(&debug_image, second_line.data(), total_size);
debug_image_info += title;
std::copy(second_line.begin(), second_line.end(), std::back_inserter(debug_image));
debug_image_lines += lines;
}
@ -3253,14 +3253,11 @@ gl843_offset_calibration (Genesys_Device * dev)
if (DBG_LEVEL >= DBG_data)
{
sanei_genesys_write_file("gl843_offset_all_desc.txt",
(uint8_t*)debug_image_info.data, debug_image_info.size);
(uint8_t*) debug_image_info.data(), debug_image_info.size());
sanei_genesys_write_pnm_file("gl843_offset_all.pnm",
(uint8_t*)debug_image.data, bpp, channels, pixels, debug_image_lines);
debug_image.data(), bpp, channels, pixels, debug_image_lines);
}
sanei_gl_vector_destroy(&debug_image);
sanei_gl_vector_destroy(&debug_image_info);
DBG(DBG_info, "%s: offset=(%d,%d,%d)\n", __func__, dev->frontend.offset[0],
dev->frontend.offset[1], dev->frontend.offset[2]);

Wyświetl plik

@ -2253,103 +2253,6 @@ void sanei_genesys_sleep_ms(unsigned int milliseconds)
sanei_genesys_usleep(milliseconds * 1000);
}
Genesys_Vector sanei_gl_vector_create(size_t element_size)
{
Genesys_Vector ret;
ret.data = NULL;
ret.size = 0;
ret.capacity = 0;
ret.element_size = element_size;
return ret;
}
void sanei_gl_vector_reserve(Genesys_Vector* v, size_t count)
{
if (count <= v->capacity)
return;
char* new_data = (char *) malloc(count * v->element_size);
if (v->data != NULL)
{
memcpy(new_data, v->data, v->size * v->element_size);
free(v->data);
}
v->data = new_data;
v->capacity = count;
}
static void sanei_gl_vector_grow(Genesys_Vector* v, size_t min_size)
{
size_t new_capacity = v->capacity * 2;
if (new_capacity < 16)
new_capacity = 16;
if (new_capacity < min_size)
new_capacity = min_size;
sanei_gl_vector_reserve(v, new_capacity);
}
static void* sanei_gl_vector_get_element_nocheck(Genesys_Vector* v, size_t i)
{
return v->data + v->element_size * i;
}
void sanei_gl_vector_resize(Genesys_Vector* v, size_t count)
{
if (count <= v->size)
{
v->size = count;
return;
}
if (count > v->capacity)
sanei_gl_vector_reserve(v, count);
memset(sanei_gl_vector_get_element(v, v->size), 0, (count - v->size) * v->element_size);
v->size = count;
}
void sanei_gl_vector_append(Genesys_Vector* v, void* data, size_t count)
{
if (v->size + count > v->capacity)
sanei_gl_vector_grow(v, count);
memcpy(sanei_gl_vector_get_element_nocheck(v, v->size), data, count * v->element_size);
v->size = v->size + count;
}
void sanei_gl_vector_append_zero(Genesys_Vector* v, size_t count)
{
if (v->size + count > v->capacity)
sanei_gl_vector_grow(v, count);
memset(sanei_gl_vector_get_element_nocheck(v, v->size), 0, count * v->element_size);
v->size = v->size + count;
}
void* sanei_gl_vector_get_element(Genesys_Vector* v, size_t i)
{
assert(v->data != NULL);
assert(i < v->size);
return sanei_gl_vector_get_element_nocheck(v, i);
}
void sanei_gl_vector_set_element(Genesys_Vector* v, void* data, size_t i)
{
memcpy(sanei_gl_vector_get_element(v, i), data, v->element_size);
}
void sanei_gl_vector_destroy(Genesys_Vector* v)
{
if (v->data != NULL)
free(v->data);
v->size = 0;
v->capacity = 0;
v->element_size = 0;
}
static std::unique_ptr<std::vector<std::function<void()>>> s_functions_run_at_backend_exit;
void add_function_to_run_at_backend_exit(std::function<void()> function)

Wyświetl plik

@ -1339,23 +1339,6 @@ extern void sanei_genesys_usleep(unsigned int useconds);
// same as sanei_genesys_usleep just that the duration is in milliseconds
extern void sanei_genesys_sleep_ms(unsigned int milliseconds);
typedef struct Genesys_Vector
{
char* data;
size_t capacity; // capacity in elements
size_t size; // size in elements
size_t element_size;
} Genesys_Vector;
extern Genesys_Vector sanei_gl_vector_create(size_t element_size);
extern void sanei_gl_vector_reserve(Genesys_Vector* v, size_t count);
extern void sanei_gl_vector_resize(Genesys_Vector* v, size_t count);
extern void sanei_gl_vector_append(Genesys_Vector* v, void* data, size_t count);
extern void sanei_gl_vector_append_zero(Genesys_Vector* v, size_t count);
extern void* sanei_gl_vector_get_element(Genesys_Vector* v, size_t i);
extern void sanei_gl_vector_set_element(Genesys_Vector* v, void* data, size_t i);
extern void sanei_gl_vector_destroy(Genesys_Vector* v);
class SaneException : std::exception {
public:
SaneException(SANE_Status status) : status_(status) {}