☰
Current Page
Main Menu
Home
Home
Editing ParseAndPackDecoder
Edit
Preview
H1
H2
H3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
Markdown
Plain Text
Pod
RDoc
reStructuredText
Rendering unavailable for
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