Strategy
- P-trie in code, top-down parsing
- Message storage allocated from pool
- Bottom-up packaging
Example
struct BASE_MSG {
enum MSG_TYPE type;
size_t size;
};
struct PARENT_MSG {
struct BASE_MSG base;
enum PARENT_MSG_TYPE type;
int pdata1;
};
struct CHILD_MSG {
struct PARENT_MSG parent;
int cdata1;
int cdata2;
};
Pro
- Easy to initialise
CHILD_MSG cm = {
{
{
MSG_TYPE_PARENT, // contains PARENT_MSG
sizeof(CHILD_MSG)
}, // BASE_MSG
PARENT_MSG_TYPE_CHILD, // contains CHILD_MSG
parent_data1
}, //PARENT_MSG
child_data1,
child_data2
}; // CHILD_MSG
Con
Notes
- Either use global type for all messages (used in BASE_MSG and inherited)
- Or hierarchical type member (present in each sub-message)
- Global size for passing around safely
- Or hierarchical types