☰
Current Page
Main Menu
Home
Home
Editing
ParseAndPackDecoder
Edit
Preview
h1
h2
h3
Keybinding
default
vim
emacs
Markup
Markdown
Plain Text
Pod
RDoc
reStructuredText
AsciiDoc
BibTeX
Creole
MediaWiki
Org-mode
Textile
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
--- title: ParseAndPackDecoder --- # 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 <!-- vim: filetype=markdown -->
Uploading file...
Sidebar
# SideBar * [Home][1] * [Projects][2] * * * <!-- --> * [Code][3] * [Tech][4] * [Network][5] * [MediaCentre][6] * [UAV][7] * * * <!-- --> * [Travel][8] * [Music][9] * [Horse Riding][10] * [Study][11] * [Games][12] * [Other Activities][13] * * * <!-- --> * [Car][14] * [House][15] * [Watch][16] * [Clothing][17] * [Miscellany][18] * * * [1]: /Home [2]: /Projects [3]: /Code/Code [4]: /Tech/Tech [5]: /Network/Network [6]: /MediaCentre/MediaCentre [7]: /UAV/UAV [8]: /Travel/Travel [9]: /Music/Music [10]: /HorseRiding/HorseRiding [11]: /Study/Study [12]: /Games/Games [13]: /Do/Do [14]: /Car/Car [15]: /House/House [16]: /Watch/Watch [17]: /Clothing/Clothing [18]: /Miscellany/Miscellany <!-- vim: filetype=markdown -->
Edit message:
Cancel