История изменений
Исправление MOPKOBKA, (текущая версия) :
На вопрос как всегда не отвечу, но мнение имею.
- Убрать выравнивание
Сделать функции сериализации для базовых типов.
- Переставить байтики под endiness (если не совпадает с endiness сериализации)
Встроенные функции компилятора.
- Сделать то же самое для вложенных структур
- Вытащить динамические массивы (в самой структуре представлены двумя полями - длина и первый элемент) из кучи и положить их линейно с остальными полями
Сам.
Примерно так все будет:
struct st_name_xxx {
int x;
int y;
const char *s;
...
};
struct st_name_yyy {
struct st_name_xxx st;
};
/* create METAINFO_TYPE_st_name_xxx
struct metainfo_t METAINFO_TYPE_st_name_xxx[] = { __BODY };
*/
DEFINE_METAINFO(st_name_xxx, {
METAINFO_FIELD(/* offset */ x, /* name */ "x", /* srztype */ METAINFO_TYPE_INT),
METAINFO_FIELD(y, "y", METAINFO_TYPE_INT),
METAINFO_FIELD(s, "s", METAINFO_TYPE_STR)
});
DEFINE_METAINFO(st_name_yyy, {
METAINFO_FIELD(st, "st", METAINFO_TYPE_st_name_xxx)
});
Можно будет адаптировать под разные форматы. Компилятор оптимизирует что надо.
Исправление MOPKOBKA, :
На вопрос как всегда не отвечу, но мнение имею.
- Убрать выравнивание
Сделать функции сериализации для базовых типов.
- Переставить байтики под endiness (если не совпадает с endiness сериализации)
Встроенные функции компилятора.
- Сделать то же самое для вложенных структур
- Вытащить динамические массивы (в самой структуре представлены двумя полями - длина и первый элемент) из кучи и положить их линейно с остальными полями
Сам.
Примерно так все будет:
struct st_name_xxx {
int x;
int y;
const char *s;
...
};
struct st_name_yyy {
struct st_name_xxx st;
};
/* create METAINFO_TYPE_st_name_xxx */
DEFINE_METAINFO(st_name_xxx, {
METAINFO_FIELD(/* offset */ x, /* name */ "x", /* srztype */ METAINFO_TYPE_INT),
METAINFO_FIELD(y, "y", METAINFO_TYPE_INT),
METAINFO_FIELD(s, "s", METAINFO_TYPE_STR)
});
DEFINE_METAINFO(st_name_yyy, {
METAINFO_FIELD(st, "st", METAINFO_TYPE_st_name_xxx)
});
Можно будет адаптировать под разные форматы. Компилятор оптимизирует что надо.
Исходная версия MOPKOBKA, :
На вопрос как всегда не отвечу, но мнение имею.
- Убрать выравнивание
Сделать функции сериализации для базовых типов.
- Переставить байтики под endiness (если не совпадает с endiness сериализации)
Встроенные функции компилятора.
- Сделать то же самое для вложенных структур
- Вытащить динамические массивы (в самой структуре представлены двумя полями - длина и первый элемент) из кучи и положить их линейно с остальными полями
Сам.
Примерно так все будет:
struct st_name_xxx {
int x;
int y;
const char *s;
...
};
/* create METAINFO_TYPE_st_name_xxx */
DEFINE_METAINFO(st_name_xxx, {
METAINFO_FIELD(/* offset */ x, /* name */ "x", /* srztype */ METAINFO_TYPE_INT),
METAINFO_FIELD(y, "y", METAINFO_TYPE_INT),
METAINFO_FIELD(s, "s", METAINFO_TYPE_STR)
});
Можно будет адаптировать под разные форматы. Компилятор оптимизирует что надо.