M
Так понимаю, первый вариант более явный и меньше путаницы будет. Верно?
Size: a a a
M
D
D
🦊
M
M
🦊
M
D
M
D
M
D
D
CC
CC
CC
CC
..., int** something, char** something, unsigned char** something, ...
CC
struct Just_load_idx
{
unsigned char* meta_data;
uintmax_t file_size;
int number_of_bytes;
int number_of_dimensions;
int* dimensions;
unsigned char* data;
int number_of_objects;
const char* filename;
int swap_endianness;
int free_memory_on_dtor;
Just_load_idx() {
meta_data = 0;
swap_endianness = 1;
free_memory_on_dtor = 1;
}
void use_regular_load()
{
free_memory();
load_idx_file(filename, &meta_data, &file_size, &number_of_bytes, &number_of_dimensions, &dimensions, &data, &number_of_objects, swap_endianness);
}
void copy_to_destination(unsigned char* destination)
{
memcpy(destination, data, number_of_bytes * number_of_objects);
}
unsigned char* get_data(int free_mem_on_dtor)
{
use_regular_load();
free_memory_on_dtor = free_mem_on_dtor;
return data;
}
Just_load_idx(const char* filnam)
{
meta_data = 0;
swap_endianness = 1;
free_memory_on_dtor = 1;
filename = filnam;
use_regular_load();
}
Just_load_idx(const char* filnam, unsigned char* destination)
{
meta_data = 0;
swap_endianness = 1;
free_memory_on_dtor = 1;
filename = filnam;
copy_to_destination(destination);
}
void free_memory()
{
if (meta_data)
{
free(meta_data);
}
}
~Just_load_idx()
{
if (free_memory_on_dtor)
{
free_memory();
}
}
};
A