LINUX.ORG.RU

История изменений

Исправление 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)
});

Можно будет адаптировать под разные форматы. Компилятор оптимизирует что надо.