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
- Member access looks a bit messy
Bottom-up access is counter-intuitive cm.parent.pdata1 = parent_data1; cm.parent.pdata2 = parent_data2;
Can only be used for fixed-size message hierarchies
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