Vladimir Ljaschko (11.02.2010 11:30, просмотров: 195) ответил koyodza на ещё вопрос: как лучше сделать таблицу ссылок на данные?
Мысль одна - данные должны записываться в нативном виде, только не для процессора, а для человека. Одна из структур, которые могут быть прочитаны по интерфейсу, описывается вот так, в отдельном файле: STATISTIC_MACRO ( long, pump_pulses , "Pump pulses" )
STATISTIC_MACRO ( long, device_on_sec , "Device ON sec" )
STATISTIC_MACRO ( long, process_sec , "Process sec" )
STATISTIC_MACRO ( long, conc_volume_01ml , "Conc vol. 0.1 ml" )
STATISTIC_MACRO ( long, sol_volume_20ml , "Sol Volume,20ml" )
STATISTIC_MACRO ( uint, service_entry , "Service entry" )
STATISTIC_MACRO ( uint, last_process_number, "Process num" )
STATISTIC_MACRO ( uchar, consumption_number, "Consum num" )
STATISTIC_MACRO ( uchar, wait_date, "wait date" )
STATISTIC_MACRO ( long, can_volume, "Can volume, ml" )
И разворачивается с помощью макросов.
Ниже написана функция чтения переменной (в том числе и из этой структуры) по интерфейсу. Если привыкнуть, то это не больно :)
#define IMPL_PROLOG(obj) void obj##GetVar(DompParserResultType * dpr) { switch (dpr->property) {
#define IMPL_EPILOG() default: AbsentP(); } }
#define IMPL_VARIABLE(obj, i, name, get, set) case i: get;
#define IMPL_SETUP(obj, i) case i: dpr->tx_value=GetSetup(i); return;
#define IMPL_STATISTIC(obj, i ) case i: dpr->tx_value=GetStatistic(i); return;
#define IMPL_HISTORY(obj, i ) case i: dpr->tx_value=GetHistory(i); return;
#include objects_file
#undef IMPL_PROLOG
#undef IMPL_EPILOG
#undef IMPL_VARIABLE
#undef IMPL_SETUP
#undef IMPL_STATISTIC
#undef IMPL_HISTORY