Самый простой способ - просто преобразовать данные в структуру:
struct reader
{
FILE *file;
alot_of_data data;
};
Затем определите обычные функции, которые принимают struct reader
в качестве первого аргумента:
int reader_construct(struct reader *r, const char *filename)
{
if((r->file = fopen(filename, "rt")) == NULL)
return 0;
/* do other inits */
return 1;
}
и функция считывателя становится:
int read_until(struct reader *r, arguments)
{
/* lots of interesting code */
}
Затем просто создайте массив структур, вызовите reader_construct()
и затем выполните вызовы read_until()
, как требуется.
Конечно, вы можете выбрать более динамический конструктор, который возвращает «объект»:
struct reader * reader_new(const char *filename)
{
struct reader *r = malloc(sizeof *r);
if(r == NULL)
return NULL;
if(reader_construct(r, filename))
return r;
return NULL;
}