From 6cd99768ae468cf4dc501a8d951956de9357f203 Mon Sep 17 00:00:00 2001 From: deeaitch Date: Mon, 5 Oct 2026 18:50:00 -0400 Subject: [PATCH] update doxygen with last cahnges --- docs/dbcframework.tag | 148 ++- docs/doxygen_warnings.log | 31 +- docs/html/annotated.html | 62 +- docs/html/annotated_dup.js | 9 +- docs/html/bc_sd.png | Bin 0 -> 635 bytes docs/html/classDbcCommentHandler-members.html | 110 ++ docs/html/classDbcCommentHandler.html | 170 +++ ...classDbcCommentHandler__inherit__graph.map | 5 + ...classDbcCommentHandler__inherit__graph.md5 | 1 + ...classDbcCommentHandler__inherit__graph.svg | 78 ++ ...sDbcCommentHandler__inherit__graph_org.svg | 53 + docs/html/classDbcDecodeBuilder-members.html | 23 +- docs/html/classDbcDecodeBuilder.html | 33 +- docs/html/classDbcDecoder-members.html | 23 +- docs/html/classDbcDecoder.html | 41 +- docs/html/classDbcFrameHandler-members.html | 110 ++ docs/html/classDbcFrameHandler.html | 170 +++ .../classDbcFrameHandler__inherit__graph.map | 5 + .../classDbcFrameHandler__inherit__graph.md5 | 1 + .../classDbcFrameHandler__inherit__graph.svg | 78 ++ ...assDbcFrameHandler__inherit__graph_org.svg | 53 + docs/html/classDbcParser-members.html | 23 +- docs/html/classDbcParser.html | 41 +- docs/html/classDbcSignalHandler-members.html | 110 ++ docs/html/classDbcSignalHandler.html | 170 +++ .../classDbcSignalHandler__inherit__graph.map | 5 + .../classDbcSignalHandler__inherit__graph.md5 | 1 + .../classDbcSignalHandler__inherit__graph.svg | 78 ++ ...ssDbcSignalHandler__inherit__graph_org.svg | 53 + .../classDbcStatementDispatcher-members.html | 111 ++ docs/html/classDbcStatementDispatcher.html | 212 ++++ docs/html/classDbcStatementDispatcher.js | 4 + .../classDbcStatementHandler-members.html | 110 ++ docs/html/classDbcStatementHandler.html | 129 ++ ...assDbcStatementHandler__inherit__graph.map | 11 + ...assDbcStatementHandler__inherit__graph.md5 | 1 + ...assDbcStatementHandler__inherit__graph.svg | 156 +++ ...bcStatementHandler__inherit__graph_org.svg | 131 +++ docs/html/classDbcTreeBuilder-members.html | 23 +- docs/html/classDbcTreeBuilder.html | 31 +- docs/html/classTreeNode-members.html | 23 +- docs/html/classTreeNode.html | 119 +- docs/html/classTypeFactory-members.html | 116 ++ docs/html/classTypeFactory.html | 432 +++++++ docs/html/classTypeFactory.js | 7 + .../html/classTypeFactory__inherit__graph.map | 5 + .../html/classTypeFactory__inherit__graph.md5 | 1 + .../html/classTypeFactory__inherit__graph.svg | 100 ++ .../classTypeFactory__inherit__graph_org.svg | 75 ++ docs/html/classes.html | 27 +- docs/html/dbc__database_8h.html | 27 +- docs/html/dbc__database_8h_source.html | 36 +- docs/html/dbc__decode__builder_8cpp.html | 27 +- .../dbc__decode__builder_8cpp_source.html | 198 ++-- docs/html/dbc__decode__builder_8h.html | 27 +- docs/html/dbc__decode__builder_8h_source.html | 42 +- docs/html/dbc__decoder_8cpp.html | 27 +- docs/html/dbc__decoder_8cpp_source.html | 320 ++--- docs/html/dbc__decoder_8h.html | 32 +- docs/html/dbc__decoder_8h_source.html | 202 ++-- docs/html/dbc__decoder__test_8cpp_source.html | 274 +++++ docs/html/dbc__parser_8cpp.html | 33 +- docs/html/dbc__parser_8cpp_source.html | 438 ++----- docs/html/dbc__parser_8h.html | 29 +- docs/html/dbc__parser_8h_source.html | 82 +- docs/html/dbc__parser__test_8cpp_source.html | 373 ++++++ .../dbc__statement__handler_8cpp_source.html | 457 +++++++ .../dbc__statement__handler_8h_source.html | 199 ++++ docs/html/dbc__tree__builder_8cpp.html | 27 +- docs/html/dbc__tree__builder_8cpp_source.html | 68 +- docs/html/dbc__tree__builder_8h.html | 27 +- docs/html/dbc__tree__builder_8h_source.html | 40 +- docs/html/decode__database_8h.html | 41 +- docs/html/decode__database_8h_source.html | 255 ++-- .../dir_59425e443f801f1f2fd8bbe4959a3ccf.html | 114 ++ .../dir_59425e443f801f1f2fd8bbe4959a3ccf.js | 5 + docs/html/doc.svg | 12 + docs/html/docd.svg | 12 + docs/html/doxygen.css | 1046 ++++++++++------- docs/html/doxygen.svg | 4 +- docs/html/dynsections.js | 71 ++ docs/html/files.html | 61 +- docs/html/files_dup.js | 6 +- docs/html/folderclosed.svg | 11 + docs/html/folderclosedd.svg | 11 + docs/html/folderopen.svg | 17 + docs/html/folderopend.svg | 12 + docs/html/frame__info_8h.html | 31 +- docs/html/frame__info_8h_source.html | 92 +- docs/html/functions.html | 30 +- docs/html/functions_func.html | 30 +- docs/html/functions_vars.html | 27 +- docs/html/globals.html | 23 +- docs/html/globals_enum.html | 25 +- docs/html/graph_legend.html | 33 +- docs/html/graph_legend.md5 | 2 +- docs/html/graph_legend.svg | 100 +- docs/html/hierarchy.html | 135 +++ docs/html/hierarchy.js | 28 + docs/html/index.html | 23 +- docs/html/index.qhp | 291 ++++- docs/html/inherit_graph_0.map | 3 + docs/html/inherit_graph_0.md5 | 1 + docs/html/inherit_graph_0.svg | 21 + docs/html/inherit_graph_1.map | 3 + docs/html/inherit_graph_1.md5 | 1 + docs/html/inherit_graph_1.svg | 21 + docs/html/inherit_graph_10.map | 3 + docs/html/inherit_graph_10.md5 | 1 + docs/html/inherit_graph_10.svg | 21 + docs/html/inherit_graph_11.map | 3 + docs/html/inherit_graph_11.md5 | 1 + docs/html/inherit_graph_11.svg | 21 + docs/html/inherit_graph_12.map | 3 + docs/html/inherit_graph_12.md5 | 1 + docs/html/inherit_graph_12.svg | 21 + docs/html/inherit_graph_13.map | 3 + docs/html/inherit_graph_13.md5 | 1 + docs/html/inherit_graph_13.svg | 21 + docs/html/inherit_graph_14.map | 3 + docs/html/inherit_graph_14.md5 | 1 + docs/html/inherit_graph_14.svg | 21 + docs/html/inherit_graph_15.map | 3 + docs/html/inherit_graph_15.md5 | 1 + docs/html/inherit_graph_15.svg | 21 + docs/html/inherit_graph_16.map | 3 + docs/html/inherit_graph_16.md5 | 1 + docs/html/inherit_graph_16.svg | 21 + docs/html/inherit_graph_17.map | 3 + docs/html/inherit_graph_17.md5 | 1 + docs/html/inherit_graph_17.svg | 21 + docs/html/inherit_graph_18.map | 3 + docs/html/inherit_graph_18.md5 | 1 + docs/html/inherit_graph_18.svg | 21 + docs/html/inherit_graph_19.map | 3 + docs/html/inherit_graph_19.md5 | 1 + docs/html/inherit_graph_19.svg | 22 + docs/html/inherit_graph_2.map | 3 + docs/html/inherit_graph_2.md5 | 1 + docs/html/inherit_graph_2.svg | 21 + docs/html/inherit_graph_20.map | 3 + docs/html/inherit_graph_20.md5 | 1 + docs/html/inherit_graph_20.svg | 22 + docs/html/inherit_graph_3.map | 3 + docs/html/inherit_graph_3.md5 | 1 + docs/html/inherit_graph_3.svg | 21 + docs/html/inherit_graph_4.map | 3 + docs/html/inherit_graph_4.md5 | 1 + docs/html/inherit_graph_4.svg | 21 + docs/html/inherit_graph_5.map | 3 + docs/html/inherit_graph_5.md5 | 1 + docs/html/inherit_graph_5.svg | 21 + docs/html/inherit_graph_6.map | 9 + docs/html/inherit_graph_6.md5 | 1 + docs/html/inherit_graph_6.svg | 75 ++ docs/html/inherit_graph_7.map | 3 + docs/html/inherit_graph_7.md5 | 1 + docs/html/inherit_graph_7.svg | 21 + docs/html/inherit_graph_8.map | 3 + docs/html/inherit_graph_8.md5 | 1 + docs/html/inherit_graph_8.svg | 21 + docs/html/inherit_graph_9.map | 3 + docs/html/inherit_graph_9.md5 | 1 + docs/html/inherit_graph_9.svg | 21 + docs/html/inherits.html | 130 ++ docs/html/jquery.js | 7 +- docs/html/main_8cpp.html | 41 +- docs/html/main_8cpp_source.html | 323 ++--- docs/html/md_README.html | 408 ++++--- docs/html/md_tests_2README.html | 127 ++ docs/html/menu.js | 33 +- docs/html/menudata.js | 1 + docs/html/minus.svg | 8 + docs/html/minusd.svg | 8 + docs/html/nav_fd.png | Bin 0 -> 169 bytes docs/html/nav_hd.png | Bin 0 -> 114 bytes docs/html/navtree.css | 22 +- docs/html/navtree.js | 28 +- docs/html/navtreedata.js | 79 +- docs/html/navtreeindex0.js | 355 +++--- docs/html/pages.html | 24 +- docs/html/plus.svg | 9 + docs/html/plusd.svg | 9 + docs/html/resize.js | 81 +- docs/html/search/all_0.js | 3 +- docs/html/search/all_1.js | 5 +- docs/html/search/all_10.js | 3 +- docs/html/search/all_11.js | 21 +- docs/html/search/all_12.js | 22 + docs/html/search/all_13.js | 21 + docs/html/search/all_14.js | 32 + docs/html/search/all_15.js | 11 + docs/html/search/all_16.js | 8 + docs/html/search/all_17.js | 5 + docs/html/search/all_2.js | 3 +- docs/html/search/all_3.js | 26 +- docs/html/search/all_4.js | 16 +- docs/html/search/all_5.js | 12 +- docs/html/search/all_6.js | 9 +- docs/html/search/all_7.js | 62 +- docs/html/search/all_8.js | 6 +- docs/html/search/all_9.js | 18 +- docs/html/search/all_a.js | 8 +- docs/html/search/all_b.js | 4 +- docs/html/search/all_c.js | 14 +- docs/html/search/all_d.js | 10 +- docs/html/search/all_e.js | 9 +- docs/html/search/all_f.js | 9 +- docs/html/search/classes_0.js | 26 +- docs/html/search/classes_4.js | 4 +- docs/html/search/close.svg | 19 +- docs/html/search/functions_1.js | 2 +- docs/html/search/functions_2.js | 4 +- docs/html/search/functions_3.js | 3 +- docs/html/search/functions_4.js | 7 +- docs/html/search/functions_5.js | 7 +- docs/html/search/functions_6.js | 2 +- docs/html/search/functions_7.js | 4 + docs/html/search/functions_8.js | 4 + docs/html/search/mag.svg | 24 + docs/html/search/mag_d.svg | 24 + docs/html/search/mag_sel.svg | 53 +- docs/html/search/mag_seld.svg | 31 + docs/html/search/pages_0.js | 2 +- docs/html/search/pages_1.js | 7 + docs/html/search/pages_2.js | 4 + docs/html/search/pages_3.js | 4 + docs/html/search/pages_4.js | 5 + docs/html/search/pages_5.js | 4 + docs/html/search/search.css | 110 +- docs/html/search/search.js | 146 ++- docs/html/search/searchdata.js | 6 +- docs/html/search/variables_1.js | 4 +- docs/html/search/variables_2.js | 4 +- docs/html/search/variables_3.js | 2 +- docs/html/search/variables_4.js | 2 +- docs/html/search/variables_5.js | 2 +- docs/html/search/variables_6.js | 2 +- docs/html/search/variables_7.js | 4 +- docs/html/search/variables_8.js | 2 +- docs/html/search/variables_9.js | 2 +- docs/html/search/variables_a.js | 4 +- docs/html/search/variables_b.js | 4 +- docs/html/search/variables_c.js | 2 +- docs/html/search/variables_d.js | 2 +- docs/html/search/variables_e.js | 2 +- docs/html/search/variables_f.js | 2 +- docs/html/signal__info_8h.html | 31 +- docs/html/signal__info_8h_source.html | 109 +- docs/html/splitbard.png | Bin 0 -> 282 bytes docs/html/structDbcDatabase-members.html | 23 +- docs/html/structDbcDatabase.html | 33 +- docs/html/structDbcParseContext-members.html | 110 ++ docs/html/structDbcParseContext.html | 159 +++ docs/html/structDecodeDatabase-members.html | 23 +- docs/html/structDecodeDatabase.html | 39 +- docs/html/structDecodeFrame-members.html | 23 +- docs/html/structDecodeFrame.html | 103 +- docs/html/structDecodeSignal-members.html | 23 +- docs/html/structDecodeSignal.html | 117 +- .../html/structDecodedFrameValue-members.html | 23 +- docs/html/structDecodedFrameValue.html | 55 +- .../structDecodedSignalValue-members.html | 25 +- docs/html/structDecodedSignalValue.html | 95 +- docs/html/structDecodedSignalValue.js | 2 +- docs/html/structFrameInfo-members.html | 23 +- docs/html/structFrameInfo.html | 81 +- docs/html/structFrameKey-members.html | 23 +- docs/html/structFrameKey.html | 55 +- docs/html/structFrameKeyHasher-members.html | 23 +- docs/html/structFrameKeyHasher.html | 33 +- docs/html/structRawCanFrame-members.html | 23 +- docs/html/structRawCanFrame.html | 55 +- docs/html/structSignalInfo-members.html | 23 +- docs/html/structSignalInfo.html | 115 +- docs/html/svg.min.js | 46 + docs/html/tab_ad.png | Bin 0 -> 135 bytes docs/html/tab_bd.png | Bin 0 -> 173 bytes docs/html/tab_hd.png | Bin 0 -> 180 bytes docs/html/tab_sd.png | Bin 0 -> 188 bytes docs/html/tabs.css | 2 +- docs/html/tree__node_8cpp.html | 27 +- docs/html/tree__node_8cpp_source.html | 174 +-- docs/html/tree__node_8h.html | 37 +- docs/html/tree__node_8h_source.html | 94 +- docs/html/typefactory_8h_source.html | 178 +++ 286 files changed, 10735 insertions(+), 3471 deletions(-) create mode 100644 docs/html/bc_sd.png create mode 100644 docs/html/classDbcCommentHandler-members.html create mode 100644 docs/html/classDbcCommentHandler.html create mode 100644 docs/html/classDbcCommentHandler__inherit__graph.map create mode 100644 docs/html/classDbcCommentHandler__inherit__graph.md5 create mode 100644 docs/html/classDbcCommentHandler__inherit__graph.svg create mode 100644 docs/html/classDbcCommentHandler__inherit__graph_org.svg create mode 100644 docs/html/classDbcFrameHandler-members.html create mode 100644 docs/html/classDbcFrameHandler.html create mode 100644 docs/html/classDbcFrameHandler__inherit__graph.map create mode 100644 docs/html/classDbcFrameHandler__inherit__graph.md5 create mode 100644 docs/html/classDbcFrameHandler__inherit__graph.svg create mode 100644 docs/html/classDbcFrameHandler__inherit__graph_org.svg create mode 100644 docs/html/classDbcSignalHandler-members.html create mode 100644 docs/html/classDbcSignalHandler.html create mode 100644 docs/html/classDbcSignalHandler__inherit__graph.map create mode 100644 docs/html/classDbcSignalHandler__inherit__graph.md5 create mode 100644 docs/html/classDbcSignalHandler__inherit__graph.svg create mode 100644 docs/html/classDbcSignalHandler__inherit__graph_org.svg create mode 100644 docs/html/classDbcStatementDispatcher-members.html create mode 100644 docs/html/classDbcStatementDispatcher.html create mode 100644 docs/html/classDbcStatementDispatcher.js create mode 100644 docs/html/classDbcStatementHandler-members.html create mode 100644 docs/html/classDbcStatementHandler.html create mode 100644 docs/html/classDbcStatementHandler__inherit__graph.map create mode 100644 docs/html/classDbcStatementHandler__inherit__graph.md5 create mode 100644 docs/html/classDbcStatementHandler__inherit__graph.svg create mode 100644 docs/html/classDbcStatementHandler__inherit__graph_org.svg create mode 100644 docs/html/classTypeFactory-members.html create mode 100644 docs/html/classTypeFactory.html create mode 100644 docs/html/classTypeFactory.js create mode 100644 docs/html/classTypeFactory__inherit__graph.map create mode 100644 docs/html/classTypeFactory__inherit__graph.md5 create mode 100644 docs/html/classTypeFactory__inherit__graph.svg create mode 100644 docs/html/classTypeFactory__inherit__graph_org.svg create mode 100644 docs/html/dbc__decoder__test_8cpp_source.html create mode 100644 docs/html/dbc__parser__test_8cpp_source.html create mode 100644 docs/html/dbc__statement__handler_8cpp_source.html create mode 100644 docs/html/dbc__statement__handler_8h_source.html create mode 100644 docs/html/dir_59425e443f801f1f2fd8bbe4959a3ccf.html create mode 100644 docs/html/dir_59425e443f801f1f2fd8bbe4959a3ccf.js create mode 100644 docs/html/doc.svg create mode 100644 docs/html/docd.svg create mode 100644 docs/html/folderclosed.svg create mode 100644 docs/html/folderclosedd.svg create mode 100644 docs/html/folderopen.svg create mode 100644 docs/html/folderopend.svg create mode 100644 docs/html/hierarchy.html create mode 100644 docs/html/hierarchy.js create mode 100644 docs/html/inherit_graph_0.map create mode 100644 docs/html/inherit_graph_0.md5 create mode 100644 docs/html/inherit_graph_0.svg create mode 100644 docs/html/inherit_graph_1.map create mode 100644 docs/html/inherit_graph_1.md5 create mode 100644 docs/html/inherit_graph_1.svg create mode 100644 docs/html/inherit_graph_10.map create mode 100644 docs/html/inherit_graph_10.md5 create mode 100644 docs/html/inherit_graph_10.svg create mode 100644 docs/html/inherit_graph_11.map create mode 100644 docs/html/inherit_graph_11.md5 create mode 100644 docs/html/inherit_graph_11.svg create mode 100644 docs/html/inherit_graph_12.map create mode 100644 docs/html/inherit_graph_12.md5 create mode 100644 docs/html/inherit_graph_12.svg create mode 100644 docs/html/inherit_graph_13.map create mode 100644 docs/html/inherit_graph_13.md5 create mode 100644 docs/html/inherit_graph_13.svg create mode 100644 docs/html/inherit_graph_14.map create mode 100644 docs/html/inherit_graph_14.md5 create mode 100644 docs/html/inherit_graph_14.svg create mode 100644 docs/html/inherit_graph_15.map create mode 100644 docs/html/inherit_graph_15.md5 create mode 100644 docs/html/inherit_graph_15.svg create mode 100644 docs/html/inherit_graph_16.map create mode 100644 docs/html/inherit_graph_16.md5 create mode 100644 docs/html/inherit_graph_16.svg create mode 100644 docs/html/inherit_graph_17.map create mode 100644 docs/html/inherit_graph_17.md5 create mode 100644 docs/html/inherit_graph_17.svg create mode 100644 docs/html/inherit_graph_18.map create mode 100644 docs/html/inherit_graph_18.md5 create mode 100644 docs/html/inherit_graph_18.svg create mode 100644 docs/html/inherit_graph_19.map create mode 100644 docs/html/inherit_graph_19.md5 create mode 100644 docs/html/inherit_graph_19.svg create mode 100644 docs/html/inherit_graph_2.map create mode 100644 docs/html/inherit_graph_2.md5 create mode 100644 docs/html/inherit_graph_2.svg create mode 100644 docs/html/inherit_graph_20.map create mode 100644 docs/html/inherit_graph_20.md5 create mode 100644 docs/html/inherit_graph_20.svg create mode 100644 docs/html/inherit_graph_3.map create mode 100644 docs/html/inherit_graph_3.md5 create mode 100644 docs/html/inherit_graph_3.svg create mode 100644 docs/html/inherit_graph_4.map create mode 100644 docs/html/inherit_graph_4.md5 create mode 100644 docs/html/inherit_graph_4.svg create mode 100644 docs/html/inherit_graph_5.map create mode 100644 docs/html/inherit_graph_5.md5 create mode 100644 docs/html/inherit_graph_5.svg create mode 100644 docs/html/inherit_graph_6.map create mode 100644 docs/html/inherit_graph_6.md5 create mode 100644 docs/html/inherit_graph_6.svg create mode 100644 docs/html/inherit_graph_7.map create mode 100644 docs/html/inherit_graph_7.md5 create mode 100644 docs/html/inherit_graph_7.svg create mode 100644 docs/html/inherit_graph_8.map create mode 100644 docs/html/inherit_graph_8.md5 create mode 100644 docs/html/inherit_graph_8.svg create mode 100644 docs/html/inherit_graph_9.map create mode 100644 docs/html/inherit_graph_9.md5 create mode 100644 docs/html/inherit_graph_9.svg create mode 100644 docs/html/inherits.html create mode 100644 docs/html/md_tests_2README.html create mode 100644 docs/html/minus.svg create mode 100644 docs/html/minusd.svg create mode 100644 docs/html/nav_fd.png create mode 100644 docs/html/nav_hd.png create mode 100644 docs/html/plus.svg create mode 100644 docs/html/plusd.svg create mode 100644 docs/html/search/all_12.js create mode 100644 docs/html/search/all_13.js create mode 100644 docs/html/search/all_14.js create mode 100644 docs/html/search/all_15.js create mode 100644 docs/html/search/all_16.js create mode 100644 docs/html/search/all_17.js create mode 100644 docs/html/search/functions_7.js create mode 100644 docs/html/search/functions_8.js create mode 100644 docs/html/search/mag.svg create mode 100644 docs/html/search/mag_d.svg create mode 100644 docs/html/search/mag_seld.svg create mode 100644 docs/html/search/pages_1.js create mode 100644 docs/html/search/pages_2.js create mode 100644 docs/html/search/pages_3.js create mode 100644 docs/html/search/pages_4.js create mode 100644 docs/html/search/pages_5.js create mode 100644 docs/html/splitbard.png create mode 100644 docs/html/structDbcParseContext-members.html create mode 100644 docs/html/structDbcParseContext.html create mode 100644 docs/html/svg.min.js create mode 100644 docs/html/tab_ad.png create mode 100644 docs/html/tab_bd.png create mode 100644 docs/html/tab_hd.png create mode 100644 docs/html/tab_sd.png create mode 100644 docs/html/typefactory_8h_source.html diff --git a/docs/dbcframework.tag b/docs/dbcframework.tag index 7d60b80..23cb98d 100644 --- a/docs/dbcframework.tag +++ b/docs/dbcframework.tag @@ -1,37 +1,37 @@ - + dbc_database.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__database_8h.html - frame_info.h + frame_info.h DbcDatabase dbc_decode_builder.cpp - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__decode__builder_8cpp.html - dbc_decode_builder.h + dbc_decode_builder.h dbc_decode_builder.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__decode__builder_8h.html - dbc_database.h - decode_database.h + dbc_database.h + decode_database.h DbcDecodeBuilder dbc_decoder.cpp - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__decoder_8cpp.html - dbc_decoder.h + dbc_decoder.h dbc_decoder.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__decoder_8h.html - decode_database.h + decode_database.h RawCanFrame DecodedSignalValue DecodedFrameValue @@ -39,34 +39,34 @@ dbc_parser.cpp - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__parser_8cpp.html - dbc_parser.h + dbc_parser.h dbc_parser.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__parser_8h.html - dbc_database.h + dbc_database.h DbcParser dbc_tree_builder.cpp - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__tree__builder_8cpp.html - dbc_tree_builder.h + dbc_tree_builder.h dbc_tree_builder.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + dbc__tree__builder_8h.html - dbc_database.h - tree_node.h + dbc_database.h + tree_node.h DbcTreeBuilder decode_database.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + decode__database_8h.html DecodeSignal DecodeFrame @@ -94,38 +94,38 @@ frame_info.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + frame__info_8h.html - signal_info.h + signal_info.h FrameInfo main.cpp - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + main_8cpp.html - dbc_parser.h - dbc_tree_builder.h - dbc_decode_builder.h - dbc_decoder.h + dbc_decode_builder.h + dbc_decoder.h + dbc_parser.h + dbc_tree_builder.h signal_info.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + signal__info_8h.html SignalInfo tree_node.cpp - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + tree__node_8cpp.html - tree_node.h + tree_node.h tree_node.h - /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/ + tree__node_8h.html - frame_info.h - signal_info.h + frame_info.h + signal_info.h TreeNode @@ -138,6 +138,11 @@ Signal + + DbcCommentHandler + classDbcCommentHandler.html + DbcStatementHandler + DbcDatabase structDbcDatabase.html @@ -178,6 +183,15 @@ (const DecodeDatabase &database, const RawCanFrame &frame) const + + DbcFrameHandler + classDbcFrameHandler.html + DbcStatementHandler + + + DbcParseContext + structDbcParseContext.html + DbcParser classDbcParser.html @@ -189,6 +203,26 @@ (const std::string &filePath) const + + DbcSignalHandler + classDbcSignalHandler.html + DbcStatementHandler + + + DbcStatementDispatcher + classDbcStatementDispatcher.html + + bool + Dispatch + classDbcStatementDispatcher.html + a495c2d5c7ebb8103b1987cdd87c142ed + (const std::string &line, DbcParseContext &context) const + + + + DbcStatementHandler + classDbcStatementHandler.html + DbcTreeBuilder classDbcTreeBuilder.html @@ -240,10 +274,10 @@ - std::int64_t + std::variant< std::int64_t, std::uint64_t > rawValue structDecodedSignalValue.html - a5138b825940e34689f7b3891627ee9ec + a95db4f7f93b5f311e8f272833e45055e @@ -685,9 +719,49 @@ () const + + TypeFactory + classTypeFactory.html + class ClassId + class BaseClass + class... Args + + void + registerType + classTypeFactory.html + ad6d85795285ee21193ac03e1b24762d3 + (const ClassId &id) + + + CreatorFn + creator + classTypeFactory.html + ad82f537569ece3d3a4a376523fa94473 + (const ClassId &id) const + + + BasePtr + create + classTypeFactory.html + a3f43b03d6e3a0fd503fdec01ecf62e9f + (const ClassId &id, Args... args) const + + + bool + contains + classTypeFactory.html + a1a119ad2956abe146213c6ca124d8dd4 + (const ClassId &id) const + + md_README DBC Parser and Runtime Decode Module Documentation md_README.html + + md_tests_2README + Decoder regression tests + md_tests_2README.html + diff --git a/docs/doxygen_warnings.log b/docs/doxygen_warnings.log index 4fab2c9..cf37f61 100644 --- a/docs/doxygen_warnings.log +++ b/docs/doxygen_warnings.log @@ -1,10 +1,25 @@ -/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/main.cpp:97: warning: Member main(int argc, char *argv[]) (function) of file main.cpp is not documented. -/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:133: warning: Member frames (variable) of struct DecodeDatabase is not documented. -/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:134: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented. -/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:108: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented. -/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:113: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented. -/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:100: warning: Member canId (variable) of struct FrameKey is not documented. -/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:101: warning: Member isExtended (variable) of struct FrameKey is not documented. -/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:122: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:38: warning: Compound DbcCommentHandler is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:22: warning: Compound DbcFrameHandler is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:30: warning: Compound DbcSignalHandler is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:16: warning: Compound DbcStatementHandler is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/main.cpp:98: warning: Member main(int argc, char *argv[]) (function) of file main.cpp is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:40: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcCommentHandler is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:24: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcFrameHandler is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:12: warning: Member database (variable) of struct DbcParseContext is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:13: warning: Member currentFrame (variable) of struct DbcParseContext is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:32: warning: Member Handle(const std::string &line, DbcParseContext &context) const override (function) of class DbcSignalHandler is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:52: warning: Member RegisterType(const std::string &keyword) (function) of class DbcStatementDispatcher is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/dbc_statement_handler.h:19: warning: Member Handle(const std::string &line, DbcParseContext &context) const =0 (function) of class DbcStatementHandler is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:112: warning: Member frames (variable) of struct DecodeDatabase is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:113: warning: Member frameIndexByKey (variable) of struct DecodeDatabase is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:88: warning: Member FrameKey(std::uint32_t id, bool extended) (function) of struct FrameKey is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:92: warning: Member operator==(const FrameKey &other) const (function) of struct FrameKey is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:81: warning: Member canId (variable) of struct FrameKey is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:82: warning: Member isExtended (variable) of struct FrameKey is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/decode_database.h:101: warning: Member operator()(const FrameKey &key) const (function) of struct FrameKeyHasher is not documented. /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tree_node.h:59: warning: Member TreeNode(TreeNode &&)=default (function) of class TreeNode is not documented. /home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/tree_node.h:60: warning: Member operator=(TreeNode &&)=default (function) of class TreeNode is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/typefactory.h:61: warning: Member BasePtr (typedef) of class TypeFactory is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/typefactory.h:62: warning: Member CreatorFn (typedef) of class TypeFactory is not documented. +/home/deeaitch/work/3.projects/git.himro.ca/automotive/dbc/typefactory.h:110: warning: Member classes (variable) of class TypeFactory is not documented. +error: failed to run qhelpgenerator on index.qhp diff --git a/docs/html/annotated.html b/docs/html/annotated.html index f42465c..8c4c0bf 100644 --- a/docs/html/annotated.html +++ b/docs/html/annotated.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Class List @@ -34,10 +34,10 @@ - + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -88,22 +95,29 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable();
Here are the classes, structs, unions and interfaces with brief descriptions:
- - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + +
 CDbcDatabaseParsed DBC content stored in a simple internal form
 CDbcDecodeBuilderConverts parsed DBC data into runtime decode database
 CDbcDecoderRuntime CAN decoder using prebuilt decode database
 CDbcParserMinimal DBC parser
 CDbcTreeBuilderBuilds a simple tree from parsed DBC database
 CDecodeDatabaseRuntime decode database with fast lookup by CAN ID
 CDecodedFrameValueFully decoded frame
 CDecodedSignalValueOne decoded signal value
 CDecodeFrameRuntime-ready frame definition
 CDecodeSignalRuntime-ready signal definition
 CFrameInfoDescribes one CAN frame from a DBC file
 CFrameKeyKey for fast frame lookup
 CFrameKeyHasherHasher for frame key
 CRawCanFrameRaw CAN frame used for runtime or trace decoding
 CSignalInfoDescribes one signal inside a DBC frame
 CTreeNodeTree node for later use in model/view or other hierarchy consumers
 CDbcCommentHandler
 CDbcDatabaseParsed DBC content stored in a simple internal form
 CDbcDecodeBuilderConverts parsed DBC data into runtime decode database
 CDbcDecoderRuntime CAN decoder using prebuilt decode database
 CDbcFrameHandler
 CDbcParseContext
 CDbcParserMinimal DBC parser
 CDbcSignalHandler
 CDbcStatementDispatcher
 CDbcStatementHandler
 CDbcTreeBuilderBuilds a simple tree from parsed DBC database
 CDecodeDatabaseRuntime decode database with fast lookup by CAN ID
 CDecodedFrameValueFully decoded frame
 CDecodedSignalValueOne decoded signal value
 CDecodeFrameRuntime-ready frame definition
 CDecodeSignalRuntime-ready signal definition
 CFrameInfoDescribes one CAN frame from a DBC file
 CFrameKeyKey for fast frame lookup
 CFrameKeyHasherHasher for frame key
 CRawCanFrameRaw CAN frame used for runtime or trace decoding
 CSignalInfoDescribes one signal inside a DBC frame
 CTreeNodeTree node for later use in model/view or other hierarchy consumers
 CTypeFactoryRegistry-based factory for creating objects by runtime identifier
@@ -111,7 +125,7 @@ $(document).ready(function(){initNavTree('annotated.html',''); initResizable(); diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js index 54910e2..daa1283 100644 --- a/docs/html/annotated_dup.js +++ b/docs/html/annotated_dup.js @@ -1,9 +1,15 @@ var annotated_dup = [ + [ "DbcCommentHandler", "classDbcCommentHandler.html", null ], [ "DbcDatabase", "structDbcDatabase.html", "structDbcDatabase" ], [ "DbcDecodeBuilder", "classDbcDecodeBuilder.html", "classDbcDecodeBuilder" ], [ "DbcDecoder", "classDbcDecoder.html", "classDbcDecoder" ], + [ "DbcFrameHandler", "classDbcFrameHandler.html", null ], + [ "DbcParseContext", "structDbcParseContext.html", null ], [ "DbcParser", "classDbcParser.html", "classDbcParser" ], + [ "DbcSignalHandler", "classDbcSignalHandler.html", null ], + [ "DbcStatementDispatcher", "classDbcStatementDispatcher.html", "classDbcStatementDispatcher" ], + [ "DbcStatementHandler", "classDbcStatementHandler.html", null ], [ "DbcTreeBuilder", "classDbcTreeBuilder.html", "classDbcTreeBuilder" ], [ "DecodeDatabase", "structDecodeDatabase.html", null ], [ "DecodedFrameValue", "structDecodedFrameValue.html", "structDecodedFrameValue" ], @@ -15,5 +21,6 @@ var annotated_dup = [ "FrameKeyHasher", "structFrameKeyHasher.html", null ], [ "RawCanFrame", "structRawCanFrame.html", "structRawCanFrame" ], [ "SignalInfo", "structSignalInfo.html", "structSignalInfo" ], - [ "TreeNode", "classTreeNode.html", "classTreeNode" ] + [ "TreeNode", "classTreeNode.html", "classTreeNode" ], + [ "TypeFactory", "classTypeFactory.html", "classTypeFactory" ] ]; \ No newline at end of file diff --git a/docs/html/bc_sd.png b/docs/html/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/docs/html/classDbcCommentHandler-members.html b/docs/html/classDbcCommentHandler-members.html new file mode 100644 index 0000000..c51a273 --- /dev/null +++ b/docs/html/classDbcCommentHandler-members.html @@ -0,0 +1,110 @@ + + + + + + + +DBC Framework: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
DbcCommentHandler Member List
+
+
+ +

This is the complete list of members for DbcCommentHandler, including all inherited members.

+ + + +
Handle(const std::string &line, DbcParseContext &context) const override (defined in DbcCommentHandler)DbcCommentHandlervirtual
~DbcStatementHandler()=default (defined in DbcStatementHandler)DbcStatementHandlervirtual
+
+ + + + diff --git a/docs/html/classDbcCommentHandler.html b/docs/html/classDbcCommentHandler.html new file mode 100644 index 0000000..9dac6f5 --- /dev/null +++ b/docs/html/classDbcCommentHandler.html @@ -0,0 +1,170 @@ + + + + + + + +DBC Framework: DbcCommentHandler Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
DbcCommentHandler Class Reference
+
+
+
+ + Inheritance diagram for DbcCommentHandler:
+
+
+ + + + + +

+Public Member Functions

void Handle (const std::string &line, DbcParseContext &context) const override
 
+

Detailed Description

+
+

Definition at line 38 of file dbc_statement_handler.h.

+

Member Function Documentation

+ +

◆ Handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void DbcCommentHandler::Handle (const std::string & line,
DbcParseContext & context 
) const
+
+overridevirtual
+
+ +

Implements DbcStatementHandler.

+ +

Definition at line 302 of file dbc_statement_handler.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/html/classDbcCommentHandler__inherit__graph.map b/docs/html/classDbcCommentHandler__inherit__graph.map new file mode 100644 index 0000000..82a5c4f --- /dev/null +++ b/docs/html/classDbcCommentHandler__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classDbcCommentHandler__inherit__graph.md5 b/docs/html/classDbcCommentHandler__inherit__graph.md5 new file mode 100644 index 0000000..9196443 --- /dev/null +++ b/docs/html/classDbcCommentHandler__inherit__graph.md5 @@ -0,0 +1 @@ +031e88596ad00375d87ac04af33f405c \ No newline at end of file diff --git a/docs/html/classDbcCommentHandler__inherit__graph.svg b/docs/html/classDbcCommentHandler__inherit__graph.svg new file mode 100644 index 0000000..3653616 --- /dev/null +++ b/docs/html/classDbcCommentHandler__inherit__graph.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + +DbcCommentHandler + + +Node1 + + +DbcCommentHandler +  ++ +Handle() + + + + + + + + +Node2 + + +DbcStatementHandler +  ++ +~DbcStatementHandler() ++ +Handle() + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classDbcCommentHandler__inherit__graph_org.svg b/docs/html/classDbcCommentHandler__inherit__graph_org.svg new file mode 100644 index 0000000..88e1060 --- /dev/null +++ b/docs/html/classDbcCommentHandler__inherit__graph_org.svg @@ -0,0 +1,53 @@ + + + + + + +DbcCommentHandler + + +Node1 + + +DbcCommentHandler +  ++ +Handle() + + + + + + + + +Node2 + + +DbcStatementHandler +  ++ +~DbcStatementHandler() ++ +Handle() + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classDbcDecodeBuilder-members.html b/docs/html/classDbcDecodeBuilder-members.html index 5bf2363..7face5d 100644 --- a/docs/html/classDbcDecodeBuilder-members.html +++ b/docs/html/classDbcDecodeBuilder-members.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Member List @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR diff --git a/docs/html/classDbcDecodeBuilder.html b/docs/html/classDbcDecodeBuilder.html index 41cda74..e9ffc56 100644 --- a/docs/html/classDbcDecodeBuilder.html +++ b/docs/html/classDbcDecodeBuilder.html @@ -1,9 +1,9 @@ - + - + DBC Framework: DbcDecodeBuilder Class Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -97,17 +104,17 @@ $(document).ready(function(){initNavTree('classDbcDecodeBuilder.html',''); initR - - + +

Public Member Functions

DecodeDatabase Build (const DbcDatabase &source) const
 Build runtime decode database. More...
DecodeDatabase Build (const DbcDatabase &source) const
 Build runtime decode database.
 

Detailed Description

-

Converts parsed DBC data into runtime decode database.

+

Converts parsed DBC data into runtime decode database.

Definition at line 21 of file dbc_decode_builder.h.

Member Function Documentation

-

◆ Build()

+

◆ Build()

@@ -133,7 +140,7 @@ Public Member Functions

Definition at line 14 of file dbc_decode_builder.cpp.

-

References DecodeSignal::byteOrder, DecodeFrame::canId, FrameInfo::canId, DecodeFrame::comment, FrameInfo::comment, DecodeFrame::dlc, FrameInfo::dlc, DbcDatabase::frames, DecodeFrame::hasPgn, FrameInfo::hasPgn, DecodeFrame::isExtended, FrameInfo::isExtended, SignalInfo::isLittleEndian, DecodeSignal::length, SignalInfo::length, DecodeSignal::name, DecodeFrame::name, FrameInfo::name, SignalInfo::name, DecodeFrame::pgn, FrameInfo::pgn, DecodeSignal::startBit, SignalInfo::startBit, DecodeFrame::transmitter, and FrameInfo::transmitter.

+

References DecodeSignal::byteOrder, DecodeFrame::canId, FrameInfo::canId, DecodeSignal::comment, DecodeFrame::comment, FrameInfo::comment, SignalInfo::comment, DecodeFrame::dlc, FrameInfo::dlc, DecodeSignal::factor, SignalInfo::factor, DbcDatabase::frames, DecodeFrame::hasPgn, FrameInfo::hasPgn, DecodeFrame::isExtended, FrameInfo::isExtended, SignalInfo::isLittleEndian, SignalInfo::isSigned, DecodeSignal::length, SignalInfo::length, DecodeSignal::maximum, SignalInfo::maximum, DecodeSignal::minimum, SignalInfo::minimum, DecodeSignal::name, DecodeFrame::name, FrameInfo::name, SignalInfo::name, DecodeSignal::offset, SignalInfo::offset, DecodeFrame::pgn, FrameInfo::pgn, DecodeSignal::receivers, SignalInfo::receivers, DecodeSignal::startBit, SignalInfo::startBit, DecodeFrame::transmitter, FrameInfo::transmitter, DecodeSignal::unit, SignalInfo::unit, and DecodeSignal::valueType.

@@ -147,7 +154,7 @@ Public Member Functions diff --git a/docs/html/classDbcDecoder-members.html b/docs/html/classDbcDecoder-members.html index 250d9a8..5d18037 100644 --- a/docs/html/classDbcDecoder-members.html +++ b/docs/html/classDbcDecoder-members.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Member List @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -96,7 +103,7 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab diff --git a/docs/html/classDbcDecoder.html b/docs/html/classDbcDecoder.html index c748da7..a2e63a3 100644 --- a/docs/html/classDbcDecoder.html +++ b/docs/html/classDbcDecoder.html @@ -1,9 +1,9 @@ - + - + DBC Framework: DbcDecoder Class Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -97,20 +104,20 @@ $(document).ready(function(){initNavTree('classDbcDecoder.html',''); initResizab - - + + - - + +

Public Member Functions

const DecodeFrame * FindFrame (const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const
 Find frame definition by CAN ID. More...
const DecodeFrame * FindFrame (const DecodeDatabase &database, std::uint32_t canId, bool isExtended) const
 Find frame definition by CAN ID.
 
DecodedFrameValue Decode (const DecodeDatabase &database, const RawCanFrame &frame) const
 Decode one raw CAN frame. More...
DecodedFrameValue Decode (const DecodeDatabase &database, const RawCanFrame &frame) const
 Decode one raw CAN frame.
 

Detailed Description

-

Runtime CAN decoder using prebuilt decode database.

+

Runtime CAN decoder using prebuilt decode database.

-

Definition at line 70 of file dbc_decoder.h.

+

Definition at line 64 of file dbc_decoder.h.

Member Function Documentation

-

◆ FindFrame()

+

◆ FindFrame()

@@ -159,7 +166,7 @@ Public Member Functions
-

◆ Decode()

+

◆ Decode()

@@ -210,7 +217,7 @@ Public Member Functions diff --git a/docs/html/classDbcFrameHandler-members.html b/docs/html/classDbcFrameHandler-members.html new file mode 100644 index 0000000..a19a601 --- /dev/null +++ b/docs/html/classDbcFrameHandler-members.html @@ -0,0 +1,110 @@ + + + + + + + +DBC Framework: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
DbcFrameHandler Member List
+
+
+ +

This is the complete list of members for DbcFrameHandler, including all inherited members.

+ + + +
Handle(const std::string &line, DbcParseContext &context) const override (defined in DbcFrameHandler)DbcFrameHandlervirtual
~DbcStatementHandler()=default (defined in DbcStatementHandler)DbcStatementHandlervirtual
+
+ + + + diff --git a/docs/html/classDbcFrameHandler.html b/docs/html/classDbcFrameHandler.html new file mode 100644 index 0000000..d59b675 --- /dev/null +++ b/docs/html/classDbcFrameHandler.html @@ -0,0 +1,170 @@ + + + + + + + +DBC Framework: DbcFrameHandler Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
DbcFrameHandler Class Reference
+
+
+
+ + Inheritance diagram for DbcFrameHandler:
+
+
+ + + + + +

+Public Member Functions

void Handle (const std::string &line, DbcParseContext &context) const override
 
+

Detailed Description

+
+

Definition at line 22 of file dbc_statement_handler.h.

+

Member Function Documentation

+ +

◆ Handle()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void DbcFrameHandler::Handle (const std::string & line,
DbcParseContext & context 
) const
+
+overridevirtual
+
+ +

Implements DbcStatementHandler.

+ +

Definition at line 280 of file dbc_statement_handler.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/html/classDbcFrameHandler__inherit__graph.map b/docs/html/classDbcFrameHandler__inherit__graph.map new file mode 100644 index 0000000..83b9470 --- /dev/null +++ b/docs/html/classDbcFrameHandler__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classDbcFrameHandler__inherit__graph.md5 b/docs/html/classDbcFrameHandler__inherit__graph.md5 new file mode 100644 index 0000000..786afe6 --- /dev/null +++ b/docs/html/classDbcFrameHandler__inherit__graph.md5 @@ -0,0 +1 @@ +e01f0e1a340a0e632ef160180de2de74 \ No newline at end of file diff --git a/docs/html/classDbcFrameHandler__inherit__graph.svg b/docs/html/classDbcFrameHandler__inherit__graph.svg new file mode 100644 index 0000000..59f3000 --- /dev/null +++ b/docs/html/classDbcFrameHandler__inherit__graph.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + +DbcFrameHandler + + +Node1 + + +DbcFrameHandler +  ++ +Handle() + + + + + + + + +Node2 + + +DbcStatementHandler +  ++ +~DbcStatementHandler() ++ +Handle() + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classDbcFrameHandler__inherit__graph_org.svg b/docs/html/classDbcFrameHandler__inherit__graph_org.svg new file mode 100644 index 0000000..3b029a0 --- /dev/null +++ b/docs/html/classDbcFrameHandler__inherit__graph_org.svg @@ -0,0 +1,53 @@ + + + + + + +DbcFrameHandler + + +Node1 + + +DbcFrameHandler +  ++ +Handle() + + + + + + + + +Node2 + + +DbcStatementHandler +  ++ +~DbcStatementHandler() ++ +Handle() + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classDbcParser-members.html b/docs/html/classDbcParser-members.html index cf45c26..b14ed11 100644 --- a/docs/html/classDbcParser-members.html +++ b/docs/html/classDbcParser-members.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Member List @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl diff --git a/docs/html/classDbcParser.html b/docs/html/classDbcParser.html index 449ecd9..ca824d9 100644 --- a/docs/html/classDbcParser.html +++ b/docs/html/classDbcParser.html @@ -1,9 +1,9 @@ - + - + DBC Framework: DbcParser Class Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -97,28 +104,28 @@ $(document).ready(function(){initNavTree('classDbcParser.html',''); initResizabl - - + +

Public Member Functions

DbcDatabase ParseFile (const std::string &filePath) const
 Parse DBC file. More...
DbcDatabase ParseFile (const std::string &filePath) const
 Parse DBC file.
 

Detailed Description

-

Minimal DBC parser.

-

Supports:

    +

    Minimal DBC parser.

    +

    Supports:

    • BO_
    • SG_
    • CM_ BO_
    • CM_ SG_
    -

    Ignores:

    Member Function Documentation

    -

    ◆ ParseFile()

    +

    ◆ ParseFile()

    @@ -143,14 +150,14 @@ Public Member Functions
    Returns
    Parsed database.
    Exceptions
    - +
    std::runtime_erroron file or parse errors.
    std::runtime_erroron file or parse errors. Line parse errors include the file path and one-based line number.

    Definition at line 40 of file dbc_parser.cpp.

    -

    References DbcDatabase::frames.

    +

    References DbcStatementDispatcher::Dispatch().

    @@ -164,7 +171,7 @@ Public Member Functions diff --git a/docs/html/classDbcSignalHandler-members.html b/docs/html/classDbcSignalHandler-members.html new file mode 100644 index 0000000..d2d10aa --- /dev/null +++ b/docs/html/classDbcSignalHandler-members.html @@ -0,0 +1,110 @@ + + + + + + + +DBC Framework: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    DBC Framework +
    +
    DBC parsing and CAN signal decoding framework
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    DbcSignalHandler Member List
    +
    +
    + +

    This is the complete list of members for DbcSignalHandler, including all inherited members.

    + + + +
    Handle(const std::string &line, DbcParseContext &context) const override (defined in DbcSignalHandler)DbcSignalHandlervirtual
    ~DbcStatementHandler()=default (defined in DbcStatementHandler)DbcStatementHandlervirtual
    +
    + + + + diff --git a/docs/html/classDbcSignalHandler.html b/docs/html/classDbcSignalHandler.html new file mode 100644 index 0000000..27a9a4f --- /dev/null +++ b/docs/html/classDbcSignalHandler.html @@ -0,0 +1,170 @@ + + + + + + + +DBC Framework: DbcSignalHandler Class Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    DBC Framework +
    +
    DBC parsing and CAN signal decoding framework
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    DbcSignalHandler Class Reference
    +
    +
    +
    + + Inheritance diagram for DbcSignalHandler:
    +
    +
    + + + + + +

    +Public Member Functions

    void Handle (const std::string &line, DbcParseContext &context) const override
     
    +

    Detailed Description

    +
    +

    Definition at line 30 of file dbc_statement_handler.h.

    +

    Member Function Documentation

    + +

    ◆ Handle()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    void DbcSignalHandler::Handle (const std::string & line,
    DbcParseContext & context 
    ) const
    +
    +overridevirtual
    +
    + +

    Implements DbcStatementHandler.

    + +

    Definition at line 285 of file dbc_statement_handler.cpp.

    + +
    +
    +
    The documentation for this class was generated from the following files: +
    +
    + + + + diff --git a/docs/html/classDbcSignalHandler__inherit__graph.map b/docs/html/classDbcSignalHandler__inherit__graph.map new file mode 100644 index 0000000..61af087 --- /dev/null +++ b/docs/html/classDbcSignalHandler__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classDbcSignalHandler__inherit__graph.md5 b/docs/html/classDbcSignalHandler__inherit__graph.md5 new file mode 100644 index 0000000..6c234fe --- /dev/null +++ b/docs/html/classDbcSignalHandler__inherit__graph.md5 @@ -0,0 +1 @@ +9f75986e6e276d126dcdd20bd25bc7f7 \ No newline at end of file diff --git a/docs/html/classDbcSignalHandler__inherit__graph.svg b/docs/html/classDbcSignalHandler__inherit__graph.svg new file mode 100644 index 0000000..2ac2367 --- /dev/null +++ b/docs/html/classDbcSignalHandler__inherit__graph.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + +DbcSignalHandler + + +Node1 + + +DbcSignalHandler +  ++ +Handle() + + + + + + + + +Node2 + + +DbcStatementHandler +  ++ +~DbcStatementHandler() ++ +Handle() + + + + + + + + +Node2->Node1 + + + + + + + + + + + + + diff --git a/docs/html/classDbcSignalHandler__inherit__graph_org.svg b/docs/html/classDbcSignalHandler__inherit__graph_org.svg new file mode 100644 index 0000000..6eef53d --- /dev/null +++ b/docs/html/classDbcSignalHandler__inherit__graph_org.svg @@ -0,0 +1,53 @@ + + + + + + +DbcSignalHandler + + +Node1 + + +DbcSignalHandler +  ++ +Handle() + + + + + + + + +Node2 + + +DbcStatementHandler +  ++ +~DbcStatementHandler() ++ +Handle() + + + + + + + + +Node2->Node1 + + + + + + + + diff --git a/docs/html/classDbcStatementDispatcher-members.html b/docs/html/classDbcStatementDispatcher-members.html new file mode 100644 index 0000000..05dab39 --- /dev/null +++ b/docs/html/classDbcStatementDispatcher-members.html @@ -0,0 +1,111 @@ + + + + + + + +DBC Framework: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    DBC Framework +
    +
    DBC parsing and CAN signal decoding framework
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    DbcStatementDispatcher Member List
    +
    +
    + +

    This is the complete list of members for DbcStatementDispatcher, including all inherited members.

    + + + + +
    DbcStatementDispatcher() (defined in DbcStatementDispatcher)DbcStatementDispatcher
    Dispatch(const std::string &line, DbcParseContext &context) constDbcStatementDispatcher
    RegisterType(const std::string &keyword) (defined in DbcStatementDispatcher)DbcStatementDispatcherinline
    +
    + + + + diff --git a/docs/html/classDbcStatementDispatcher.html b/docs/html/classDbcStatementDispatcher.html new file mode 100644 index 0000000..2b4ab73 --- /dev/null +++ b/docs/html/classDbcStatementDispatcher.html @@ -0,0 +1,212 @@ + + + + + + + +DBC Framework: DbcStatementDispatcher Class Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    DBC Framework +
    +
    DBC parsing and CAN signal decoding framework
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    DbcStatementDispatcher Class Reference
    +
    +
    + +

    #include <dbc_statement_handler.h>

    + + + + + + + +

    +Public Member Functions

    template<class Handler >
    void RegisterType (const std::string &keyword)
     
    bool Dispatch (const std::string &line, DbcParseContext &context) const
     
    +

    Detailed Description

    +

    Exact-key dispatch to handlers created once per registration via TypeFactory.

    + +

    Definition at line 47 of file dbc_statement_handler.h.

    +

    Constructor & Destructor Documentation

    + +

    ◆ DbcStatementDispatcher()

    + +
    +
    + + + + + + + +
    DbcStatementDispatcher::DbcStatementDispatcher ()
    +
    + +

    Definition at line 307 of file dbc_statement_handler.cpp.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ RegisterType()

    + +
    +
    +
    +template<class Handler >
    + + + + + +
    + + + + + + + + +
    void DbcStatementDispatcher::RegisterType (const std::string & keyword)
    +
    +inline
    +
    + +

    Definition at line 52 of file dbc_statement_handler.h.

    + +
    +
    + +

    ◆ Dispatch()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    bool DbcStatementDispatcher::Dispatch (const std::string & line,
    DbcParseContext & context 
    ) const
    +
    +

    Returns false for an unregistered keyword; input must be trimmed.

    + +

    Definition at line 313 of file dbc_statement_handler.cpp.

    + +

    Referenced by DbcParser::ParseFile().

    + +
    +
    +
    The documentation for this class was generated from the following files: +
    +
    + + + + diff --git a/docs/html/classDbcStatementDispatcher.js b/docs/html/classDbcStatementDispatcher.js new file mode 100644 index 0000000..f7ab546 --- /dev/null +++ b/docs/html/classDbcStatementDispatcher.js @@ -0,0 +1,4 @@ +var classDbcStatementDispatcher = +[ + [ "Dispatch", "classDbcStatementDispatcher.html#a495c2d5c7ebb8103b1987cdd87c142ed", null ] +]; \ No newline at end of file diff --git a/docs/html/classDbcStatementHandler-members.html b/docs/html/classDbcStatementHandler-members.html new file mode 100644 index 0000000..072b98b --- /dev/null +++ b/docs/html/classDbcStatementHandler-members.html @@ -0,0 +1,110 @@ + + + + + + + +DBC Framework: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    DBC Framework +
    +
    DBC parsing and CAN signal decoding framework
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    DbcStatementHandler Member List
    +
    +
    + +

    This is the complete list of members for DbcStatementHandler, including all inherited members.

    + + + +
    Handle(const std::string &line, DbcParseContext &context) const =0 (defined in DbcStatementHandler)DbcStatementHandlerpure virtual
    ~DbcStatementHandler()=default (defined in DbcStatementHandler)DbcStatementHandlervirtual
    +
    + + + + diff --git a/docs/html/classDbcStatementHandler.html b/docs/html/classDbcStatementHandler.html new file mode 100644 index 0000000..f35a8a0 --- /dev/null +++ b/docs/html/classDbcStatementHandler.html @@ -0,0 +1,129 @@ + + + + + + + +DBC Framework: DbcStatementHandler Class Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    DBC Framework +
    +
    DBC parsing and CAN signal decoding framework
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    DbcStatementHandler Class Referenceabstract
    +
    +
    +
    + + Inheritance diagram for DbcStatementHandler:
    +
    +
    + + + + + +

    +Public Member Functions

    +virtual void Handle (const std::string &line, DbcParseContext &context) const =0
     
    +

    Detailed Description

    +
    +

    Definition at line 16 of file dbc_statement_handler.h.

    +

    The documentation for this class was generated from the following file: +
    +
    + + + + diff --git a/docs/html/classDbcStatementHandler__inherit__graph.map b/docs/html/classDbcStatementHandler__inherit__graph.map new file mode 100644 index 0000000..2c08e88 --- /dev/null +++ b/docs/html/classDbcStatementHandler__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/html/classDbcStatementHandler__inherit__graph.md5 b/docs/html/classDbcStatementHandler__inherit__graph.md5 new file mode 100644 index 0000000..71489bd --- /dev/null +++ b/docs/html/classDbcStatementHandler__inherit__graph.md5 @@ -0,0 +1 @@ +318e71b72eb76e120faf9a4f760373e7 \ No newline at end of file diff --git a/docs/html/classDbcStatementHandler__inherit__graph.svg b/docs/html/classDbcStatementHandler__inherit__graph.svg new file mode 100644 index 0000000..fa2b8cc --- /dev/null +++ b/docs/html/classDbcStatementHandler__inherit__graph.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + +DbcStatementHandler + + +Node1 + + +DbcStatementHandler +  ++ +~DbcStatementHandler() ++ +Handle() + + + + + + + + +Node2 + + +CountingHandler ++ +instances ++ +calls ++ +CountingHandler() ++ +Handle() + + + + + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +DbcCommentHandler +  ++ +Handle() + + + + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +DbcFrameHandler +  ++ +Handle() + + + + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +DbcSignalHandler +  ++ +Handle() + + + + + + + + +Node1->Node5 + + + + + + + + + + + + + diff --git a/docs/html/classDbcStatementHandler__inherit__graph_org.svg b/docs/html/classDbcStatementHandler__inherit__graph_org.svg new file mode 100644 index 0000000..2e336c2 --- /dev/null +++ b/docs/html/classDbcStatementHandler__inherit__graph_org.svg @@ -0,0 +1,131 @@ + + + + + + +DbcStatementHandler + + +Node1 + + +DbcStatementHandler +  ++ +~DbcStatementHandler() ++ +Handle() + + + + + + + + +Node2 + + +CountingHandler ++ +instances ++ +calls ++ +CountingHandler() ++ +Handle() + + + + + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +DbcCommentHandler +  ++ +Handle() + + + + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +DbcFrameHandler +  ++ +Handle() + + + + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +DbcSignalHandler +  ++ +Handle() + + + + + + + + +Node1->Node5 + + + + + + + + diff --git a/docs/html/classDbcTreeBuilder-members.html b/docs/html/classDbcTreeBuilder-members.html index 46759e3..dd7f74d 100644 --- a/docs/html/classDbcTreeBuilder-members.html +++ b/docs/html/classDbcTreeBuilder-members.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Member List @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -95,7 +102,7 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes diff --git a/docs/html/classDbcTreeBuilder.html b/docs/html/classDbcTreeBuilder.html index 6003542..9924650 100644 --- a/docs/html/classDbcTreeBuilder.html +++ b/docs/html/classDbcTreeBuilder.html @@ -1,9 +1,9 @@ - + - + DBC Framework: DbcTreeBuilder Class Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -97,17 +104,17 @@ $(document).ready(function(){initNavTree('classDbcTreeBuilder.html',''); initRes - - + +

Public Member Functions

std::unique_ptr< TreeNode > Build (const DbcDatabase &database) const
 Build tree representation of parsed DBC data. More...
std::unique_ptr< TreeNode > Build (const DbcDatabase &database) const
 Build tree representation of parsed DBC data.
 

Detailed Description

-

Builds a simple tree from parsed DBC database.

+

Builds a simple tree from parsed DBC database.

Definition at line 23 of file dbc_tree_builder.h.

Member Function Documentation

-

◆ Build()

+

◆ Build()

@@ -147,7 +154,7 @@ Public Member Functions diff --git a/docs/html/classTreeNode-members.html b/docs/html/classTreeNode-members.html index 18ef360..37f9ac6 100644 --- a/docs/html/classTreeNode-members.html +++ b/docs/html/classTreeNode-members.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Member List @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -110,7 +117,7 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable diff --git a/docs/html/classTreeNode.html b/docs/html/classTreeNode.html index 379fcae..77daab8 100644 --- a/docs/html/classTreeNode.html +++ b/docs/html/classTreeNode.html @@ -1,9 +1,9 @@ - + - + DBC Framework: TreeNode Class Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -97,59 +104,59 @@ $(document).ready(function(){initNavTree('classTreeNode.html',''); initResizable - - + + - - + + - - + + - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +

Public Member Functions

 TreeNode ()
 Create root node. More...
 TreeNode ()
 Create root node.
 
 TreeNode (const FrameInfo &frame)
 Create frame node. More...
 TreeNode (const FrameInfo &frame)
 Create frame node.
 
 TreeNode (const SignalInfo &signal)
 Create signal node. More...
 TreeNode (const SignalInfo &signal)
 Create signal node.
 
+
 TreeNode (const TreeNode &)=delete
 
+
TreeNode & operator= (const TreeNode &)=delete
 
+
 TreeNode (TreeNode &&)=default
 
+
TreeNode & operator= (TreeNode &&)=default
 
void AddChild (std::unique_ptr< TreeNode > child)
 Add child node. More...
void AddChild (std::unique_ptr< TreeNode > child)
 Add child node.
 
std::size_t GetChildCount () const
 Get child count. More...
std::size_t GetChildCount () const
 Get child count.
 
const TreeNode * GetChild (std::size_t index) const
 Get child by index. More...
const TreeNode * GetChild (std::size_t index) const
 Get child by index.
 
TreeNode * GetChild (std::size_t index)
 Get mutable child by index. More...
TreeNode * GetChild (std::size_t index)
 Get mutable child by index.
 
NodeType GetType () const
 Get node type. More...
NodeType GetType () const
 Get node type.
 
const std::string & GetName () const
 Get display name. More...
const std::string & GetName () const
 Get display name.
 
const FrameInfo * GetFrame () const
 Get frame payload if node is frame. More...
const FrameInfo * GetFrame () const
 Get frame payload if node is frame.
 
const SignalInfo * GetSignal () const
 Get signal payload if node is signal. More...
const SignalInfo * GetSignal () const
 Get signal payload if node is signal.
 

Detailed Description

-

Tree node for later use in model/view or other hierarchy consumers.

+

Tree node for later use in model/view or other hierarchy consumers.

Definition at line 35 of file tree_node.h.

Constructor & Destructor Documentation

-

◆ TreeNode() [1/3]

+

◆ TreeNode() [1/3]

@@ -170,7 +177,7 @@ Public Member Functions
-

◆ TreeNode() [2/3]

+

◆ TreeNode() [2/3]

@@ -201,12 +208,12 @@ Public Member Functions -

Definition at line 22 of file tree_node.cpp.

+

Definition at line 18 of file tree_node.cpp.

-

◆ TreeNode() [3/3]

+

◆ TreeNode() [3/3]

@@ -237,13 +244,13 @@ Public Member Functions -

Definition at line 30 of file tree_node.cpp.

+

Definition at line 22 of file tree_node.cpp.

Member Function Documentation

-

◆ AddChild()

+

◆ AddChild()

@@ -266,12 +273,12 @@ Public Member Functions -

Definition at line 38 of file tree_node.cpp.

+

Definition at line 26 of file tree_node.cpp.

-

◆ GetChildCount()

+

◆ GetChildCount()

@@ -288,12 +295,12 @@ Public Member Functions

Get child count.

Returns
Number of children.
-

Definition at line 43 of file tree_node.cpp.

+

Definition at line 31 of file tree_node.cpp.

-

◆ GetChild() [1/2]

+

◆ GetChild() [1/2]

@@ -317,12 +324,12 @@ Public Member Functions
Returns
Child pointer or nullptr if index is invalid.
-

Definition at line 47 of file tree_node.cpp.

+

Definition at line 35 of file tree_node.cpp.

-

◆ GetChild() [2/2]

+

◆ GetChild() [2/2]

@@ -346,12 +353,12 @@ Public Member Functions
Returns
Child pointer or nullptr if index is invalid.
-

Definition at line 54 of file tree_node.cpp.

+

Definition at line 42 of file tree_node.cpp.

-

◆ GetType()

+

◆ GetType()

@@ -368,12 +375,12 @@ Public Member Functions

Get node type.

Returns
Node type.
-

Definition at line 61 of file tree_node.cpp.

+

Definition at line 49 of file tree_node.cpp.

-

◆ GetName()

+

◆ GetName()

@@ -390,12 +397,12 @@ Public Member Functions

Get display name.

Returns
Node name.
-

Definition at line 65 of file tree_node.cpp.

+

Definition at line 53 of file tree_node.cpp.

-

◆ GetFrame()

+

◆ GetFrame()

@@ -412,12 +419,12 @@ Public Member Functions

Get frame payload if node is frame.

Returns
Pointer to frame info or nullptr.
-

Definition at line 69 of file tree_node.cpp.

+

Definition at line 57 of file tree_node.cpp.

-

◆ GetSignal()

+

◆ GetSignal()

@@ -434,7 +441,7 @@ Public Member Functions

Get signal payload if node is signal.

Returns
Pointer to signal info or nullptr.
-

Definition at line 73 of file tree_node.cpp.

+

Definition at line 61 of file tree_node.cpp.

@@ -448,7 +455,7 @@ Public Member Functions diff --git a/docs/html/classTypeFactory-members.html b/docs/html/classTypeFactory-members.html new file mode 100644 index 0000000..d55762f --- /dev/null +++ b/docs/html/classTypeFactory-members.html @@ -0,0 +1,116 @@ + + + + + + + +DBC Framework: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
TypeFactory< ClassId, BaseClass, Args > Member List
+
+ +
+ + + + diff --git a/docs/html/classTypeFactory.html b/docs/html/classTypeFactory.html new file mode 100644 index 0000000..4f2e5a3 --- /dev/null +++ b/docs/html/classTypeFactory.html @@ -0,0 +1,432 @@ + + + + + + + +DBC Framework: TypeFactory< ClassId, BaseClass, Args > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
TypeFactory< ClassId, BaseClass, Args > Class Template Reference
+
+
+ +

Registry-based factory for creating objects by runtime identifier. + More...

+ +

#include <typefactory.h>

+
+ + Inheritance diagram for TypeFactory< ClassId, BaseClass, Args >:
+
+
+ + + + + + + +

+Public Types

using BasePtr = std::shared_ptr< BaseClass >
 
using CreatorFn = BasePtr(*)(Args...)
 
+ + + + + + + + + + + + + + +

+Public Member Functions

template<class Derived >
void registerType (const ClassId &id)
 Registers a Derived type under the given id.
 
CreatorFn creator (const ClassId &id) const
 Returns creator function for the given id.
 
BasePtr create (const ClassId &id, Args... args) const
 Creates an instance for the given id using provided arguments.
 
bool contains (const ClassId &id) const
 Checks whether an id is registered.
 
+ + + +

+Protected Attributes

std::unordered_map< ClassId, CreatorFn > classes
 
+

Detailed Description

+
template<class ClassId, class BaseClass, class... Args>
+class TypeFactory< ClassId, BaseClass, Args >

Registry-based factory for creating objects by runtime identifier.

+

Allows registering derived types and instantiating them using a ClassId key.

+

Notes:

    +
  • Not thread-safe. Register types during initialization phase only.
  • +
  • Re-registering the same id overwrites the previous entry ("last wins").
  • +
  • ClassId must be hashable (std::hash<ClassId> specialization must exist).
  • +
+
Template Parameters
+ + + + +
ClassId-Unique class identifier type (e.g. std::string, int, enum).
BaseClass-Base type for all created objects.
Arg- Constructor arguments forwarded to registered derived types (by value).
+
+
+

Usage example:

#include <string>
+
+
struct Base {
+
virtual ~Base() = default;
+
virtual int get() = 0;
+
};
+
+
struct Derived1 : Base {
+
explicit Derived1(int start) : m_start(start) {}
+
int get() override { return m_start + 1; }
+
int m_start = 0;
+
};
+
+
struct Derived2 : Base {
+
explicit Derived2(int start) : m_start(start) {}
+
int get() override { return m_start + 2; }
+
int m_start = 0;
+
};
+
+ +
factory.registerType<Derived1>("one");
+
factory.registerType<Derived2>("two");
+
+
auto a = factory.create("one", 10);
+
auto b = factory.creator("two")(10); // advanced API: get creator function
+
+
(void)a->get();
+
(void)b->get();
+
Registry-based factory for creating objects by runtime identifier.
Definition typefactory.h:59
+
BasePtr create(const ClassId &id, Args... args) const
Creates an instance for the given id using provided arguments.
Definition typefactory.h:97
+
void registerType(const ClassId &id)
Registers a Derived type under the given id.
Definition typefactory.h:76
+
CreatorFn creator(const ClassId &id) const
Returns creator function for the given id.
Definition typefactory.h:89
+
+

Definition at line 59 of file typefactory.h.

+

Member Typedef Documentation

+ +

◆ BasePtr

+ +
+
+
+template<class ClassId , class BaseClass , class... Args>
+ + + + +
using TypeFactory< ClassId, BaseClass, Args >::BasePtr = std::shared_ptr<BaseClass>
+
+ +

Definition at line 61 of file typefactory.h.

+ +
+
+ +

◆ CreatorFn

+ +
+
+
+template<class ClassId , class BaseClass , class... Args>
+ + + + +
using TypeFactory< ClassId, BaseClass, Args >::CreatorFn = BasePtr (*)(Args...)
+
+ +

Definition at line 62 of file typefactory.h.

+ +
+
+

Member Function Documentation

+ +

◆ registerType()

+ +
+
+
+template<class ClassId , class BaseClass , class... Args>
+
+template<class Derived >
+ + + + + +
+ + + + + + + + +
void TypeFactory< ClassId, BaseClass, Args >::registerType (const ClassId & id)
+
+inline
+
+ +

Registers a Derived type under the given id.

+

Requirements (checked at compile-time):

    +
  • Derived must inherit from BaseClass
  • +
  • Derived must be constructible from Args...
  • +
+

Re-registering the same id overwrites the previous entry ("last wins").

+ +

Definition at line 76 of file typefactory.h.

+ +
+
+ +

◆ creator()

+ +
+
+
+template<class ClassId , class BaseClass , class... Args>
+ + + + + +
+ + + + + + + + +
CreatorFn TypeFactory< ClassId, BaseClass, Args >::creator (const ClassId & id) const
+
+inline
+
+ +

Returns creator function for the given id.

+
Exceptions
+ + +
std::out_of_rangewhen id is not registered.
+
+
+ +

Definition at line 89 of file typefactory.h.

+ +

Referenced by TypeFactory< ClassId, BaseClass, Args >::create().

+ +
+
+ +

◆ create()

+ +
+
+
+template<class ClassId , class BaseClass , class... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
BasePtr TypeFactory< ClassId, BaseClass, Args >::create (const ClassId & id,
Args... args 
) const
+
+inline
+
+ +

Creates an instance for the given id using provided arguments.

+
Exceptions
+ + +
std::out_of_rangewhen id is not registered.
+
+
+ +

Definition at line 97 of file typefactory.h.

+ +

References TypeFactory< ClassId, BaseClass, Args >::creator().

+ +
+
+ +

◆ contains()

+ +
+
+
+template<class ClassId , class BaseClass , class... Args>
+ + + + + +
+ + + + + + + + +
bool TypeFactory< ClassId, BaseClass, Args >::contains (const ClassId & id) const
+
+inline
+
+ +

Checks whether an id is registered.

+ +

Definition at line 104 of file typefactory.h.

+ +
+
+

Member Data Documentation

+ +

◆ classes

+ +
+
+
+template<class ClassId , class BaseClass , class... Args>
+ + + + + +
+ + + + +
std::unordered_map<ClassId, CreatorFn> TypeFactory< ClassId, BaseClass, Args >::classes
+
+protected
+
+ +

Definition at line 110 of file typefactory.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/html/classTypeFactory.js b/docs/html/classTypeFactory.js new file mode 100644 index 0000000..7c6b089 --- /dev/null +++ b/docs/html/classTypeFactory.js @@ -0,0 +1,7 @@ +var classTypeFactory = +[ + [ "registerType", "classTypeFactory.html#ad6d85795285ee21193ac03e1b24762d3", null ], + [ "creator", "classTypeFactory.html#ad82f537569ece3d3a4a376523fa94473", null ], + [ "create", "classTypeFactory.html#a3f43b03d6e3a0fd503fdec01ecf62e9f", null ], + [ "contains", "classTypeFactory.html#a1a119ad2956abe146213c6ca124d8dd4", null ] +]; \ No newline at end of file diff --git a/docs/html/classTypeFactory__inherit__graph.map b/docs/html/classTypeFactory__inherit__graph.map new file mode 100644 index 0000000..0033869 --- /dev/null +++ b/docs/html/classTypeFactory__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/html/classTypeFactory__inherit__graph.md5 b/docs/html/classTypeFactory__inherit__graph.md5 new file mode 100644 index 0000000..db8fff8 --- /dev/null +++ b/docs/html/classTypeFactory__inherit__graph.md5 @@ -0,0 +1 @@ +2bdf782ef56b34458cf192f8210c073e \ No newline at end of file diff --git a/docs/html/classTypeFactory__inherit__graph.svg b/docs/html/classTypeFactory__inherit__graph.svg new file mode 100644 index 0000000..63311ad --- /dev/null +++ b/docs/html/classTypeFactory__inherit__graph.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + +TypeFactory< ClassId, BaseClass, Args > + + +Node1 + + +TypeFactory< ClassId, + BaseClass, Args > +# +classes ++ +TypeFactory() ++ +registerType() ++ +creator() ++ +create() ++ +contains() + + + + + + + + + +Node2 + + +TypeFactory< std::string, + DbcStatementHandler > +# +classes ++ +TypeFactory() ++ +registerType() ++ +creator() ++ +create() ++ +contains() + + + + + + + + + +Node1->Node2 + + + + + + < std::string, DbcStatement +Handler > + + + + + + + + diff --git a/docs/html/classTypeFactory__inherit__graph_org.svg b/docs/html/classTypeFactory__inherit__graph_org.svg new file mode 100644 index 0000000..8636cc6 --- /dev/null +++ b/docs/html/classTypeFactory__inherit__graph_org.svg @@ -0,0 +1,75 @@ + + + + + + +TypeFactory< ClassId, BaseClass, Args > + + +Node1 + + +TypeFactory< ClassId, + BaseClass, Args > +# +classes ++ +TypeFactory() ++ +registerType() ++ +creator() ++ +create() ++ +contains() + + + + + + + + + +Node2 + + +TypeFactory< std::string, + DbcStatementHandler > +# +classes ++ +TypeFactory() ++ +registerType() ++ +creator() ++ +create() ++ +contains() + + + + + + + + + +Node1->Node2 + + + + + + < std::string, DbcStatement +Handler > + + + diff --git a/docs/html/classes.html b/docs/html/classes.html index bada205..4dcb402 100644 --- a/docs/html/classes.html +++ b/docs/html/classes.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Class Index @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('classes.html',''); initResizable(); })
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
diff --git a/docs/html/dbc__database_8h.html b/docs/html/dbc__database_8h.html index 1c08ec9..66dd493 100644 --- a/docs/html/dbc__database_8h.html +++ b/docs/html/dbc__database_8h.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_database.h File Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__database_8h.html',''); initResiza
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -103,8 +110,8 @@ Classes  

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_database.h.

@@ -113,7 +120,7 @@ Classes diff --git a/docs/html/dbc__database_8h_source.html b/docs/html/dbc__database_8h_source.html index d076836..8cd4456 100644 --- a/docs/html/dbc__database_8h_source.html +++ b/docs/html/dbc__database_8h_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_database.h Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/dbc__decode__builder_8cpp.html b/docs/html/dbc__decode__builder_8cpp.html index f04e5d1..095bb28 100644 --- a/docs/html/dbc__decode__builder_8cpp.html +++ b/docs/html/dbc__decode__builder_8cpp.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_decode_builder.cpp File Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp.html',''); i
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -93,8 +100,8 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp.html',''); i

Go to the source code of this file.

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_decode_builder.cpp.

@@ -103,7 +110,7 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8cpp.html',''); i diff --git a/docs/html/dbc__decode__builder_8cpp_source.html b/docs/html/dbc__decode__builder_8cpp_source.html index 69dab41..bc8e8fd 100644 --- a/docs/html/dbc__decode__builder_8cpp_source.html +++ b/docs/html/dbc__decode__builder_8cpp_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_decode_builder.cpp Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/dbc__decode__builder_8h.html b/docs/html/dbc__decode__builder_8h.html index 5830c0e..a4fd188 100644 --- a/docs/html/dbc__decode__builder_8h.html +++ b/docs/html/dbc__decode__builder_8h.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_decode_builder.h File Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__decode__builder_8h.html',''); ini
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -103,8 +110,8 @@ Classes  

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_decode_builder.h.

@@ -113,7 +120,7 @@ Classes diff --git a/docs/html/dbc__decode__builder_8h_source.html b/docs/html/dbc__decode__builder_8h_source.html index f8d622d..1b5dba7 100644 --- a/docs/html/dbc__decode__builder_8h_source.html +++ b/docs/html/dbc__decode__builder_8h_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_decode_builder.h Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/dbc__decoder_8cpp.html b/docs/html/dbc__decoder_8cpp.html index 4c76fc0..66ae3ae 100644 --- a/docs/html/dbc__decoder_8cpp.html +++ b/docs/html/dbc__decoder_8cpp.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_decoder.cpp File Reference @@ -34,10 +34,10 @@ - + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp.html',''); initResiz
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -93,8 +100,8 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp.html',''); initResiz

Go to the source code of this file.

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_decoder.cpp.

@@ -103,7 +110,7 @@ $(document).ready(function(){initNavTree('dbc__decoder_8cpp.html',''); initResiz diff --git a/docs/html/dbc__decoder_8cpp_source.html b/docs/html/dbc__decoder_8cpp_source.html index 5e4921e..f7ac376 100644 --- a/docs/html/dbc__decoder_8cpp_source.html +++ b/docs/html/dbc__decoder_8cpp_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_decoder.cpp Source File @@ -34,10 +34,10 @@ - + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/dbc__decoder_8h.html b/docs/html/dbc__decoder_8h.html index c2e4e03..a331d14 100644 --- a/docs/html/dbc__decoder_8h.html +++ b/docs/html/dbc__decoder_8h.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_decoder.h File Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h.html',''); initResizab
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -91,8 +98,9 @@ $(document).ready(function(){initNavTree('dbc__decoder_8h.html',''); initResizab

Created: 2026-03-13 Author: Deeaitch (Dim. Himro) More...

-
#include <vector>
-#include <cstdint>
+
#include <cstdint>
+#include <variant>
+#include <vector>
#include "decode_database.h"

Go to the source code of this file.

@@ -113,8 +121,8 @@ Classes  

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_decoder.h.

@@ -123,7 +131,7 @@ Classes diff --git a/docs/html/dbc__decoder_8h_source.html b/docs/html/dbc__decoder_8h_source.html index f765efb..6dee24a 100644 --- a/docs/html/dbc__decoder_8h_source.html +++ b/docs/html/dbc__decoder_8h_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_decoder.h Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/dbc__decoder__test_8cpp_source.html b/docs/html/dbc__decoder__test_8cpp_source.html new file mode 100644 index 0000000..f14acf6 --- /dev/null +++ b/docs/html/dbc__decoder__test_8cpp_source.html @@ -0,0 +1,274 @@ + + + + + + + +DBC Framework: dbc_decoder_test.cpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
dbc_decoder_test.cpp
+
+
+
1#include "dbc_decoder.h"
+
2
+
3#include <iostream>
+
4#include <limits>
+
5#include <sstream>
+
6
+
7struct DecodeCase {
+
8 const char *name;
+
9 ByteOrder byteOrder;
+
10 std::uint32_t startBit;
+
11 std::uint32_t length;
+
12 ValueType valueType;
+
13 std::vector<std::uint8_t> data;
+
14 bool valid;
+
15 std::int64_t rawValue;
+
16 double factor;
+
17 double offset;
+
18 double physicalValue;
+
19};
+
20
+
21int main() {
+
22 const DecodeCase cases[] = {
+
23 {"Motorola reproduction", ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12, 0x34}, true, 0x1234, 1.0, 0.0, 4660.0},
+
24 {"Motorola within byte", ByteOrder::Motorola, 5U, 4U, ValueType::Unsigned, {0xAC}, true, 11, 1.0, 0.0, 11.0},
+
25 {"Motorola unaligned crossing", ByteOrder::Motorola, 3U, 12U, ValueType::Unsigned, {0xAB, 0xCD}, true, 0xBCD, 1.0, 0.0, 3021.0},
+
26 {"Motorola starts at bit zero", ByteOrder::Motorola, 0U, 2U, ValueType::Unsigned, {0x01, 0x80}, true, 3, 1.0, 0.0, 3.0},
+
27 {"Motorola second byte", ByteOrder::Motorola, 15U, 16U, ValueType::Unsigned, {0xFF, 0x12, 0x34}, true, 0x1234, 1.0, 0.0, 4660.0},
+
28 {"Motorola signed scaled", ByteOrder::Motorola, 7U, 16U, ValueType::Signed, {0xFF, 0xFE}, true, -2, 0.5, 10.0, 9.0},
+
29 {"Motorola 64 bits", ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0, 0, 0, 0, 0, 0, 0x12, 0x34}, true, 0x1234, 1.0, 0.0, 4660.0},
+
30 {"Motorola 64 bits high bit", ByteOrder::Motorola, 7U, 64U, ValueType::Unsigned, {0x40, 0, 0, 0, 0, 0, 0, 0}, true, 0x4000000000000000LL, 1.0, 0.0, 4611686018427387904.0},
+
31 {"Motorola short payload", ByteOrder::Motorola, 7U, 16U, ValueType::Unsigned, {0x12}, false, 0, 1.0, 0.0, 0.0},
+
32 {"Motorola empty payload", ByteOrder::Motorola, 7U, 8U, ValueType::Unsigned, {}, false, 0, 1.0, 0.0, 0.0},
+
33 {"Motorola large start", ByteOrder::Motorola, std::numeric_limits<std::uint32_t>::max(), 8U, ValueType::Unsigned, {0xFF}, false, 0, 1.0, 0.0, 0.0},
+
34 {"Motorola zero length", ByteOrder::Motorola, 7U, 0U, ValueType::Unsigned, {0xFF}, false, 0, 1.0, 0.0, 0.0},
+
35 {"Motorola excessive length", ByteOrder::Motorola, 7U, 65U, ValueType::Unsigned,
+
36 std::vector<std::uint8_t>(9U, 0xFF), false, 0, 1.0, 0.0, 0.0},
+
37 {"Intel regression", ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12, 0x34}, true, 0x3412, 1.0, 0.0, 13330.0},
+
38 {"Intel signed regression", ByteOrder::Intel, 0U, 16U, ValueType::Signed, {0xFE, 0xFF}, true, -2, 0.5, 10.0, 9.0},
+
39 {"Intel short payload", ByteOrder::Intel, 0U, 16U, ValueType::Unsigned, {0x12}, false, 0, 1.0, 0.0, 0.0}};
+
40
+
41 int failures = 0;
+
42 for (const DecodeCase &test: cases) {
+
43 DecodeSignal signal;
+
44 signal.name = test.name;
+
45 signal.byteOrder = test.byteOrder;
+
46 signal.startBit = test.startBit;
+
47 signal.length = test.length;
+
48 signal.valueType = test.valueType;
+
49 signal.factor = test.factor;
+
50 signal.offset = test.offset;
+
51
+
52 DecodeFrame definition;
+
53 definition.canId = 0x123U;
+
54 definition.dlc = static_cast<std::uint8_t>(test.data.size());
+
55 definition.signals.push_back(signal);
+
56 DecodeDatabase database;
+
57 database.frames.push_back(definition);
+
58 database.frameIndexByKey.emplace(FrameKey(definition.canId, false), 0U);
+
59
+
60 RawCanFrame frame;
+
61 frame.canId = definition.canId;
+
62 frame.data = test.data;
+
63 const DecodedFrameValue result = DbcDecoder().Decode(database, frame);
+
64 const bool passed = result.valid &&
+
65 (result.definition == &database.frames[0]) &&
+
66 (result.signals.size() == 1U) &&
+
67 (result.signals[0].definition == &database.frames[0].signals[0]) &&
+
68 (result.signals[0].valid == test.valid) &&
+
69 (!test.valid || (((test.valueType == ValueType::Signed)
+
70 ? (std::get_if<std::int64_t>(&result.signals[0].rawValue) &&
+
71 std::get<std::int64_t>(result.signals[0].rawValue) == test.rawValue)
+
72 : (std::get_if<std::uint64_t>(&result.signals[0].rawValue) &&
+
73 std::get<std::uint64_t>(result.signals[0].rawValue) ==
+
74 static_cast<std::uint64_t>(test.rawValue))) &&
+
75 (result.signals[0].physicalValue == test.physicalValue)));
+
76 if (!passed) {
+
77 std::cerr << "FAIL: " << test.name << '\n';
+
78 ++failures;
+
79 }
+
80 }
+
81 std::size_t boundaryCases = 0U;
+
82 for (ByteOrder order: {ByteOrder::Intel, ByteOrder::Motorola}) {
+
83 for (ValueType type: {ValueType::Unsigned, ValueType::Signed}) {
+
84 for (std::uint64_t bits: {std::uint64_t(0U), std::uint64_t(0x7FFFFFFFFFFFFFFFULL),
+
85 std::uint64_t(0x8000000000000000ULL),
+
86 std::uint64_t(0x8000000000000001ULL),
+
87 std::uint64_t(0xFFFFFFFFFFFFFFFFULL)}) {
+
88 DecodeDatabase database;
+
89 DecodeFrame definition;
+
90 DecodeSignal signal;
+
91 signal.startBit = order == ByteOrder::Intel ? 0U : 7U;
+
92 signal.length = 64U;
+
93 signal.byteOrder = order;
+
94 signal.valueType = type;
+
95 signal.factor = 0.5;
+
96 signal.offset = 10.0;
+
97 definition.signals.push_back(signal);
+
98 database.frames.push_back(definition);
+
99 database.frameIndexByKey.emplace(FrameKey(0U, false), 0U);
+
100 RawCanFrame frame;
+
101 for (unsigned byte = 0U; byte < 8U; ++byte) {
+
102 const unsigned shift = (order == ByteOrder::Intel ? byte : 7U - byte) * 8U;
+
103 frame.data.push_back(static_cast<std::uint8_t>(bits >> shift));
+
104 }
+
105 const auto result = DbcDecoder().Decode(database, frame);
+
106 const std::int64_t signedExpected = bits <= 0x7FFFFFFFFFFFFFFFULL
+
107 ? static_cast<std::int64_t>(bits)
+
108 : std::numeric_limits<std::int64_t>::min() +
+
109 static_cast<std::int64_t>(bits - 0x8000000000000000ULL);
+
110 const auto &decoded = result.signals.at(0U);
+
111 const auto expected = type == ValueType::Unsigned
+
112 ? std::variant<std::int64_t, std::uint64_t>(bits)
+
113 : std::variant<std::int64_t, std::uint64_t>(signedExpected);
+
114 const double physical = (type == ValueType::Unsigned
+
115 ? static_cast<double>(bits)
+
116 : static_cast<double>(signedExpected)) *
+
117 0.5 +
+
118 10.0;
+
119 std::ostringstream actualText;
+
120 std::ostringstream expectedText;
+
121 std::visit([&actualText](auto raw) { actualText << raw; }, decoded.rawValue);
+
122 if (type == ValueType::Unsigned)
+
123 expectedText << bits;
+
124 else
+
125 expectedText << signedExpected;
+
126 if (!decoded.valid || decoded.rawValue != expected ||
+
127 decoded.physicalValue != physical || actualText.str() != expectedText.str()) {
+
128 std::cerr << "FAIL: 64-bit boundary " << bits << '\n';
+
129 ++failures;
+
130 }
+
131 ++boundaryCases;
+
132 }
+
133 }
+
134 }
+
135 if (failures != 0)
+
136 return 1;
+
137 std::cout << "All " << sizeof(cases) / sizeof(cases[0]) + boundaryCases << " decoder cases passed.\n";
+
138 return 0;
+
139}
+
Runtime CAN decoder using prebuilt decode database.
Definition dbc_decoder.h:64
+
DecodedFrameValue Decode(const DecodeDatabase &database, const RawCanFrame &frame) const
Decode one raw CAN frame.
+
Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
+
ByteOrder
Signal byte order used for runtime decoding.
+
ValueType
Signal numeric type.
+
Runtime decode database with fast lookup by CAN ID.
+
Runtime-ready frame definition.
+
std::uint8_t dlc
+
std::uint32_t canId
+
Runtime-ready signal definition.
+ +
std::string name
+ +
ValueType valueType
+
std::uint32_t startBit
+
ByteOrder byteOrder
+
std::uint32_t length
+
Fully decoded frame.
Definition dbc_decoder.h:51
+ +
const DecodeFrame * definition
Definition dbc_decoder.h:52
+
Key for fast frame lookup.
+
Raw CAN frame used for runtime or trace decoding.
Definition dbc_decoder.h:24
+
std::vector< std::uint8_t > data
Definition dbc_decoder.h:27
+
std::uint32_t canId
Definition dbc_decoder.h:25
+
+
+ + + + diff --git a/docs/html/dbc__parser_8cpp.html b/docs/html/dbc__parser_8cpp.html index f943b59..7ab1e5b 100644 --- a/docs/html/dbc__parser_8cpp.html +++ b/docs/html/dbc__parser_8cpp.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_parser.cpp File Reference @@ -34,10 +34,10 @@ - + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp.html',''); initResiza
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -90,15 +97,15 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp.html',''); initResiza

Created: 2026-03-13 Author: Deeaitch (Dim. Himro) More...

#include "dbc_parser.h"
-#include <fstream>
-#include <sstream>
-#include <stdexcept>
+#include "dbc_statement_handler.h"
#include <cctype>
+#include <fstream>
+#include <stdexcept>

Go to the source code of this file.

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_parser.cpp.

@@ -107,7 +114,7 @@ $(document).ready(function(){initNavTree('dbc__parser_8cpp.html',''); initResiza diff --git a/docs/html/dbc__parser_8cpp_source.html b/docs/html/dbc__parser_8cpp_source.html index b98cb34..379414a 100644 --- a/docs/html/dbc__parser_8cpp_source.html +++ b/docs/html/dbc__parser_8cpp_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_parser.cpp Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__parser_8h.html',''); initResizabl
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -92,8 +99,6 @@ $(document).ready(function(){initNavTree('dbc__parser_8h.html',''); initResizabl

Created: 2026-03-13 Author: Deeaitch (Dim. Himro) More...

#include <string>
-#include <vector>
-#include <cstdint>
#include "dbc_database.h"

Go to the source code of this file.

@@ -105,8 +110,8 @@ Classes  

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_parser.h.

@@ -115,7 +120,7 @@ Classes diff --git a/docs/html/dbc__parser_8h_source.html b/docs/html/dbc__parser_8h_source.html index 5792d31..fffb5d7 100644 --- a/docs/html/dbc__parser_8h_source.html +++ b/docs/html/dbc__parser_8h_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_parser.h Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/dbc__parser__test_8cpp_source.html b/docs/html/dbc__parser__test_8cpp_source.html new file mode 100644 index 0000000..67f8873 --- /dev/null +++ b/docs/html/dbc__parser__test_8cpp_source.html @@ -0,0 +1,373 @@ + + + + + + + +DBC Framework: dbc_parser_test.cpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
dbc_parser_test.cpp
+
+
+
1#include "dbc_parser.h"
+
2#include "dbc_statement_handler.h"
+
3
+
4#include <chrono>
+
5#include <filesystem>
+
6#include <fstream>
+
7#include <iostream>
+
8#include <stdexcept>
+
9
+
10struct Fixture {
+
11 std::filesystem::path path = std::filesystem::temp_directory_path() /
+
12 ("dbc_parser_test_" + std::to_string(std::chrono::steady_clock::now().time_since_epoch().count()) + ".dbc");
+
13 ~Fixture() {
+
14 std::error_code error;
+
15 std::filesystem::remove(path, error);
+
16 }
+
17 void Write(const std::string &text) const {
+
18 std::ofstream output(path);
+
19 output << text;
+
20 if (!output)
+
21 throw std::runtime_error("Cannot write test fixture.");
+
22 }
+
23};
+
24
+
25class CountingHandler : public DbcStatementHandler {
+
26public:
+
27 inline static int instances = 0;
+
28 inline static int calls = 0;
+
29 CountingHandler() { ++instances; }
+
30 void Handle(const std::string &, DbcParseContext &context) const override {
+
31 ++calls;
+
32 context.database.frames.emplace_back();
+
33 }
+
34};
+
35
+
36int main() {
+
37 Fixture fixture;
+
38 int failures = 0;
+
39 std::size_t count = 0U;
+
40 const auto check = [&](bool passed, const std::string &name) {
+
41 ++count;
+
42 if (!passed) {
+
43 ++failures;
+
44 std::cerr << "FAIL: " << name << '\n';
+
45 }
+
46 };
+
47 struct ValidCase {
+
48 const char *line;
+
49 std::uint32_t id;
+
50 bool extended;
+
51 unsigned length;
+
52 };
+
53 const ValidCase valid[] = {
+
54 {"BO_ 0 Frame: 0 ECU", 0U, false, 0U},
+
55 {"BO_ 2047 Frame: 8 ECU", 2047U, false, 8U},
+
56 {"BO_ 2048 Frame: 64 ECU", 2048U, true, 64U},
+
57 {"BO_ 536870911 Frame: 255 ECU", 0x1FFFFFFFU, true, 255U},
+
58 {"BO_ 2147483649 Frame: 8 ECU", 1U, true, 8U},
+
59 {"BO_ 2684354559 Frame: 8 ECU", 0x1FFFFFFFU, true, 8U},
+
60 {" BO_\t256\tFrame :\t8\tECU \r", 256U, false, 8U}};
+
61 for (const auto &test: valid) {
+
62 fixture.Write(std::string(test.line) + '\n');
+
63 try {
+
64 const auto database = DbcParser().ParseFile(fixture.path.string());
+
65 check(database.frames.size() == 1U && database.frames[0].name == "Frame" &&
+
66 database.frames[0].canId == test.id &&
+
67 database.frames[0].isExtended == test.extended &&
+
68 database.frames[0].dlc == test.length &&
+
69 database.frames[0].transmitter == "ECU",
+
70 test.line);
+
71 } catch (const std::exception &error) { check(false, error.what()); }
+
72 }
+
73 const char *invalid[] = {
+
74 "BO_ invalid", "BO_", "BO_ 1", "BO_ 1 : 8 ECU", "BO_ 1 Frame 8 ECU",
+
75 "BO_ 1 Frame:", "BO_ 1 Frame: 8", "BO_ 1 Frame: 8 ECU extra",
+
76 "BO_ 1 Two Names: 8 ECU", "BO_ -1 Frame: 8 ECU", "BO_ +1 Frame: 8 ECU",
+
77 "BO_ 1x Frame: 8 ECU", "BO_ 0x123 Frame: 8 ECU", "BO_ 1.5 Frame: 8 ECU",
+
78 "BO_ 4294967296 Frame: 8 ECU", "BO_ 999999999999999999999 Frame: 8 ECU",
+
79 "BO_ 536870912 Frame: 8 ECU", "BO_ 1073741824 Frame: 8 ECU",
+
80 "BO_ 2684354560 Frame: 8 ECU", "BO_ 4294967295 Frame: 8 ECU",
+
81 "BO_ 1 Frame: -1 ECU", "BO_ 1 Frame: +8 ECU", "BO_ 1 Frame: 8x ECU",
+
82 "BO_ 1 Frame: 8.5 ECU", "BO_ 1 Frame: 256 ECU",
+
83 "BO_ 1 Frame: 4294967296 ECU", "BO_\tinvalid"};
+
84 for (const auto *line: invalid) {
+
85 fixture.Write(std::string("VERSION \"test\"\n\n") + line + '\n');
+
86 try {
+
87 DbcParser().ParseFile(fixture.path.string());
+
88 check(false, line);
+
89 } catch (const std::runtime_error &error) {
+
90 const std::string prefix = fixture.path.string() + ":3: ";
+
91 check(std::string(error.what()).find(prefix) == 0U &&
+
92 std::string(error.what()).size() > prefix.size(),
+
93 line);
+
94 }
+
95 }
+
96 fixture.Write(
+
97 "BO_TX_BU_ 256 : ECU;\nBO_ 256 Frame: 8 ECU\n"
+
98 " SG_ Speed : 0|16@1+ (0.5,1) [0|100] \"rpm\" ECU\n"
+
99 "CM_ BO_ 256 \"Frame comment\";\nCM_ SG_ 256 Speed \"Signal comment\";\n"
+
100 "BO_ 257 Second: 8 ECU\n");
+
101 const auto database = DbcParser().ParseFile(fixture.path.string());
+
102 check(database.frames.size() == 2U && database.frames[0].signals.size() == 1U &&
+
103 database.frames[0].comment == "Frame comment" &&
+
104 database.frames[0].signals[0].comment == "Signal comment",
+
105 "Integration");
+
106 fixture.Write("\nSG_ Speed : invalid\n");
+
107 try {
+
108 DbcParser().ParseFile(fixture.path.string());
+
109 check(false, "Signal error location");
+
110 } catch (const std::runtime_error &error) {
+
111 check(std::string(error.what()).find(fixture.path.string() + ":2: ") == 0U,
+
112 "Signal error location");
+
113 }
+
114 const DbcParser signalParser;
+
115 const auto signalLine = [](const std::string &start, const std::string &length,
+
116 const std::string &order, const std::string &factor,
+
117 const std::string &offset, const std::string &minimum,
+
118 const std::string &maximum) {
+
119 return "SG_ Value : " + start + "|" + length + "@" + order +
+
120 " (" + factor + "," + offset + ") [" + minimum + "|" + maximum + "] \"\" ECU";
+
121 };
+
122 const auto rejectSignal = [&](const std::string &line, unsigned payload = 8U) {
+
123 fixture.Write("BO_ 1 Frame: " + std::to_string(payload) + " ECU\n\n" + line + "\n");
+
124 try {
+
125 signalParser.ParseFile(fixture.path.string());
+
126 check(false, "Reject " + line);
+
127 } catch (const std::runtime_error &error) {
+
128 const std::string prefix = fixture.path.string() + ":3: ";
+
129 check(std::string(error.what()).find(prefix) == 0U &&
+
130 std::string(error.what()).size() > prefix.size(),
+
131 "Reject " + line);
+
132 }
+
133 };
+
134 const std::string ordinary = signalLine("0", "8", "1+", "1", "0", "0", "255");
+
135 for (const std::string value: {"-1", "+1", "0junk", "0x10", "1.5",
+
136 "4294967296", "999999999999999999999"}) {
+
137 rejectSignal(signalLine(value, "8", "1+", "1", "0", "0", "255"));
+
138 rejectSignal(signalLine("0", value, "1+", "1", "0", "0", "255"));
+
139 }
+
140 for (const std::string length: {"0", "65"})
+
141 rejectSignal(signalLine("0", length, "1+", "1", "0", "0", "255"));
+
142 for (const std::string order: {"2+", "9-", "1", "1x", "1++", "01+"})
+
143 rejectSignal(signalLine("0", "8", order, "1", "0", "0", "255"));
+
144 for (const std::string value: {"1junk", "nan", "NaN", "inf", "-inf", "1e999", "1e-999", "0x1p2", "", "1e", "1.2.3"}) {
+
145 rejectSignal(signalLine("0", "8", "1+", value, "0", "0", "255"));
+
146 rejectSignal(signalLine("0", "8", "1+", "1", value, "0", "255"));
+
147 rejectSignal(signalLine("0", "8", "1+", "1", "0", value, "255"));
+
148 rejectSignal(signalLine("0", "8", "1+", "1", "0", "0", value));
+
149 }
+
150 rejectSignal(signalLine("0", "8", "1+", "1", "0", "2", "1"));
+
151 for (const std::string name: {"", "Two Names", "Value M", "Value m1", "Value m1M"}) {
+
152 std::string line = ordinary;
+
153 line.replace(4U, 5U, name);
+
154 rejectSignal(line);
+
155 }
+
156 for (const std::string broken: {
+
157 "SG_", "SG_ Value", "SG_ Value : 0|8@1+ (1,0) [0|255] ECU",
+
158 "SG_ Value : 0|8@1+ (1,0) [0|255] \"\"",
+
159 "SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU,",
+
160 "SG_ Value : 0|8@1+ (1,0) [0|255] \"\" ECU extra"})
+
161 rejectSignal(broken);
+
162 rejectSignal(signalLine("64", "1", "1+", "1", "0", "0", "1"));
+
163 rejectSignal(signalLine("63", "2", "1+", "1", "0", "0", "3"));
+
164 rejectSignal(signalLine("56", "2", "0+", "1", "0", "0", "3"));
+
165 rejectSignal(signalLine("4294967295", "64", "1+", "1", "0", "0", "1"));
+
166 rejectSignal(ordinary, 0U);
+
167 for (const char delimiter: {'|', '@', '(', ')', '[', ']', '"'}) {
+
168 std::string line = ordinary;
+
169 line.erase(line.find(delimiter), 1U);
+
170 rejectSignal(line);
+
171 }
+
172 fixture.Write("BO_ 1 Frame: 8 ECU\n" +
+
173 signalLine("0", "8", "1+", "0", "0", "0", "0") + "\n" +
+
174 signalLine("8", "8", "1-", "-1", "0", "-255", "0") + "\n");
+
175 const auto factors = signalParser.ParseFile(fixture.path.string());
+
176 check(factors.frames[0].signals.size() == 2U &&
+
177 factors.frames[0].signals[0].factor == 0.0 &&
+
178 factors.frames[0].signals[1].factor == -1.0,
+
179 "Zero and negative factors and equal range boundaries");
+
180
+
181 struct SignalCase {
+
182 const char *start;
+
183 const char *length;
+
184 const char *order;
+
185 unsigned payload;
+
186 };
+
187 const SignalCase validSignals[] = {
+
188 {"0", "1", "1+", 1U},
+
189 {"7", "1", "0-", 1U},
+
190 {"0", "64", "1+", 8U},
+
191 {"7", "64", "0-", 8U},
+
192 {"63", "1", "1+", 8U},
+
193 {"56", "1", "0+", 8U},
+
194 {"3", "12", "0+", 2U},
+
195 {"2039", "1", "1+", 255U}};
+
196 for (const auto &test: validSignals) {
+
197 fixture.Write("BO_ 1 Frame: " + std::to_string(test.payload) + " ECU\n" +
+
198 signalLine(test.start, test.length, test.order, ".5e+1", "-2.5E-1", "-1.", "+2e2") + "\n");
+
199 try {
+
200 const auto parsed = signalParser.ParseFile(fixture.path.string());
+
201 const auto &signal = parsed.frames.at(0).signals.at(0);
+
202 check(signal.startBit == std::stoul(test.start) &&
+
203 signal.length == std::stoul(test.length) &&
+
204 signal.isLittleEndian == (test.order[0] == '1') &&
+
205 signal.isSigned == (test.order[1] == '-') &&
+
206 signal.factor == 5.0 && signal.offset == -0.25 &&
+
207 signal.minimum == -1.0 && signal.maximum == 200.0,
+
208 "Valid signal boundary and numeric metadata");
+
209 } catch (const std::exception &error) { check(false, error.what()); }
+
210 }
+
211 fixture.Write("BO_ 1 Frame: 8 ECU\n"
+
212 "SG_\tValue\t:\t0 | 8 @1+ ( 1 , 0 ) [ 0 | 255 ] \"rpm\" ECU1,\tECU2\n");
+
213 try {
+
214 const auto parsed = signalParser.ParseFile(fixture.path.string());
+
215 const auto &signal = parsed.frames.at(0).signals.at(0);
+
216 check(signal.name == "Value" && signal.unit == "rpm" &&
+
217 signal.receivers == std::vector<std::string>({"ECU1", "ECU2"}),
+
218 "Signal tabs, spaces, and receiver list");
+
219 } catch (const std::exception &error) { check(false, error.what()); }
+
220 DbcDatabase dispatchDatabase;
+
221 DbcParseContext context{dispatchDatabase, nullptr};
+
222 DbcStatementDispatcher dispatcher;
+
223 dispatcher.RegisterType<CountingHandler>("TEST_");
+
224 check(dispatcher.Dispatch("TEST_ first", context) &&
+
225 dispatcher.Dispatch("TEST_ second", context) &&
+
226 CountingHandler::instances == 1 && CountingHandler::calls == 2 &&
+
227 dispatchDatabase.frames.size() == 2U,
+
228 "Factory dispatch and handler reuse");
+
229 check(!dispatcher.Dispatch("TEST_OTHER data", context) &&
+
230 !dispatcher.Dispatch("BO_TX_BU_ 1 : ECU;", context) &&
+
231 !dispatcher.Dispatch("VAL_ 1 Speed 0 \"Stopped\";", context) &&
+
232 CountingHandler::calls == 2,
+
233 "Exact and unknown keyword dispatch");
+
234 const DbcParser parser;
+
235 fixture.Write("BO_ 1 First: 8 ECU\n");
+
236 check(parser.ParseFile(fixture.path.string()).frames.size() == 1U, "First parse");
+
237 fixture.Write("SG_ Speed : invalid\n");
+
238 try {
+
239 parser.ParseFile(fixture.path.string());
+
240 check(false, "Independent parse context");
+
241 } catch (const std::runtime_error &error) {
+
242 check(std::string(error.what()).find("Signal found before any frame") !=
+
243 std::string::npos,
+
244 "Independent parse context");
+
245 }
+
246 fixture.Write("BO_ 2 Second: 8 ECU\n");
+
247 const auto recovered = parser.ParseFile(fixture.path.string());
+
248 check(recovered.frames.size() == 1U && recovered.frames[0].canId == 2U,
+
249 "Fresh parse after error");
+
250 if (failures != 0) return 1;
+
251 std::cout << "All " << count << " parser cases passed.\n";
+
252 return 0;
+
253}
+
Minimal DBC parser.
Definition dbc_parser.h:33
+
DbcDatabase ParseFile(const std::string &filePath) const
Parse DBC file.
+ +
bool Dispatch(const std::string &line, DbcParseContext &context) const
+ +
Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
+
Parsed DBC content stored in a simple internal form.
+
std::vector< FrameInfo > frames
+ +
+
+ + + + diff --git a/docs/html/dbc__statement__handler_8cpp_source.html b/docs/html/dbc__statement__handler_8cpp_source.html new file mode 100644 index 0000000..855638b --- /dev/null +++ b/docs/html/dbc__statement__handler_8cpp_source.html @@ -0,0 +1,457 @@ + + + + + + + +DBC Framework: dbc_statement_handler.cpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
dbc_statement_handler.cpp
+
+
+
1// SPDX-License-Identifier: MIT
+
2#include "dbc_statement_handler.h"
+
3#include <cctype>
+
4#include <charconv>
+
5#include <cmath>
+
6#include <limits>
+
7#include <regex>
+
8#include <sstream>
+
9#include <stdexcept>
+
10
+
11namespace {
+
12 std::uint32_t ParseDecimal(const std::string &text,
+
13 std::uint32_t maximum,
+
14 const char *field) {
+
15 std::uint32_t value = 0U;
+
16 const auto parsed = std::from_chars(text.data(), text.data() + text.size(), value);
+
17 if (text.empty() || parsed.ec != std::errc() ||
+
18 parsed.ptr != text.data() + text.size() || value > maximum)
+
19 throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
+
20 return value;
+
21 }
+
22
+
28 std::string TrimText(const std::string &text) {
+
29 std::string::size_type begin = 0U;
+
30 while ((begin < text.size()) &&
+
31 std::isspace(static_cast<unsigned char>(text[begin])))
+
32 ++begin;
+
33
+
34 std::string::size_type end = text.size();
+
35 while ((end > begin) &&
+
36 std::isspace(static_cast<unsigned char>(text[end - 1U])))
+
37 --end;
+
38
+
39 return text.substr(begin, end - begin);
+
40 }
+
41 FrameInfo *FindFrameById(DbcDatabase &, std::uint32_t, bool);
+
42 SignalInfo *FindSignalByName(FrameInfo &, const std::string &);
+
43}// namespace
+
44
+
45namespace {
+
46 std::vector<std::string> SplitReceivers(const std::string &text) {
+
47 std::vector<std::string> receivers;
+
48 std::string token;
+
49 std::istringstream stream(text);
+
50
+
51 while (std::getline(stream, token, ',')) {
+
52 token = TrimText(token);
+
53 if (!token.empty())
+
54 receivers.push_back(token);
+
55 }
+
56
+
57 return receivers;
+
58 }
+
59
+
60 void NormalizeCanId(std::uint32_t rawCanId,
+
61 std::uint32_t &normalizedCanId,
+
62 bool &isExtended) {
+
63 /*
+
64 * DBC commonly stores extended identifiers with bit 31 set.
+
65 * Example:
+
66 * raw id = 0x80000000 | actual_29_bit_id
+
67 */
+
68 if ((rawCanId & 0x80000000U) != 0U) {
+
69 isExtended = true;
+
70 normalizedCanId = (rawCanId & 0x1FFFFFFFU);
+
71 } else {
+
72 isExtended = (rawCanId > 0x7FFU);
+
73 normalizedCanId = rawCanId;
+
74 }
+
75 }
+
76
+
77 std::uint32_t TryExtractPgn(std::uint32_t canId, bool isExtended, bool &hasPgn) {
+
78 hasPgn = false;
+
79
+
80 if (!isExtended)
+
81 return 0U;
+
82
+
83 if ((canId & 0x1FFFFFFFU) != canId)
+
84 return 0U;
+
85
+
86 const std::uint32_t pf = (canId >> 16U) & 0xFFU;
+
87 const std::uint32_t ps = (canId >> 8U) & 0xFFU;
+
88 const std::uint32_t dp = (canId >> 24U) & 0x01U;
+
89
+
90 std::uint32_t pgn = 0U;
+
91
+
92 if (pf < 240U)
+
93 pgn = (dp << 16U) | (pf << 8U);
+
94 else
+
95 pgn = (dp << 16U) | (pf << 8U) | ps;
+
96
+
97 hasPgn = true;
+
98 return pgn;
+
99 }
+
100
+
101}// namespace
+
102
+
103FrameInfo DbcFrameHandler::ParseFrameLine(const std::string &line) {
+
104 /*
+
105 * Example:
+
106 * BO_ 256 EngineData: 8 EEC1
+
107 */
+
108
+
109 std::istringstream stream(line);
+
110 std::string keyword;
+
111 std::string idText;
+
112 if (!(stream >> keyword >> idText) || keyword != "BO_")
+
113 throw std::runtime_error("Missing CAN ID in frame definition.");
+
114
+
115 const std::uint32_t rawCanId = ParseDecimal(
+
116 idText, std::numeric_limits<std::uint32_t>::max(), "CAN ID");
+
117 // Only bit 31 may accompany the actual 29-bit identifier.
+
118 if ((rawCanId & 0x60000000U) != 0U)
+
119 throw std::runtime_error("CAN ID exceeds the 29-bit identifier range.");
+
120
+
121 std::string nameText;
+
122 if (!std::getline(stream, nameText, ':') || stream.eof())
+
123 throw std::runtime_error("Missing ':' in frame definition.");
+
124 std::istringstream nameStream(nameText);
+
125 FrameInfo frame;
+
126 std::string extra;
+
127 if (!(nameStream >> frame.name) || (nameStream >> extra))
+
128 throw std::runtime_error("Missing or invalid frame name.");
+
129
+
130 std::string lengthText;
+
131 if (!(stream >> lengthText))
+
132 throw std::runtime_error("Missing payload length in frame definition.");
+
133 frame.dlc = static_cast<std::uint8_t>(ParseDecimal(
+
134 lengthText, std::numeric_limits<std::uint8_t>::max(), "payload length"));
+
135 if (!(stream >> frame.transmitter))
+
136 throw std::runtime_error("Missing transmitter in frame definition.");
+
137 if (stream >> extra)
+
138 throw std::runtime_error("Unexpected trailing field in frame definition: " + extra);
+
139
+
140 NormalizeCanId(rawCanId, frame.canId, frame.isExtended);
+
141 frame.pgn = TryExtractPgn(frame.canId, frame.isExtended, frame.hasPgn);
+
142
+
143 return frame;
+
144}
+
145
+
146SignalInfo DbcSignalHandler::ParseSignalLine(const std::string &line) {
+
147 // Match the complete statement before converting any numeric fields.
+
148 static const std::regex syntax(
+
149 R"dbc(^SG_[ \t]+([^:]+):[ \t]*([^| \t]+)[ \t]*\|[ \t]*([^@ \t]+)[ \t]*@[ \t]*([01])([+-])[ \t]*\‍([ \t]*([^, \t]+)[ \t]*,[ \t]*([^ )\t]+)[ \t]*\)[ \t]*\[[ \t]*([^| \t]+)[ \t]*\|[ \t]*([^\] \t]+)[ \t]*\][ \t]*"([^"\r\n]*)"[ \t]+([^ \t,]+(?:[ \t]*,[ \t]*[^ \t,]+)*)[ \t]*$)dbc");
+
150 std::smatch fields;
+
151 if (!std::regex_match(line, fields, syntax))
+
152 throw std::runtime_error("Malformed or unsupported SG_ signal definition.");
+
153
+
154 SignalInfo signal;
+
155 signal.name = TrimText(fields[1].str());
+
156 if (signal.name.empty() || signal.name.find_first_of(" \t\r\n") != std::string::npos)
+
157 throw std::runtime_error("Invalid signal name or unsupported multiplexing syntax.");
+
158
+
159 signal.startBit = ParseDecimal(fields[2].str(),
+
160 std::numeric_limits<std::uint32_t>::max(), "signal start bit");
+
161 signal.length = ParseDecimal(fields[3].str(), 64U, "signal length");
+
162 if (signal.length == 0U)
+
163 throw std::runtime_error("Signal length must be within 1..64 bits.");
+
164 signal.isLittleEndian = fields[4].str() == "1";
+
165 signal.isSigned = fields[5].str() == "-";
+
166
+
167 const auto parsePhysical = [](const std::string &text, const char *field) {
+
168 static const std::regex number(
+
169 R"(^[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?$)");
+
170 if (!std::regex_match(text, number))
+
171 throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
+
172 std::size_t consumed = 0U;
+
173 double value;
+
174 try {
+
175 value = std::stod(text, &consumed);
+
176 } catch (const std::exception &) {
+
177 throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
+
178 }
+
179 if (consumed != text.size() || !std::isfinite(value))
+
180 throw std::runtime_error(std::string("Invalid ") + field + ": " + text);
+
181 return value;
+
182 };
+
183 signal.factor = parsePhysical(fields[6].str(), "signal factor");
+
184 signal.offset = parsePhysical(fields[7].str(), "signal offset");
+
185 signal.minimum = parsePhysical(fields[8].str(), "signal minimum");
+
186 signal.maximum = parsePhysical(fields[9].str(), "signal maximum");
+
187 if (signal.minimum > signal.maximum)
+
188 throw std::runtime_error("Signal minimum exceeds maximum.");
+
189 signal.unit = fields[10].str();
+
190 signal.receivers = SplitReceivers(fields[11].str());
+
191 return signal;
+
192}
+
193
+
194void DbcCommentHandler::ParseCommentLine(const std::string &line, DbcDatabase &database) {
+
195 /*
+
196 * Examples:
+
197 * CM_ BO_ 256 "Frame comment";
+
198 * CM_ SG_ 256 EngineSpeed "Signal comment";
+
199 */
+
200
+
201 std::istringstream stream(line);
+
202 std::string token;
+
203 stream >> token;
+
204
+
205 if (token != "CM_")
+
206 return;
+
207
+
208 stream >> token;
+
209
+
210 if (token == "BO_") {
+
211 std::uint32_t rawCanId = 0U;
+
212 std::uint32_t canId = 0U;
+
213 bool isExtended = false;
+
214
+
215 stream >> rawCanId;
+
216 NormalizeCanId(rawCanId, canId, isExtended);
+
217
+
218 const std::string::size_type quoteBegin = line.find('"');
+
219 const std::string::size_type quoteEnd = line.rfind('"');
+
220
+
221 if ((quoteBegin == std::string::npos) ||
+
222 (quoteEnd == std::string::npos) ||
+
223 (quoteEnd <= quoteBegin))
+
224 return;
+
225
+
226 FrameInfo *frame = FindFrameById(database, canId, isExtended);
+
227 if (frame != nullptr)
+
228 frame->comment = line.substr(quoteBegin + 1U, quoteEnd - quoteBegin - 1U);
+
229 } else if (token == "SG_") {
+
230 std::uint32_t rawCanId = 0U;
+
231 std::uint32_t canId = 0U;
+
232 bool isExtended = false;
+
233 std::string signalName;
+
234
+
235 stream >> rawCanId;
+
236 stream >> signalName;
+
237
+
238 NormalizeCanId(rawCanId, canId, isExtended);
+
239
+
240 const std::string::size_type quoteBegin = line.find('"');
+
241 const std::string::size_type quoteEnd = line.rfind('"');
+
242
+
243 if ((quoteBegin == std::string::npos) ||
+
244 (quoteEnd == std::string::npos) ||
+
245 (quoteEnd <= quoteBegin))
+
246 return;
+
247
+
248 FrameInfo *frame = FindFrameById(database, canId, isExtended);
+
249 if (frame != nullptr) {
+
250 SignalInfo *signal = FindSignalByName(*frame, signalName);
+
251 if (signal != nullptr)
+
252 signal->comment = line.substr(quoteBegin + 1U, quoteEnd - quoteBegin - 1U);
+
253 }
+
254 }
+
255}
+
256
+
257namespace {
+
258 FrameInfo *FindFrameById(DbcDatabase &database,
+
259 std::uint32_t canId,
+
260 bool isExtended) {
+
261 for (std::size_t index = 0U; index < database.frames.size(); ++index) {
+
262 if ((database.frames[index].canId == canId) &&
+
263 (database.frames[index].isExtended == isExtended))
+
264 return &database.frames[index];
+
265 }
+
266
+
267 return nullptr;
+
268 }
+
269
+
270 SignalInfo *FindSignalByName(FrameInfo &frame, const std::string &signalName) {
+
271 for (std::size_t index = 0U; index < frame.signals.size(); ++index) {
+
272 if (frame.signals[index].name == signalName)
+
273 return &frame.signals[index];
+
274 }
+
275
+
276 return nullptr;
+
277 }
+
278}// namespace
+
279
+
280void DbcFrameHandler::Handle(const std::string &line, DbcParseContext &context) const {
+
281 context.database.frames.push_back(ParseFrameLine(line));
+
282 context.currentFrame = &context.database.frames.back();
+
283}
+
284
+
285void DbcSignalHandler::Handle(const std::string &line, DbcParseContext &context) const {
+
286 if (context.currentFrame == nullptr)
+
287 throw std::runtime_error("Signal found before any frame definition.");
+
288 SignalInfo signal = ParseSignalLine(line);
+
289 const std::uint64_t payloadBits = static_cast<std::uint64_t>(context.currentFrame->dlc) * 8U;
+
290 std::uint64_t bit = signal.startBit;
+
291 for (std::uint32_t index = 0U; index < signal.length; ++index) {
+
292 if (bit >= payloadBits)
+
293 throw std::runtime_error("Signal exceeds the frame payload length.");
+
294 if (signal.isLittleEndian)
+
295 ++bit;
+
296 else
+
297 bit = (bit % 8U == 0U) ? bit + 15U : bit - 1U;
+
298 }
+
299 context.currentFrame->signals.push_back(std::move(signal));
+
300}
+
301
+
302void DbcCommentHandler::Handle(const std::string &line, DbcParseContext &context) const {
+
303 if (line.compare(0U, 4U, "CM_ ") == 0)
+
304 ParseCommentLine(line, context.database);
+
305}
+
306
+
307DbcStatementDispatcher::DbcStatementDispatcher() {
+
308 RegisterType<DbcFrameHandler>("BO_");
+
309 RegisterType<DbcSignalHandler>("SG_");
+
310 RegisterType<DbcCommentHandler>("CM_");
+
311}
+
312
+
+
313bool DbcStatementDispatcher::Dispatch(const std::string &line,
+
314 DbcParseContext &context) const {
+
315 std::istringstream stream(line);
+
316 std::string keyword;
+
317 stream >> keyword;
+
318 const auto handler = m_handlers.find(keyword);
+
319 if (handler == m_handlers.end())
+
320 return false;
+
321 handler->second->Handle(line, context);
+
322 return true;
+
323}
+
+
bool Dispatch(const std::string &line, DbcParseContext &context) const
+
Parsed DBC content stored in a simple internal form.
+
std::vector< FrameInfo > frames
+ +
Describes one CAN frame from a DBC file.
Definition frame_info.h:24
+
bool isExtended
Definition frame_info.h:27
+
bool hasPgn
Definition frame_info.h:29
+
std::string transmitter
Definition frame_info.h:31
+
std::uint8_t dlc
Definition frame_info.h:30
+
std::string name
Definition frame_info.h:25
+
std::string comment
Definition frame_info.h:32
+
std::uint32_t pgn
Definition frame_info.h:28
+
std::uint32_t canId
Definition frame_info.h:26
+
Describes one signal inside a DBC frame.
Definition signal_info.h:22
+
std::uint32_t length
Definition signal_info.h:25
+
std::string unit
Definition signal_info.h:32
+
std::vector< std::string > receivers
Definition signal_info.h:33
+
std::string name
Definition signal_info.h:23
+
bool isSigned
Definition signal_info.h:27
+
double offset
Definition signal_info.h:29
+
std::string comment
Definition signal_info.h:34
+
std::uint32_t startBit
Definition signal_info.h:24
+
double minimum
Definition signal_info.h:30
+
double maximum
Definition signal_info.h:31
+
double factor
Definition signal_info.h:28
+
bool isLittleEndian
Definition signal_info.h:26
+
+
+ + + + diff --git a/docs/html/dbc__statement__handler_8h_source.html b/docs/html/dbc__statement__handler_8h_source.html new file mode 100644 index 0000000..5466c66 --- /dev/null +++ b/docs/html/dbc__statement__handler_8h_source.html @@ -0,0 +1,199 @@ + + + + + + + +DBC Framework: dbc_statement_handler.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
dbc_statement_handler.h
+
+
+
1// SPDX-License-Identifier: MIT
+
2#ifndef DBC_STATEMENT_HANDLER_H
+
3#define DBC_STATEMENT_HANDLER_H
+
4
+
5#include "dbc_database.h"
+
6#include "typefactory.h"
+
7#include <string>
+
8#include <unordered_map>
+
9
+
+ +
12 DbcDatabase &database;
+
13 FrameInfo *currentFrame = nullptr;
+
14};
+
+
15
+
+ +
17public:
+
18 virtual ~DbcStatementHandler() = default;
+
19 virtual void Handle(const std::string &line, DbcParseContext &context) const = 0;
+
20};
+
+
21
+
+ +
23public:
+
24 void Handle(const std::string &line, DbcParseContext &context) const override;
+
25
+
26private:
+
27 static FrameInfo ParseFrameLine(const std::string &line);
+
28};
+
+
29
+
+ +
31public:
+
32 void Handle(const std::string &line, DbcParseContext &context) const override;
+
33
+
34private:
+
35 static SignalInfo ParseSignalLine(const std::string &line);
+
36};
+
+
37
+
+ +
39public:
+
40 void Handle(const std::string &line, DbcParseContext &context) const override;
+
41
+
42private:
+
43 static void ParseCommentLine(const std::string &line, DbcDatabase &database);
+
44};
+
+
45
+
+ +
48public:
+ +
50
+
51 template<class Handler>
+
52 void RegisterType(const std::string &keyword) {
+
53 m_factory.registerType<Handler>(keyword);
+
54 m_handlers.insert_or_assign(keyword, m_factory.create(keyword));
+
55 }
+
56
+
58 bool Dispatch(const std::string &line, DbcParseContext &context) const;
+
59
+
60private:
+ +
62 std::unordered_map<std::string, std::shared_ptr<DbcStatementHandler>> m_handlers;
+
63};
+
+
64
+
65#endif /* DBC_STATEMENT_HANDLER_H */
+ + + + +
bool Dispatch(const std::string &line, DbcParseContext &context) const
+ +
Registry-based factory for creating objects by runtime identifier.
Definition typefactory.h:59
+
BasePtr create(const ClassId &id, Args... args) const
Creates an instance for the given id using provided arguments.
Definition typefactory.h:97
+
void registerType(const ClassId &id)
Registers a Derived type under the given id.
Definition typefactory.h:76
+
Created: 2026-03-13 Author: Deeaitch (Dim. Himro)
+
Parsed DBC content stored in a simple internal form.
+ +
Describes one CAN frame from a DBC file.
Definition frame_info.h:24
+
Describes one signal inside a DBC frame.
Definition signal_info.h:22
+
+
+ + + + diff --git a/docs/html/dbc__tree__builder_8cpp.html b/docs/html/dbc__tree__builder_8cpp.html index bd70981..849ccf2 100644 --- a/docs/html/dbc__tree__builder_8cpp.html +++ b/docs/html/dbc__tree__builder_8cpp.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_tree_builder.cpp File Reference @@ -34,10 +34,10 @@ - + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8cpp.html',''); ini
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -93,8 +100,8 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8cpp.html',''); ini

Go to the source code of this file.

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_tree_builder.cpp.

@@ -103,7 +110,7 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8cpp.html',''); ini diff --git a/docs/html/dbc__tree__builder_8cpp_source.html b/docs/html/dbc__tree__builder_8cpp_source.html index 577390b..ae63936 100644 --- a/docs/html/dbc__tree__builder_8cpp_source.html +++ b/docs/html/dbc__tree__builder_8cpp_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_tree_builder.cpp Source File @@ -34,10 +34,10 @@ - + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/dbc__tree__builder_8h.html b/docs/html/dbc__tree__builder_8h.html index de86569..c6e4f3a 100644 --- a/docs/html/dbc__tree__builder_8h.html +++ b/docs/html/dbc__tree__builder_8h.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_tree_builder.h File Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8h.html',''); initR
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -104,8 +111,8 @@ Classes  

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file dbc_tree_builder.h.

@@ -114,7 +121,7 @@ Classes diff --git a/docs/html/dbc__tree__builder_8h_source.html b/docs/html/dbc__tree__builder_8h_source.html index b13e3fc..ce1fdc1 100644 --- a/docs/html/dbc__tree__builder_8h_source.html +++ b/docs/html/dbc__tree__builder_8h_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: dbc_tree_builder.h Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
@@ -112,7 +126,7 @@ $(document).ready(function(){initNavTree('dbc__tree__builder_8h_source.html','') diff --git a/docs/html/decode__database_8h.html b/docs/html/decode__database_8h.html index 189e2b9..ae4bb6d 100644 --- a/docs/html/decode__database_8h.html +++ b/docs/html/decode__database_8h.html @@ -1,9 +1,9 @@ - + - + DBC Framework: decode_database.h File Reference @@ -34,10 +34,10 @@ - + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('decode__database_8h.html',''); initRes
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -92,10 +99,10 @@ $(document).ready(function(){initNavTree('decode__database_8h.html',''); initRes

Created: 2026-03-13 Author: Deeaitch (Dim. Himro) More...

-
#include <string>
-#include <vector>
+
#include <cstdint>
+#include <string>
#include <unordered_map>
-#include <cstdint>
+#include <vector>

Go to the source code of this file.

@@ -119,25 +126,25 @@ Classes
- -

Enumerations

enum class  ByteOrder { Intel +
enum class  ByteOrder { Intel , Motorola }
 Signal byte order used for runtime decoding. More...
 
enum class  ValueType { Unsigned +
enum class  ValueType { Unsigned , Signed }
 Signal numeric type. More...
 

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file decode_database.h.

Enumeration Type Documentation

-

◆ ByteOrder

+

◆ ByteOrder

@@ -163,7 +170,7 @@ Enumerations
-

◆ ValueType

+

◆ ValueType

@@ -194,7 +201,7 @@ Enumerations diff --git a/docs/html/decode__database_8h_source.html b/docs/html/decode__database_8h_source.html index be86652..d3094a2 100644 --- a/docs/html/decode__database_8h_source.html +++ b/docs/html/decode__database_8h_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: decode_database.h Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/dir_59425e443f801f1f2fd8bbe4959a3ccf.html b/docs/html/dir_59425e443f801f1f2fd8bbe4959a3ccf.html new file mode 100644 index 0000000..c2f6989 --- /dev/null +++ b/docs/html/dir_59425e443f801f1f2fd8bbe4959a3ccf.html @@ -0,0 +1,114 @@ + + + + + + + +DBC Framework: tests Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
DBC Framework +
+
DBC parsing and CAN signal decoding framework
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
tests Directory Reference
+
+
+ + + + + + +

+Files

 dbc_decoder_test.cpp
 
 dbc_parser_test.cpp
 
+
+
+ + + + diff --git a/docs/html/dir_59425e443f801f1f2fd8bbe4959a3ccf.js b/docs/html/dir_59425e443f801f1f2fd8bbe4959a3ccf.js new file mode 100644 index 0000000..0a82aef --- /dev/null +++ b/docs/html/dir_59425e443f801f1f2fd8bbe4959a3ccf.js @@ -0,0 +1,5 @@ +var dir_59425e443f801f1f2fd8bbe4959a3ccf = +[ + [ "dbc_decoder_test.cpp", "dbc__decoder__test_8cpp_source.html", null ], + [ "dbc_parser_test.cpp", "dbc__parser__test_8cpp_source.html", null ] +]; \ No newline at end of file diff --git a/docs/html/doc.svg b/docs/html/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/docd.svg b/docs/html/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css index 2010785..009a9b5 100644 --- a/docs/html/doxygen.css +++ b/docs/html/doxygen.css @@ -1,29 +1,378 @@ -/* The standard CSS for doxygen 1.9.4 */ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; } -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; } /* @group Heading Levels */ -h1.groupheader { - font-size: 150%; -} - .title { - font: 400 14px/28px Roboto,sans-serif; + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; font-size: 150%; font-weight: bold; margin: 10px 2px; } +h1.groupheader { + font-size: 150%; +} + h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); font-size: 150%; font-weight: normal; margin-top: 1.75em; @@ -46,22 +395,13 @@ h1, h2, h3, h4, h5, h6 { } h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; + text-shadow: 0 0 15px var(--glow-color); } dt { font-weight: bold; } -ul.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; - column-count: 3; -} - p.startli, p.startdd { margin-top: 2px; } @@ -113,7 +453,6 @@ h3.version { } div.navtab { - border-right: 1px solid #A3B4D7; padding-right: 15px; text-align: right; line-height: 110%; @@ -127,16 +466,17 @@ td.navtab { padding-right: 6px; padding-left: 6px; } + td.navtabHL { - background-image: url('tab_a.png'); + background-image: var(--nav-gradient-active-image); background-repeat:repeat-x; padding-right: 6px; padding-left: 6px; } td.navtabHL a, td.navtabHL a:visited { - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); } a.navtab { @@ -148,7 +488,13 @@ div.qindex{ width: 100%; line-height: 140%; font-size: 130%; - color: #A0A0A0; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; } dt.alphachar{ @@ -157,7 +503,7 @@ dt.alphachar{ } .alphachar a{ - color: black; + color: var(--index-header-color); } .alphachar a:hover, .alphachar a:visited{ @@ -176,8 +522,12 @@ dt.alphachar{ line-height: 1.15em; } +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + .classindex dl.odd { - background-color: #F8F9FC; + background-color: var(--index-odd-item-bg-color); } @media(min-width: 1120px) { @@ -196,23 +546,19 @@ dt.alphachar{ /* @group Link Styling */ a { - color: #3D578C; + color: var(--page-link-color); font-weight: normal; text-decoration: none; } .contents a:visited { - color: #4665A2; + color: var(--page-visited-link-color); } a:hover { text-decoration: underline; } -.contents a.qindexHL:visited { - color: #FFFFFF; -} - a.el { font-weight: bold; } @@ -221,11 +567,11 @@ a.elRef { } a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; + color: var(--code-link-color); } a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; + color: var(--code-external-link-color); } a.code.hl_class { /* style for links to class names in code snippets */ } @@ -265,6 +611,16 @@ ul { overflow: visible; } +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + #side-nav ul { overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ } @@ -281,30 +637,32 @@ ul { } pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; word-wrap: break-word; font-size: 9pt; line-height: 125%; - font-family: monospace, fixed; + font-family: var(--font-family-monospace); font-size: 105%; } div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); } div.line { - font-family: monospace, fixed; + font-family: var(--font-family-monospace); font-size: 13px; min-height: 13px; - line-height: 1.0; + line-height: 1.2; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ @@ -333,25 +691,40 @@ div.line:after { } div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); } +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} span.lineno { padding-right: 4px; margin-right: 9px; text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); white-space: pre; } -span.lineno a { - background-color: #D8D8D8; +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); } span.lineno a:hover { - background-color: #C8C8C8; + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); } .lineno { @@ -363,24 +736,6 @@ span.lineno a:hover { user-select: none; } -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #FFFFFF; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - div.classindex ul { list-style: none; padding-left: 0; @@ -402,8 +757,7 @@ div.groupText { } body { - background-color: white; - color: black; + color: var(--page-foreground-color); margin: 0; } @@ -413,31 +767,17 @@ div.contents { margin-right: 8px; } -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - p.formulaDsp { text-align: center; } +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + img.formulaDsp { } @@ -465,10 +805,11 @@ address.footer { img.footer { border: 0px; vertical-align: middle; + width: var(--footer-logo-width); } .compoundTemplParams { - color: #4665A2; + color: var(--memdecl-template-color); font-size: 80%; line-height: 120%; } @@ -476,84 +817,62 @@ img.footer { /* @group Code Colorization */ span.keyword { - color: #008000 + color: var(--code-keyword-color); } span.keywordtype { - color: #604020 + color: var(--code-type-keyword-color); } span.keywordflow { - color: #e08000 + color: var(--code-flow-keyword-color); } span.comment { - color: #800000 + color: var(--code-comment-color); } span.preprocessor { - color: #806020 + color: var(--code-preprocessor-color); } span.stringliteral { - color: #002080 + color: var(--code-string-literal-color); } span.charliteral { - color: #008080 + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); } span.vhdldigit { - color: #ff00ff + color: var(--code-vhdl-digit-color); } span.vhdlchar { - color: #000000 + color: var(--code-vhdl-char-color); } span.vhdlkeyword { - color: #700070 + color: var(--code-vhdl-keyword-color); } span.vhdllogic { - color: #ff0000 + color: var(--code-vhdl-logic-color); } blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); margin: 0 24px 0 4px; padding: 0 12px 0 16px; } -blockquote.DocNodeRTL { - border-left: 0; - border-right: 2px solid #9CAFD4; - margin: 0 4px 0 24px; - padding: 0 16px 0 12px; -} - /* @end */ -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - td.tiny { font-size: 75%; } @@ -561,18 +880,19 @@ td.tiny { .dirtab { padding: 4px; border-collapse: collapse; - border: 1px solid #A3B4D7; + border: 1px solid var(--table-cell-border-color); } th.dirtab { - background: #EBEFF6; + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); font-weight: bold; } hr { height: 0px; border: none; - border-top: 1px solid #4A6AAA; + border-top: 1px solid var(--separator-color); } hr.footer { @@ -600,14 +920,14 @@ table.memberdecls { } .memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); } .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; + background-color: var(--memdecl-background-color); border: none; margin: 4px; padding: 1px 0 0 8px; @@ -615,11 +935,11 @@ table.memberdecls { .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; - color: #555; + color: var(--memdecl-foreground-color); } .memSeparator { - border-bottom: 1px solid #DEE4F0; + border-bottom: 1px solid var(--memdecl-separator-color); line-height: 1px; margin: 0px; padding: 0px; @@ -634,7 +954,7 @@ table.memberdecls { } .memTemplParams { - color: #4665A2; + color: var(--memdecl-template-color); white-space: nowrap; font-size: 80%; } @@ -647,15 +967,15 @@ table.memberdecls { .memtitle { padding: 8px; - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); border-top-right-radius: 4px; border-top-left-radius: 4px; margin-bottom: -1px; - background-image: url('nav_f.png'); + background-image: var(--memdef-title-gradient-image); background-repeat: repeat-x; - background-color: #E2E8F2; + background-color: var(--memdef-title-background-color); line-height: 1.25; font-weight: 300; float:left; @@ -670,20 +990,11 @@ table.memberdecls { .memtemplate { font-size: 80%; - color: #4665A2; + color: var(--memdef-template-color); font-weight: normal; margin-left: 9px; } -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - .mempage { width: 100%; } @@ -702,7 +1013,7 @@ table.memberdecls { } .memitem.glow { - box-shadow: 0 0 15px cyan; + box-shadow: 0 0 15px var(--glow-color); } .memname { @@ -715,41 +1026,32 @@ table.memberdecls { } .memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); padding: 6px 0px 6px 0px; - color: #253555; + color: var(--memdef-proto-text-color); font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #DFE5F1; - /* opera specific markup */ + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - } .overload { - font-family: "courier new",courier,monospace; + font-family: var(--font-family-monospace); font-size: 65%; } .memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); padding: 6px 10px 2px 10px; - background-color: #FBFCFD; border-top-width: 0; background-image:url('nav_g.png'); background-repeat:repeat-x; - background-color: #FFFFFF; + background-color: var(--memdef-doc-background-color); /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; @@ -782,7 +1084,7 @@ dl.reflist dd { } .paramname { - color: #602020; + color: var(--memdef-param-name-color); white-space: nowrap; } .paramname em { @@ -795,20 +1097,20 @@ dl.reflist dd { .params, .retval, .exception, .tparams { margin-left: 0px; padding-left: 0px; -} +} .params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { font-weight: bold; vertical-align: top; } - + .params .paramtype, .tparams .paramtype { font-style: italic; vertical-align: top; -} - +} + .params .paramdir, .tparams .paramdir { - font-family: "courier new",courier,monospace; + font-family: var(--font-family-monospace); vertical-align: top; } @@ -832,13 +1134,13 @@ span.mlabels { } span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); text-shadow: none; - color: white; + color: var(--label-foreground-color); margin-right: 4px; padding: 2px 3px; border-radius: 3px; @@ -855,8 +1157,8 @@ span.mlabel { div.directory { margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); width: 100%; } @@ -892,9 +1194,14 @@ div.directory { border-left: 1px solid rgba(0,0,0,0.05); } +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + .directory tr.even { padding-left: 6px; - background-color: #F7F8FB; + background-color: var(--index-even-item-bg-color); } .directory img { @@ -912,11 +1219,11 @@ div.directory { cursor: pointer; padding-left: 2px; padding-right: 2px; - color: #3D578C; + color: var(--page-link-color); } .arrow { - color: #9CAFD4; + color: var(--nav-arrow-color); -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; @@ -930,14 +1237,15 @@ div.directory { } .icon { - font-family: Arial, Helvetica; + font-family: var(--font-family-icon); + line-height: normal; font-weight: bold; font-size: 12px; height: 14px; width: 16px; display: inline-block; - background-color: #728DC1; - color: white; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); text-align: center; border-radius: 4px; margin-left: 2px; @@ -954,8 +1262,7 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; + background-image:var(--icon-folder-open-image); background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -965,8 +1272,7 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; + background-image:var(--icon-folder-closed-image); background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -976,17 +1282,13 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('doc.png'); + background-image:var(--icon-doc-image); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } -table.directory { - font: 400 14px Roboto,sans-serif; -} - /* @end */ div.dynheader { @@ -1001,7 +1303,7 @@ div.dynheader { address { font-style: normal; - color: #2A3D61; + color: var(--footer-foreground-color); } table.doxtable caption { @@ -1015,28 +1317,23 @@ table.doxtable { } table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; + border: 1px solid var(--table-cell-border-color); padding: 3px 7px 2px; } table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); font-size: 110%; padding-bottom: 4px; padding-top: 5px; } table.fieldtable { - /*width: 100%;*/ margin-bottom: 10px; - border: 1px solid #A8B8D9; + border: 1px solid var(--memdef-border-color); border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } @@ -1046,8 +1343,8 @@ table.fieldtable { .fieldtable td.fieldtype, .fieldtable td.fieldname { white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); vertical-align: top; } @@ -1056,14 +1353,13 @@ table.fieldtable { } .fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ + border-bottom: 1px solid var(--memdef-border-color); } .fieldtable td.fielddoc p:first-child { margin-top: 0px; -} - +} + .fieldtable td.fielddoc p:last-child { margin-bottom: 2px; } @@ -1073,22 +1369,18 @@ table.fieldtable { } .fieldtable th { - background-image:url('nav_f.png'); + background-image: var(--memdef-title-gradient-image); background-repeat:repeat-x; - background-color: #E2E8F2; + background-color: var(--memdef-title-background-color); font-size: 90%; - color: #253555; + color: var(--memdef-proto-text-color); padding-bottom: 4px; padding-top: 5px; text-align:left; font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; + border-bottom: 1px solid var(--memdef-border-color); } @@ -1096,7 +1388,7 @@ table.fieldtable { top: 0px; left: 10px; height: 36px; - background-image: url('tab_b.png'); + background-image: var(--nav-gradient-image); z-index: 101; overflow: hidden; font-size: 13px; @@ -1105,13 +1397,13 @@ table.fieldtable { .navpath ul { font-size: 11px; - background-image:url('tab_b.png'); + background-image: var(--nav-gradient-image); background-repeat:repeat-x; background-position: 0 -5px; height:30px; line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); overflow:hidden; margin:0px; padding:0px; @@ -1123,10 +1415,10 @@ table.fieldtable { float:left; padding-left:10px; padding-right:15px; - background-image:url('bc_s.png'); + background-image:var(--nav-breadcrumb-image); background-repeat:no-repeat; background-position:right; - color:#364D7C; + color: var(--nav-foreground-color); } .navpath li.navelem a @@ -1135,15 +1427,16 @@ table.fieldtable { display:block; text-decoration: none; outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; } .navpath li.navelem a:hover { - color:#6884BD; + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); } .navpath li.footer @@ -1155,7 +1448,7 @@ table.fieldtable { background-image:none; background-repeat:no-repeat; background-position:right; - color:#364D7C; + color: var(--footer-foreground-color); font-size: 8pt; } @@ -1167,7 +1460,7 @@ div.summary padding-right: 5px; width: 50%; text-align: right; -} +} div.summary a { @@ -1182,7 +1475,7 @@ table.classindex margin-right: 3%; width: 94%; border: 0; - border-spacing: 0; + border-spacing: 0; padding: 0; } @@ -1200,11 +1493,11 @@ div.ingroups a div.header { - background-image:url('nav_h.png'); + background-image: var(--header-gradient-image); background-repeat:repeat-x; - background-color: #F9FAFC; + background-color: var(--header-background-color); margin: 0px; - border-bottom: 1px solid #C4CFE5; + border-bottom: 1px solid var(--header-separator-color); } div.headertitle @@ -1227,11 +1520,6 @@ dl.section { padding-left: 0px; } -dl.section.DocNodeRTL { - margin-right: 0px; - padding-right: 0px; -} - dl.note { margin-left: -7px; padding-left: 3px; @@ -1239,16 +1527,6 @@ dl.note { border-color: #D0C000; } -dl.note.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #D0C000; -} - dl.warning, dl.attention { margin-left: -7px; padding-left: 3px; @@ -1256,16 +1534,6 @@ dl.warning, dl.attention { border-color: #FF0000; } -dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #FF0000; -} - dl.pre, dl.post, dl.invariant { margin-left: -7px; padding-left: 3px; @@ -1273,16 +1541,6 @@ dl.pre, dl.post, dl.invariant { border-color: #00D000; } -dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00D000; -} - dl.deprecated { margin-left: -7px; padding-left: 3px; @@ -1290,16 +1548,6 @@ dl.deprecated { border-color: #505050; } -dl.deprecated.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #505050; -} - dl.todo { margin-left: -7px; padding-left: 3px; @@ -1307,16 +1555,6 @@ dl.todo { border-color: #00C0E0; } -dl.todo.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00C0E0; -} - dl.test { margin-left: -7px; padding-left: 3px; @@ -1324,16 +1562,6 @@ dl.test { border-color: #3030E0; } -dl.test.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #3030E0; -} - dl.bug { margin-left: -7px; padding-left: 3px; @@ -1341,16 +1569,6 @@ dl.bug { border-color: #C08050; } -dl.bug.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #C08050; -} - dl.section dd { margin-bottom: 6px; } @@ -1381,21 +1599,24 @@ dl.section dd { #projectname { - font: 200% Tahoma, Arial,sans-serif; + font-size: 200%; + font-family: var(--font-family-title); margin: 0px; padding: 2px 0px; } - + #projectbrief { - font: 90% Tahoma, Arial,sans-serif; + font-size: 90%; + font-family: var(--font-family-title); margin: 0px; padding: 0px; } #projectnumber { - font: 50% Tahoma, Arial,sans-serif; + font-size: 50%; + font-family: 50% var(--font-family-title); margin: 0px; padding: 0px; } @@ -1405,7 +1626,8 @@ dl.section dd { padding: 0px; margin: 0px; width: 100%; - border-bottom: 1px solid #5373B4; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); } .image @@ -1438,17 +1660,12 @@ dl.section dd { font-weight: bold; } -div.zoom -{ - border: 1px solid #90A5CE; -} - dl.citelist { margin-bottom:50px; } dl.citelist dt { - color:#334975; + color:var(--citation-label-color); float:left; font-weight:bold; margin-right:10px; @@ -1464,8 +1681,8 @@ dl.citelist dd { div.toc { padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); border-radius: 7px 7px 7px 7px; float: right; height: auto; @@ -1473,28 +1690,17 @@ div.toc { width: 200px; } -.PageDocRTL-title div.toc { - float: left !important; - text-align: right; -} - div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); margin-top: 5px; padding-left: 10px; padding-top: 2px; } -.PageDocRTL-title div.toc li { - background-position-x: right !important; - padding-left: 0 !important; - padding-right: 10px; -} - div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); border-bottom: 0 none; margin: 0; } @@ -1503,7 +1709,7 @@ div.toc ul { list-style: none outside none; border: medium none; padding: 0px; -} +} div.toc li.level1 { margin-left: 0px; @@ -1514,11 +1720,11 @@ div.toc li.level2 { } div.toc li.level3 { - margin-left: 30px; + margin-left: 15px; } div.toc li.level4 { - margin-left: 45px; + margin-left: 15px; } span.emoji { @@ -1531,29 +1737,9 @@ span.obfuscator { display: none; } -.PageDocRTL-title div.toc li.level1 { - margin-left: 0 !important; - margin-right: 0; -} - -.PageDocRTL-title div.toc li.level2 { - margin-left: 0 !important; - margin-right: 15px; -} - -.PageDocRTL-title div.toc li.level3 { - margin-left: 0 !important; - margin-right: 30px; -} - -.PageDocRTL-title div.toc li.level4 { - margin-left: 0 !important; - margin-right: 45px; -} - .inherit_header { font-weight: bold; - color: gray; + color: var(--inherit-header-color); cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; @@ -1586,10 +1772,11 @@ tr.heading h2 { #powerTip { cursor: default; /*white-space: nowrap;*/ - background-color: white; - border: 1px solid gray; + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; + box-shadow: var(--tooltip-shadow); display: none; font-size: smaller; max-width: 80%; @@ -1600,7 +1787,7 @@ tr.heading h2 { } #powerTip div.ttdoc { - color: grey; + color: var(--tooltip-doc-color); font-style: italic; } @@ -1608,18 +1795,24 @@ tr.heading h2 { font-weight: bold; } +#powerTip a { + color: var(--tooltip-link-color); +} + #powerTip div.ttname { font-weight: bold; } #powerTip div.ttdeci { - color: #006318; + color: var(--tooltip-declaration-color); } #powerTip div { margin: 0px; padding: 0px; - font: 12px/16px Roboto,sans-serif; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; } #powerTip:before, #powerTip:after { @@ -1664,12 +1857,12 @@ tr.heading h2 { } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; + border-top-color: var(--tooltip-background-color); border-width: 10px; margin: 0px -10px; } -#powerTip.n:before { - border-top-color: #808080; +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); border-width: 11px; margin: 0px -11px; } @@ -1692,13 +1885,13 @@ tr.heading h2 { } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; + border-bottom-color: var(--tooltip-background-color); border-width: 10px; margin: 0px -10px; } #powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; + border-bottom-color: var(--tooltip-border-color); border-width: 11px; margin: 0px -11px; } @@ -1719,13 +1912,13 @@ tr.heading h2 { left: 100%; } #powerTip.e:after { - border-left-color: #FFFFFF; + border-left-color: var(--tooltip-border-color); border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.e:before { - border-left-color: #808080; + border-left-color: var(--tooltip-border-color); border-width: 11px; top: 50%; margin-top: -11px; @@ -1735,13 +1928,13 @@ tr.heading h2 { right: 100%; } #powerTip.w:after { - border-right-color: #FFFFFF; + border-right-color: var(--tooltip-border-color); border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.w:before { - border-right-color: #808080; + border-right-color: var(--tooltip-border-color); border-width: 11px; top: 50%; margin-top: -11px; @@ -1775,7 +1968,7 @@ table.markdownTable { } table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; + border: 1px solid var(--table-cell-border-color); padding: 3px 7px 2px; } @@ -1783,8 +1976,8 @@ table.markdownTable tr { } th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); font-size: 110%; padding-bottom: 4px; padding-top: 5px; @@ -1802,36 +1995,9 @@ th.markdownTableHeadCenter, td.markdownTableBodyCenter { text-align: center } -.DocNodeRTL { - text-align: right; - direction: rtl; -} - -.DocNodeLTR { - text-align: left; - direction: ltr; -} - -table.DocNodeRTL { - width: auto; - margin-right: 0; - margin-left: auto; -} - -table.DocNodeLTR { - width: auto; - margin-right: auto; - margin-left: 0; -} - -code.JavaDocCode { - direction:ltr; -} - tt, code, kbd, samp { display: inline-block; - direction:ltr; } /* @end */ @@ -1839,3 +2005,41 @@ u { text-decoration: underline; } +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg index d42dad5..79a7635 100644 --- a/docs/html/doxygen.svg +++ b/docs/html/doxygen.svg @@ -1,4 +1,6 @@ + @@ -17,7 +19,7 @@ - + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js index 7906639..9b28156 100644 --- a/docs/html/dynsections.js +++ b/docs/html/dynsections.js @@ -47,6 +47,8 @@ function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); } function toggleLevel(level) @@ -118,6 +120,75 @@ function toggleInherit(id) $(img).attr('src',src.substring(0,src.length-10)+'open.png'); } } + +var opened=true; +// in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes +var plusImg = [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ]; +var minusImg = [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ]; + +// toggle all folding blocks +function codefold_toggle_all(relPath) { + if (opened) { + $('#fold_all').css('background-image',plusImg[relPath]); + $('div[id^=foldopen]').hide(); + $('div[id^=foldclosed]').show(); + } else { + $('#fold_all').css('background-image',minusImg[relPath]); + $('div[id^=foldopen]').show(); + $('div[id^=foldclosed]').hide(); + } + opened=!opened; +} + +// toggle single folding block +function codefold_toggle(id) { + $('#foldopen'+id).toggle(); + $('#foldclosed'+id).toggle(); +} +function init_codefold(relPath) { + $('span[class=lineno]').css( + {'padding-right':'4px', + 'margin-right':'2px', + 'display':'inline-block', + 'width':'54px', + 'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%' + }); + // add global toggle to first line + $('span[class=lineno]:first').append(''); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+'…'+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + /* @license-end */ $(document).ready(function() { $('.code,.codeRef').each(function() { diff --git a/docs/html/files.html b/docs/html/files.html index dbb765c..504e139 100644 --- a/docs/html/files.html +++ b/docs/html/files.html @@ -1,9 +1,9 @@ - + - + DBC Framework: File List @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); });
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -87,22 +94,28 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); });
Here is a list of all documented files with brief descriptions:
- - - - - - - - - - - - - - - - +
[detail level 12]
 dbc_database.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_decode_builder.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_decode_builder.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_decoder.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_decoder.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_parser.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_parser.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_tree_builder.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_tree_builder.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 decode_database.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 frame_info.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 main.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 signal_info.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 tree_node.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 tree_node.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
+ + + + + + + + + + + + + + + + + + + + +
 ▼ tests
 dbc_decoder_test.cpp
 dbc_parser_test.cpp
 dbc_database.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_decode_builder.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_decode_builder.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_decoder.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_decoder.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_parser.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_parser.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_statement_handler.cpp
 dbc_statement_handler.h
 dbc_tree_builder.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 dbc_tree_builder.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 decode_database.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 frame_info.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 main.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 signal_info.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 tree_node.cppCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 tree_node.hCreated: 2026-03-13 Author: Deeaitch (Dim. Himro)
 typefactory.h
@@ -110,7 +123,7 @@ $(document).ready(function(){initNavTree('files.html',''); initResizable(); }); diff --git a/docs/html/files_dup.js b/docs/html/files_dup.js index 8384f1b..928c939 100644 --- a/docs/html/files_dup.js +++ b/docs/html/files_dup.js @@ -1,5 +1,6 @@ var files_dup = [ + [ "tests", "dir_59425e443f801f1f2fd8bbe4959a3ccf.html", "dir_59425e443f801f1f2fd8bbe4959a3ccf" ], [ "dbc_database.h", "dbc__database_8h.html", "dbc__database_8h" ], [ "dbc_decode_builder.cpp", "dbc__decode__builder_8cpp.html", null ], [ "dbc_decode_builder.h", "dbc__decode__builder_8h.html", "dbc__decode__builder_8h" ], @@ -7,6 +8,8 @@ var files_dup = [ "dbc_decoder.h", "dbc__decoder_8h.html", "dbc__decoder_8h" ], [ "dbc_parser.cpp", "dbc__parser_8cpp.html", null ], [ "dbc_parser.h", "dbc__parser_8h.html", "dbc__parser_8h" ], + [ "dbc_statement_handler.cpp", "dbc__statement__handler_8cpp_source.html", null ], + [ "dbc_statement_handler.h", "dbc__statement__handler_8h_source.html", null ], [ "dbc_tree_builder.cpp", "dbc__tree__builder_8cpp.html", null ], [ "dbc_tree_builder.h", "dbc__tree__builder_8h.html", "dbc__tree__builder_8h" ], [ "decode_database.h", "decode__database_8h.html", "decode__database_8h" ], @@ -14,5 +17,6 @@ var files_dup = [ "main.cpp", "main_8cpp.html", null ], [ "signal_info.h", "signal__info_8h.html", "signal__info_8h" ], [ "tree_node.cpp", "tree__node_8cpp.html", null ], - [ "tree_node.h", "tree__node_8h.html", "tree__node_8h" ] + [ "tree_node.h", "tree__node_8h.html", "tree__node_8h" ], + [ "typefactory.h", "typefactory_8h_source.html", null ] ]; \ No newline at end of file diff --git a/docs/html/folderclosed.svg b/docs/html/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderclosedd.svg b/docs/html/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderopen.svg b/docs/html/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/html/folderopend.svg b/docs/html/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/frame__info_8h.html b/docs/html/frame__info_8h.html index 2151798..c84f4ba 100644 --- a/docs/html/frame__info_8h.html +++ b/docs/html/frame__info_8h.html @@ -1,9 +1,9 @@ - + - + DBC Framework: frame_info.h File Reference @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('frame__info_8h.html',''); initResizabl
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -91,9 +98,9 @@ $(document).ready(function(){initNavTree('frame__info_8h.html',''); initResizabl

Created: 2026-03-13 Author: Deeaitch (Dim. Himro) More...

-
#include <string>
+
#include <cstdint>
+#include <string>
#include <vector>
-#include <cstdint>
#include "signal_info.h"

Go to the source code of this file.

@@ -105,8 +112,8 @@ Classes  

Detailed Description

-

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

-

Licensed under the MIT License. See LICENSE file in the project root for full license text.

+

Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

+

Licensed under the MIT License. See LICENSE file in the project root for full license text.

Definition in file frame_info.h.

@@ -115,7 +122,7 @@ Classes diff --git a/docs/html/frame__info_8h_source.html b/docs/html/frame__info_8h_source.html index e8982ea..ed37189 100644 --- a/docs/html/frame__info_8h_source.html +++ b/docs/html/frame__info_8h_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: frame_info.h Source File @@ -34,10 +34,10 @@
- + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
diff --git a/docs/html/functions.html b/docs/html/functions.html index df238d0..94d8152 100644 --- a/docs/html/functions.html +++ b/docs/html/functions.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Class Members @@ -34,10 +34,10 @@
- + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -99,6 +106,9 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();

- c -

@@ -106,6 +116,7 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();
  • data : RawCanFrame
  • Decode() : DbcDecoder
  • definition : DecodedFrameValue, DecodedSignalValue
  • +
  • Dispatch() : DbcStatementDispatcher
  • dlc : DecodeFrame, FrameInfo
  • @@ -169,8 +180,9 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable();

    - r -

    @@ -199,7 +211,7 @@ $(document).ready(function(){initNavTree('functions.html',''); initResizable(); diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html index 4a37e4b..4b43cc0 100644 --- a/docs/html/functions_func.html +++ b/docs/html/functions_func.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Class Members - Functions @@ -34,10 +34,10 @@
    - + @@ -77,16 +77,27 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    - 
    @@ -102,7 +114,7 @@ $(document).ready(function(){initNavTree('functions_func.html',''); initResizabl diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html index 7d44d94..9b0dffc 100644 --- a/docs/html/functions_vars.html +++ b/docs/html/functions_vars.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Class Members - Variables @@ -34,10 +34,10 @@ - + @@ -77,13 +77,20 @@ $(document).ready(function(){initNavTree('functions_vars.html',''); initResizabl
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -  +
    Here is a list of all documented variables with links to the class documentation for each member:

    - b -

    • byteOrder : DecodeSignal
    • @@ -150,7 +157,7 @@ $(document).ready(function(){initNavTree('functions_vars.html',''); initResizabl

      - r -

      @@ -179,7 +186,7 @@ $(document).ready(function(){initNavTree('functions_vars.html',''); initResizabl diff --git a/docs/html/globals.html b/docs/html/globals.html index 594e5b3..cc2431b 100644 --- a/docs/html/globals.html +++ b/docs/html/globals.html @@ -1,9 +1,9 @@ - + - + DBC Framework: File Members @@ -34,10 +34,10 @@
    - + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('globals.html',''); initResizable(); })
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    @@ -93,7 +100,7 @@ $(document).ready(function(){initNavTree('globals.html',''); initResizable(); }) diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html index 4b7186e..fa9a3ec 100644 --- a/docs/html/globals_enum.html +++ b/docs/html/globals_enum.html @@ -1,9 +1,9 @@ - + - + DBC Framework: File Members @@ -34,10 +34,10 @@
    - + @@ -77,13 +77,20 @@ $(document).ready(function(){initNavTree('globals_enum.html',''); initResizable(
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    - 
      +
      Here is a list of all documented enums with links to the documentation:
      • ByteOrder : decode_database.h
      • NodeType : tree_node.h
      • ValueType : decode_database.h
      • @@ -93,7 +100,7 @@ $(document).ready(function(){initNavTree('globals_enum.html',''); initResizable( diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html index b160e8c..0b48350 100644 --- a/docs/html/graph_legend.html +++ b/docs/html/graph_legend.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Graph Legend @@ -34,10 +34,10 @@
    - + @@ -77,17 +77,24 @@ $(document).ready(function(){initNavTree('graph_legend.html',''); initResizable(
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Graph Legend
    -

    This page explains how to interpret the graphs that are generated by doxygen.

    -

    Consider the following example:

    /*! Invisible class because of truncation */
    +

    This page explains how to interpret the graphs that are generated by doxygen.

    +

    Consider the following example:

    /*! Invisible class because of truncation */
    class Invisible { };
    /*! Truncated class, inheritance relation is hidden */
    @@ -122,7 +129,7 @@ $(document).ready(function(){initNavTree('graph_legend.html',''); initResizable(
    Used *m_usedClass;
    };

    This will result in the following graph:

    -

    The boxes in the above graph have the following meaning:

    +

    The boxes in the above graph have the following meaning:

    • A filled gray box represents the struct or class for which the graph is generated.
    • @@ -133,10 +140,10 @@ A box with a gray border denotes an undocumented struct or class.
    • A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
    -

    The arrows have the following meaning:

    +

    The arrows have the following meaning:

    • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
    • +A blue arrow is used to visualize a public inheritance relation between two classes.
    • A dark green arrow is used for protected inheritance.
    • @@ -151,7 +158,7 @@ A yellow dashed arrow denotes a relation between a template instance and the tem diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5 index 5543aee..34a71d6 100644 --- a/docs/html/graph_legend.md5 +++ b/docs/html/graph_legend.md5 @@ -1 +1 @@ -2949d8d683b49299ad5e82dbf5d1be6c \ No newline at end of file +238bc3d95adc1929b3259d0c39010ed6 \ No newline at end of file diff --git a/docs/html/graph_legend.svg b/docs/html/graph_legend.svg index 5c7a71a..aa70e40 100644 --- a/docs/html/graph_legend.svg +++ b/docs/html/graph_legend.svg @@ -1,117 +1,167 @@ - Graph Legend - - + Node9 - + + Inherited + + - + Node10 - + + PublicBase + + Node10->Node9 - - + + + + + - + Node11 - + + Truncated + + Node11->Node10 - - + + + + + Node13 - + + ProtectedBase + + Node13->Node9 + + + Node14 - + + PrivateBase + + Node14->Node9 + + + - + Node15 - + + Undocumented + + Node15->Node9 - - + + + + + Node16 - + + Templ< int > + + Node16->Node9 - - + + + + + Node17 - + + Templ< T > + + Node17->Node16 + -< int > + + +< int > Node18 - + + Used + + Node18->Node9 + -m_usedClass + + +m_usedClass diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html new file mode 100644 index 0000000..fe782d1 --- /dev/null +++ b/docs/html/hierarchy.html @@ -0,0 +1,135 @@ + + + + + + + +DBC Framework: Class Hierarchy + + + + + + + + + + + + + +
      +
      + + + + + + +
      +
      DBC Framework +
      +
      DBC parsing and CAN signal decoding framework
      +
      +
      + + + + + + + +
      +
      + +
      +
      +
      + +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      Loading...
      +
      Searching...
      +
      No Matches
      +
      +
      +
      +
      + +
      +
      Class Hierarchy
      +
      +
      +
      +

      Go to the graphical class hierarchy

      +This inheritance list is sorted roughly, but not completely, alphabetically:
      +
      [detail level 12]
      + + + + + + + + + + + + + + + + + + + + + + + + +
       CDbcDatabaseParsed DBC content stored in a simple internal form
       CDbcDecodeBuilderConverts parsed DBC data into runtime decode database
       CDbcDecoderRuntime CAN decoder using prebuilt decode database
       CDbcParseContext
       CDbcParserMinimal DBC parser
       CDbcStatementDispatcher
       ▼CDbcStatementHandler
       CDbcCommentHandler
       CDbcFrameHandler
       CDbcSignalHandler
       CDbcTreeBuilderBuilds a simple tree from parsed DBC database
       CDecodeDatabaseRuntime decode database with fast lookup by CAN ID
       CDecodedFrameValueFully decoded frame
       CDecodedSignalValueOne decoded signal value
       CDecodeFrameRuntime-ready frame definition
       CDecodeSignalRuntime-ready signal definition
       CFrameInfoDescribes one CAN frame from a DBC file
       CFrameKeyKey for fast frame lookup
       CFrameKeyHasherHasher for frame key
       CRawCanFrameRaw CAN frame used for runtime or trace decoding
       CSignalInfoDescribes one signal inside a DBC frame
       CTreeNodeTree node for later use in model/view or other hierarchy consumers
       CTypeFactory< ClassId, BaseClass, Args >Registry-based factory for creating objects by runtime identifier
       CTypeFactory< std::string, DbcStatementHandler >
      +
      +
      +
      + + + + diff --git a/docs/html/hierarchy.js b/docs/html/hierarchy.js new file mode 100644 index 0000000..bac4f4a --- /dev/null +++ b/docs/html/hierarchy.js @@ -0,0 +1,28 @@ +var hierarchy = +[ + [ "DbcDatabase", "structDbcDatabase.html", null ], + [ "DbcDecodeBuilder", "classDbcDecodeBuilder.html", null ], + [ "DbcDecoder", "classDbcDecoder.html", null ], + [ "DbcParseContext", "structDbcParseContext.html", null ], + [ "DbcParser", "classDbcParser.html", null ], + [ "DbcStatementDispatcher", "classDbcStatementDispatcher.html", null ], + [ "DbcStatementHandler", "classDbcStatementHandler.html", [ + [ "DbcCommentHandler", "classDbcCommentHandler.html", null ], + [ "DbcFrameHandler", "classDbcFrameHandler.html", null ], + [ "DbcSignalHandler", "classDbcSignalHandler.html", null ] + ] ], + [ "DbcTreeBuilder", "classDbcTreeBuilder.html", null ], + [ "DecodeDatabase", "structDecodeDatabase.html", null ], + [ "DecodedFrameValue", "structDecodedFrameValue.html", null ], + [ "DecodedSignalValue", "structDecodedSignalValue.html", null ], + [ "DecodeFrame", "structDecodeFrame.html", null ], + [ "DecodeSignal", "structDecodeSignal.html", null ], + [ "FrameInfo", "structFrameInfo.html", null ], + [ "FrameKey", "structFrameKey.html", null ], + [ "FrameKeyHasher", "structFrameKeyHasher.html", null ], + [ "RawCanFrame", "structRawCanFrame.html", null ], + [ "SignalInfo", "structSignalInfo.html", null ], + [ "TreeNode", "classTreeNode.html", null ], + [ "TypeFactory< ClassId, BaseClass, Args >", "classTypeFactory.html", null ], + [ "TypeFactory< std::string, DbcStatementHandler >", "classTypeFactory.html", null ] +]; \ No newline at end of file diff --git a/docs/html/index.html b/docs/html/index.html index 6500132..1d8bf7d 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -1,9 +1,9 @@ - + - + DBC Framework: Main Page @@ -34,10 +34,10 @@
    - + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('index.html',''); initResizable(); });
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    @@ -91,7 +98,7 @@ $(document).ready(function(){initNavTree('index.html',''); initResizable(); }); diff --git a/docs/html/index.qhp b/docs/html/index.qhp index 8e11983..ca94588 100644 --- a/docs/html/index.qhp +++ b/docs/html/index.qhp @@ -43,45 +43,57 @@
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    +
    +
    -
    -
    -
    -
    -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    +
    -
    -
    -
    -
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    @@ -92,9 +104,20 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    @@ -107,7 +130,7 @@
    -
    +
    @@ -183,8 +206,41 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    @@ -193,6 +249,10 @@
    +
    +
    +
    +
    @@ -213,7 +273,7 @@
    -
    +
    @@ -233,6 +293,8 @@
    +
    +
    @@ -332,6 +394,7 @@
    +
    @@ -341,10 +404,16 @@
    + + + + + + @@ -357,7 +426,10 @@ + + + @@ -369,10 +441,17 @@ + + + + + + + @@ -412,9 +491,11 @@ - + + + @@ -441,17 +522,34 @@ annotated.html bc_s.png -bdwn.png +bc_sd.png +classDbcCommentHandler-members.html +classDbcCommentHandler.html +classDbcCommentHandler__inherit__graph.svg classDbcDecodeBuilder-members.html classDbcDecodeBuilder.html classDbcDecoder-members.html classDbcDecoder.html +classDbcFrameHandler-members.html +classDbcFrameHandler.html +classDbcFrameHandler__inherit__graph.svg classDbcParser-members.html classDbcParser.html +classDbcSignalHandler-members.html +classDbcSignalHandler.html +classDbcSignalHandler__inherit__graph.svg +classDbcStatementDispatcher-members.html +classDbcStatementDispatcher.html +classDbcStatementHandler-members.html +classDbcStatementHandler.html +classDbcStatementHandler__inherit__graph.svg classDbcTreeBuilder-members.html classDbcTreeBuilder.html classTreeNode-members.html classTreeNode.html +classTypeFactory-members.html +classTypeFactory.html +classTypeFactory__inherit__graph.svg classes.html closed.png dbc__database_8h.html @@ -464,23 +562,25 @@ dbc__decoder_8cpp_source.html dbc__decoder_8h.html dbc__decoder_8h_source.html +dbc__decoder__test_8cpp_source.html dbc__parser_8cpp.html dbc__parser_8cpp_source.html dbc__parser_8h.html dbc__parser_8h_source.html +dbc__parser__test_8cpp_source.html +dbc__statement__handler_8cpp_source.html +dbc__statement__handler_8h_source.html dbc__tree__builder_8cpp.html dbc__tree__builder_8cpp_source.html dbc__tree__builder_8h.html dbc__tree__builder_8h_source.html decode__database_8h.html decode__database_8h_source.html -doc.png +dir_59425e443f801f1f2fd8bbe4959a3ccf.html doxygen.css doxygen.svg dynsections.js files.html -folderclosed.png -folderopen.png frame__info_8h.html frame__info_8h_source.html functions.html @@ -490,30 +590,128 @@ globals_enum.html graph_legend.html graph_legend.svg +hierarchy.html index.html +inherit_graph_0.svg +inherit_graph_1.svg +inherit_graph_10.svg +inherit_graph_11.svg +inherit_graph_12.svg +inherit_graph_13.svg +inherit_graph_14.svg +inherit_graph_15.svg +inherit_graph_16.svg +inherit_graph_17.svg +inherit_graph_18.svg +inherit_graph_19.svg +inherit_graph_2.svg +inherit_graph_20.svg +inherit_graph_3.svg +inherit_graph_4.svg +inherit_graph_5.svg +inherit_graph_6.svg +inherit_graph_7.svg +inherit_graph_8.svg +inherit_graph_9.svg +inherits.html jquery.js main_8cpp.html main_8cpp_source.html md_README.html +md_tests_2README.html menu.js menudata.js nav_f.png +nav_fd.png nav_g.png nav_h.png +nav_hd.png open.png pages.html +search/all_0.js +search/all_1.js +search/all_10.js +search/all_11.js +search/all_12.js +search/all_13.js +search/all_14.js +search/all_15.js +search/all_16.js +search/all_17.js +search/all_2.js +search/all_3.js +search/all_4.js +search/all_5.js +search/all_6.js +search/all_7.js +search/all_8.js +search/all_9.js +search/all_a.js +search/all_b.js +search/all_c.js +search/all_d.js +search/all_e.js +search/all_f.js +search/classes_0.js +search/classes_1.js +search/classes_2.js +search/classes_3.js +search/classes_4.js search/close.svg +search/enums_0.js +search/enums_1.js +search/enums_2.js +search/files_0.js +search/files_1.js +search/files_2.js +search/files_3.js +search/files_4.js +search/functions_0.js +search/functions_1.js +search/functions_2.js +search/functions_3.js +search/functions_4.js +search/functions_5.js +search/functions_6.js +search/functions_7.js +search/functions_8.js +search/mag.svg +search/mag_d.svg search/mag_sel.svg +search/mag_seld.svg +search/pages_0.js +search/pages_1.js +search/pages_2.js +search/pages_3.js +search/pages_4.js +search/pages_5.js search/search.css search/search.js -search/search_l.png -search/search_m.png -search/search_r.png +search/searchdata.js +search/variables_0.js +search/variables_1.js +search/variables_2.js +search/variables_3.js +search/variables_4.js +search/variables_5.js +search/variables_6.js +search/variables_7.js +search/variables_8.js +search/variables_9.js +search/variables_a.js +search/variables_b.js +search/variables_c.js +search/variables_d.js +search/variables_e.js +search/variables_f.js signal__info_8h.html signal__info_8h_source.html splitbar.png +splitbard.png structDbcDatabase-members.html structDbcDatabase.html +structDbcParseContext-members.html +structDbcParseContext.html structDecodeDatabase-members.html structDecodeDatabase.html structDecodeFrame-members.html @@ -534,18 +732,23 @@ structRawCanFrame.html structSignalInfo-members.html structSignalInfo.html -svgpan.js +svg.min.js sync_off.png sync_on.png tab_a.png +tab_ad.png tab_b.png +tab_bd.png tab_h.png +tab_hd.png tab_s.png +tab_sd.png tabs.css tree__node_8cpp.html tree__node_8cpp_source.html tree__node_8h.html tree__node_8h_source.html +typefactory_8h_source.html diff --git a/docs/html/inherit_graph_0.map b/docs/html/inherit_graph_0.map new file mode 100644 index 0000000..f58dca1 --- /dev/null +++ b/docs/html/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_0.md5 b/docs/html/inherit_graph_0.md5 new file mode 100644 index 0000000..a9ceb1f --- /dev/null +++ b/docs/html/inherit_graph_0.md5 @@ -0,0 +1 @@ +5a23bb52193266f734c783753a86fc4c \ No newline at end of file diff --git a/docs/html/inherit_graph_0.svg b/docs/html/inherit_graph_0.svg new file mode 100644 index 0000000..ba79d61 --- /dev/null +++ b/docs/html/inherit_graph_0.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DbcDatabase + + + + + diff --git a/docs/html/inherit_graph_1.map b/docs/html/inherit_graph_1.map new file mode 100644 index 0000000..f285d3c --- /dev/null +++ b/docs/html/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_1.md5 b/docs/html/inherit_graph_1.md5 new file mode 100644 index 0000000..6cb3465 --- /dev/null +++ b/docs/html/inherit_graph_1.md5 @@ -0,0 +1 @@ +7d795e7bc503adfea7e85901c61a030d \ No newline at end of file diff --git a/docs/html/inherit_graph_1.svg b/docs/html/inherit_graph_1.svg new file mode 100644 index 0000000..d2e224c --- /dev/null +++ b/docs/html/inherit_graph_1.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DbcDecodeBuilder + + + + + diff --git a/docs/html/inherit_graph_10.map b/docs/html/inherit_graph_10.map new file mode 100644 index 0000000..7c65891 --- /dev/null +++ b/docs/html/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_10.md5 b/docs/html/inherit_graph_10.md5 new file mode 100644 index 0000000..c9a02c7 --- /dev/null +++ b/docs/html/inherit_graph_10.md5 @@ -0,0 +1 @@ +b05671a6a0ebf993e1d536e18c8222f0 \ No newline at end of file diff --git a/docs/html/inherit_graph_10.svg b/docs/html/inherit_graph_10.svg new file mode 100644 index 0000000..ae6af8c --- /dev/null +++ b/docs/html/inherit_graph_10.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DecodedSignalValue + + + + + diff --git a/docs/html/inherit_graph_11.map b/docs/html/inherit_graph_11.map new file mode 100644 index 0000000..c05e6d1 --- /dev/null +++ b/docs/html/inherit_graph_11.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_11.md5 b/docs/html/inherit_graph_11.md5 new file mode 100644 index 0000000..3bb982e --- /dev/null +++ b/docs/html/inherit_graph_11.md5 @@ -0,0 +1 @@ +d60a3b51249015f2f62123f47f8f38c1 \ No newline at end of file diff --git a/docs/html/inherit_graph_11.svg b/docs/html/inherit_graph_11.svg new file mode 100644 index 0000000..4795e2c --- /dev/null +++ b/docs/html/inherit_graph_11.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DecodeFrame + + + + + diff --git a/docs/html/inherit_graph_12.map b/docs/html/inherit_graph_12.map new file mode 100644 index 0000000..3c6225b --- /dev/null +++ b/docs/html/inherit_graph_12.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_12.md5 b/docs/html/inherit_graph_12.md5 new file mode 100644 index 0000000..36d0d9e --- /dev/null +++ b/docs/html/inherit_graph_12.md5 @@ -0,0 +1 @@ +b82865126817889e464d1e7bbdc44e1d \ No newline at end of file diff --git a/docs/html/inherit_graph_12.svg b/docs/html/inherit_graph_12.svg new file mode 100644 index 0000000..cba2eae --- /dev/null +++ b/docs/html/inherit_graph_12.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DecodeSignal + + + + + diff --git a/docs/html/inherit_graph_13.map b/docs/html/inherit_graph_13.map new file mode 100644 index 0000000..e9866f7 --- /dev/null +++ b/docs/html/inherit_graph_13.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_13.md5 b/docs/html/inherit_graph_13.md5 new file mode 100644 index 0000000..32124be --- /dev/null +++ b/docs/html/inherit_graph_13.md5 @@ -0,0 +1 @@ +628e8fa4bf75287517a27c2bb42129ea \ No newline at end of file diff --git a/docs/html/inherit_graph_13.svg b/docs/html/inherit_graph_13.svg new file mode 100644 index 0000000..97171b9 --- /dev/null +++ b/docs/html/inherit_graph_13.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +FrameInfo + + + + + diff --git a/docs/html/inherit_graph_14.map b/docs/html/inherit_graph_14.map new file mode 100644 index 0000000..51fec7c --- /dev/null +++ b/docs/html/inherit_graph_14.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_14.md5 b/docs/html/inherit_graph_14.md5 new file mode 100644 index 0000000..26c0d3e --- /dev/null +++ b/docs/html/inherit_graph_14.md5 @@ -0,0 +1 @@ +ab35c84b554d480a0ee1155c1179d2db \ No newline at end of file diff --git a/docs/html/inherit_graph_14.svg b/docs/html/inherit_graph_14.svg new file mode 100644 index 0000000..23a807a --- /dev/null +++ b/docs/html/inherit_graph_14.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +FrameKey + + + + + diff --git a/docs/html/inherit_graph_15.map b/docs/html/inherit_graph_15.map new file mode 100644 index 0000000..4cf64cb --- /dev/null +++ b/docs/html/inherit_graph_15.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_15.md5 b/docs/html/inherit_graph_15.md5 new file mode 100644 index 0000000..0b133d4 --- /dev/null +++ b/docs/html/inherit_graph_15.md5 @@ -0,0 +1 @@ +03ff8d0fe772fd10da3721a519f78bc4 \ No newline at end of file diff --git a/docs/html/inherit_graph_15.svg b/docs/html/inherit_graph_15.svg new file mode 100644 index 0000000..afe2243 --- /dev/null +++ b/docs/html/inherit_graph_15.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +FrameKeyHasher + + + + + diff --git a/docs/html/inherit_graph_16.map b/docs/html/inherit_graph_16.map new file mode 100644 index 0000000..baccc4c --- /dev/null +++ b/docs/html/inherit_graph_16.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_16.md5 b/docs/html/inherit_graph_16.md5 new file mode 100644 index 0000000..8e49fd2 --- /dev/null +++ b/docs/html/inherit_graph_16.md5 @@ -0,0 +1 @@ +a0ca65c977c3eeaa49d3a753e2b425f7 \ No newline at end of file diff --git a/docs/html/inherit_graph_16.svg b/docs/html/inherit_graph_16.svg new file mode 100644 index 0000000..ac9b694 --- /dev/null +++ b/docs/html/inherit_graph_16.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +RawCanFrame + + + + + diff --git a/docs/html/inherit_graph_17.map b/docs/html/inherit_graph_17.map new file mode 100644 index 0000000..27221de --- /dev/null +++ b/docs/html/inherit_graph_17.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_17.md5 b/docs/html/inherit_graph_17.md5 new file mode 100644 index 0000000..c4410a4 --- /dev/null +++ b/docs/html/inherit_graph_17.md5 @@ -0,0 +1 @@ +f2e229631b6e08e3f933a80cf3a704df \ No newline at end of file diff --git a/docs/html/inherit_graph_17.svg b/docs/html/inherit_graph_17.svg new file mode 100644 index 0000000..7b67e3e --- /dev/null +++ b/docs/html/inherit_graph_17.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +SignalInfo + + + + + diff --git a/docs/html/inherit_graph_18.map b/docs/html/inherit_graph_18.map new file mode 100644 index 0000000..d2067d8 --- /dev/null +++ b/docs/html/inherit_graph_18.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_18.md5 b/docs/html/inherit_graph_18.md5 new file mode 100644 index 0000000..53a15e0 --- /dev/null +++ b/docs/html/inherit_graph_18.md5 @@ -0,0 +1 @@ +0e692ac66fcc5782f37efa2f3d64c466 \ No newline at end of file diff --git a/docs/html/inherit_graph_18.svg b/docs/html/inherit_graph_18.svg new file mode 100644 index 0000000..a741e27 --- /dev/null +++ b/docs/html/inherit_graph_18.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +TreeNode + + + + + diff --git a/docs/html/inherit_graph_19.map b/docs/html/inherit_graph_19.map new file mode 100644 index 0000000..cc8fd2d --- /dev/null +++ b/docs/html/inherit_graph_19.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_19.md5 b/docs/html/inherit_graph_19.md5 new file mode 100644 index 0000000..feef5c8 --- /dev/null +++ b/docs/html/inherit_graph_19.md5 @@ -0,0 +1 @@ +fd991ac56e8b35f6def7a3942058b044 \ No newline at end of file diff --git a/docs/html/inherit_graph_19.svg b/docs/html/inherit_graph_19.svg new file mode 100644 index 0000000..1e19eb8 --- /dev/null +++ b/docs/html/inherit_graph_19.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +TypeFactory< ClassId, + BaseClass, Args > + + + + + diff --git a/docs/html/inherit_graph_2.map b/docs/html/inherit_graph_2.map new file mode 100644 index 0000000..187a40e --- /dev/null +++ b/docs/html/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_2.md5 b/docs/html/inherit_graph_2.md5 new file mode 100644 index 0000000..12e14d4 --- /dev/null +++ b/docs/html/inherit_graph_2.md5 @@ -0,0 +1 @@ +bd2e795449505b56edb925aefd194571 \ No newline at end of file diff --git a/docs/html/inherit_graph_2.svg b/docs/html/inherit_graph_2.svg new file mode 100644 index 0000000..d8bc254 --- /dev/null +++ b/docs/html/inherit_graph_2.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DbcDecoder + + + + + diff --git a/docs/html/inherit_graph_20.map b/docs/html/inherit_graph_20.map new file mode 100644 index 0000000..f89295a --- /dev/null +++ b/docs/html/inherit_graph_20.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_20.md5 b/docs/html/inherit_graph_20.md5 new file mode 100644 index 0000000..0956862 --- /dev/null +++ b/docs/html/inherit_graph_20.md5 @@ -0,0 +1 @@ +2e92ed9cb6b5a27ab688cfd97eafecca \ No newline at end of file diff --git a/docs/html/inherit_graph_20.svg b/docs/html/inherit_graph_20.svg new file mode 100644 index 0000000..cb57a17 --- /dev/null +++ b/docs/html/inherit_graph_20.svg @@ -0,0 +1,22 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +TypeFactory< std::string, + DbcStatementHandler > + + + + + diff --git a/docs/html/inherit_graph_3.map b/docs/html/inherit_graph_3.map new file mode 100644 index 0000000..4590e15 --- /dev/null +++ b/docs/html/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_3.md5 b/docs/html/inherit_graph_3.md5 new file mode 100644 index 0000000..ffd6e48 --- /dev/null +++ b/docs/html/inherit_graph_3.md5 @@ -0,0 +1 @@ +2674130f4d66049ef34375ec57054882 \ No newline at end of file diff --git a/docs/html/inherit_graph_3.svg b/docs/html/inherit_graph_3.svg new file mode 100644 index 0000000..ad34d29 --- /dev/null +++ b/docs/html/inherit_graph_3.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DbcParseContext + + + + + diff --git a/docs/html/inherit_graph_4.map b/docs/html/inherit_graph_4.map new file mode 100644 index 0000000..1af950d --- /dev/null +++ b/docs/html/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_4.md5 b/docs/html/inherit_graph_4.md5 new file mode 100644 index 0000000..63d492a --- /dev/null +++ b/docs/html/inherit_graph_4.md5 @@ -0,0 +1 @@ +debfb9bdb327669e1f39bd750d473c06 \ No newline at end of file diff --git a/docs/html/inherit_graph_4.svg b/docs/html/inherit_graph_4.svg new file mode 100644 index 0000000..47e2173 --- /dev/null +++ b/docs/html/inherit_graph_4.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DbcParser + + + + + diff --git a/docs/html/inherit_graph_5.map b/docs/html/inherit_graph_5.map new file mode 100644 index 0000000..5fb9bd5 --- /dev/null +++ b/docs/html/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_5.md5 b/docs/html/inherit_graph_5.md5 new file mode 100644 index 0000000..89aeb1e --- /dev/null +++ b/docs/html/inherit_graph_5.md5 @@ -0,0 +1 @@ +e32f14f6883118a9bd63a5fa32e3e6db \ No newline at end of file diff --git a/docs/html/inherit_graph_5.svg b/docs/html/inherit_graph_5.svg new file mode 100644 index 0000000..ed39b7b --- /dev/null +++ b/docs/html/inherit_graph_5.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DbcStatementDispatcher + + + + + diff --git a/docs/html/inherit_graph_6.map b/docs/html/inherit_graph_6.map new file mode 100644 index 0000000..cadb748 --- /dev/null +++ b/docs/html/inherit_graph_6.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/inherit_graph_6.md5 b/docs/html/inherit_graph_6.md5 new file mode 100644 index 0000000..070dc68 --- /dev/null +++ b/docs/html/inherit_graph_6.md5 @@ -0,0 +1 @@ +e9e6d06a7f2003c539f18d3596a236e1 \ No newline at end of file diff --git a/docs/html/inherit_graph_6.svg b/docs/html/inherit_graph_6.svg new file mode 100644 index 0000000..4f343a8 --- /dev/null +++ b/docs/html/inherit_graph_6.svg @@ -0,0 +1,75 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DbcStatementHandler + + + + + +Node1 + + +DbcCommentHandler + + + + + +Node0->Node1 + + + + + + + + +Node2 + + +DbcFrameHandler + + + + + +Node0->Node2 + + + + + + + + +Node3 + + +DbcSignalHandler + + + + + +Node0->Node3 + + + + + + + + diff --git a/docs/html/inherit_graph_7.map b/docs/html/inherit_graph_7.map new file mode 100644 index 0000000..7cbafa0 --- /dev/null +++ b/docs/html/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_7.md5 b/docs/html/inherit_graph_7.md5 new file mode 100644 index 0000000..f202ac5 --- /dev/null +++ b/docs/html/inherit_graph_7.md5 @@ -0,0 +1 @@ +caff685aaef8276b6a7bdc7c6f2f9efa \ No newline at end of file diff --git a/docs/html/inherit_graph_7.svg b/docs/html/inherit_graph_7.svg new file mode 100644 index 0000000..0044598 --- /dev/null +++ b/docs/html/inherit_graph_7.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DbcTreeBuilder + + + + + diff --git a/docs/html/inherit_graph_8.map b/docs/html/inherit_graph_8.map new file mode 100644 index 0000000..849ced6 --- /dev/null +++ b/docs/html/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_8.md5 b/docs/html/inherit_graph_8.md5 new file mode 100644 index 0000000..92a0f01 --- /dev/null +++ b/docs/html/inherit_graph_8.md5 @@ -0,0 +1 @@ +7b890cf55980a81b2aa2570b6e5b0f21 \ No newline at end of file diff --git a/docs/html/inherit_graph_8.svg b/docs/html/inherit_graph_8.svg new file mode 100644 index 0000000..2907443 --- /dev/null +++ b/docs/html/inherit_graph_8.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DecodeDatabase + + + + + diff --git a/docs/html/inherit_graph_9.map b/docs/html/inherit_graph_9.map new file mode 100644 index 0000000..c4d2de0 --- /dev/null +++ b/docs/html/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/docs/html/inherit_graph_9.md5 b/docs/html/inherit_graph_9.md5 new file mode 100644 index 0000000..63d3ebd --- /dev/null +++ b/docs/html/inherit_graph_9.md5 @@ -0,0 +1 @@ +f4d6da699c0f627067cdac840c9a773b \ No newline at end of file diff --git a/docs/html/inherit_graph_9.svg b/docs/html/inherit_graph_9.svg new file mode 100644 index 0000000..7695237 --- /dev/null +++ b/docs/html/inherit_graph_9.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DecodedFrameValue + + + + + diff --git a/docs/html/inherits.html b/docs/html/inherits.html new file mode 100644 index 0000000..afe9bb3 --- /dev/null +++ b/docs/html/inherits.html @@ -0,0 +1,130 @@ + + + + + + + +DBC Framework: Class Hierarchy + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    DBC Framework +
    +
    DBC parsing and CAN signal decoding framework
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Class Hierarchy
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + diff --git a/docs/html/jquery.js b/docs/html/jquery.js index c9ed3d9..1dffb65 100644 --- a/docs/html/jquery.js +++ b/docs/html/jquery.js @@ -1,12 +1,11 @@ /*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
    "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(y){"use strict";y.ui=y.ui||{};y.ui.version="1.13.2";var n,i=0,h=Array.prototype.hasOwnProperty,a=Array.prototype.slice;y.cleanData=(n=y.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=y._data(i,"events"))&&e.remove&&y(i).triggerHandler("remove");n(t)}),y.widget=function(t,i,e){var s,n,o,h={},a=t.split(".")[0],r=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=y.Widget),Array.isArray(e)&&(e=y.extend.apply(null,[{}].concat(e))),y.expr.pseudos[r.toLowerCase()]=function(t){return!!y.data(t,r)},y[a]=y[a]||{},s=y[a][t],n=y[a][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},y.extend(n,s,{version:e.version,_proto:y.extend({},e),_childConstructors:[]}),(o=new i).options=y.widget.extend({},o.options),y.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}h[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=y.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},h,{constructor:n,namespace:a,widgetName:t,widgetFullName:r}),s?(y.each(s._childConstructors,function(t,e){var i=e.prototype;y.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),y.widget.bridge(t,n),n},y.widget.extend=function(t){for(var e,i,s=a.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
    "),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n
    ").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e
    ").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0 - + - + DBC Framework: main.cpp File Reference @@ -34,10 +34,10 @@
    - + @@ -77,9 +77,16 @@ $(document).ready(function(){initNavTree('main_8cpp.html',''); initResizable();
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    @@ -91,31 +98,31 @@ $(document).ready(function(){initNavTree('main_8cpp.html',''); initResizable();

    Created: 2026-03-13 Author: Deeaitch (Dim. Himro) More...

    -
    #include <iostream>
    +
    #include <cstddef>
    #include <iomanip>
    +#include <iostream>
    #include <memory>
    #include <vector>
    -#include <cstddef>
    -#include "dbc_parser.h"
    -#include "dbc_tree_builder.h"
    #include "dbc_decode_builder.h"
    #include "dbc_decoder.h"
    +#include "dbc_parser.h"
    +#include "dbc_tree_builder.h"

    Go to the source code of this file.

    - +

    Functions

    int main (int argc, char *argv[])
    int main (int argc, char *argv[])
     

    Detailed Description

    -

    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

    -

    Licensed under the MIT License. See LICENSE file in the project root for full license text.

    +

    Created: 2026-03-13 Author: Deeaitch (Dim. Himro)

    +

    Licensed under the MIT License. See LICENSE file in the project root for full license text.

    Definition in file main.cpp.

    Function Documentation

    -

    ◆ main()

    +

    ◆ main()

    @@ -140,7 +147,7 @@ Functions
    -

    Definition at line 97 of file main.cpp.

    +

    Definition at line 98 of file main.cpp.

    @@ -150,7 +157,7 @@ Functions diff --git a/docs/html/main_8cpp_source.html b/docs/html/main_8cpp_source.html index e15edfa..5ca134b 100644 --- a/docs/html/main_8cpp_source.html +++ b/docs/html/main_8cpp_source.html @@ -1,9 +1,9 @@ - + - + DBC Framework: main.cpp Source File @@ -34,10 +34,10 @@
    - + @@ -51,6 +51,11 @@ $(function() { /* @license-end */ +
    diff --git a/docs/html/md_README.html b/docs/html/md_README.html index bf84030..162256a 100644 --- a/docs/html/md_README.html +++ b/docs/html/md_README.html @@ -1,9 +1,9 @@ - + - + DBC Framework: DBC Parser and Runtime Decode Module Documentation @@ -34,10 +34,10 @@
    - + @@ -77,19 +77,27 @@ $(document).ready(function(){initNavTree('md_README.html',''); initResizable();
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    DBC Parser and Runtime Decode Module Documentation
    +
    DBC Parser and Runtime Decode Module Documentation
    -

    +

    +

    Overview

    -

    This module provides a minimal but extensible DBC parser and runtime decode foundation for the FrameTap project.

    -

    Its purpose is to:

    +

    This module provides a minimal but extensible DBC parser and runtime decode foundation for the FrameTap project.

    +

    Its purpose is to:

    • parse DBC files
    • store parsed frame and signal metadata
    • @@ -98,27 +106,27 @@ Overview

  • decode live CAN frames
  • decode CAN trace records using the same decoder
  • -

    The implementation follows a simple and practical design:

    +

    The implementation follows a simple and practical design:

    • parser logic is separated from UI logic
    • runtime decode structures are separated from tree structures
    • Qt is not required at the parser or decoder level
    • the same decode engine can be reused for live traffic and trace replay
    -

    This is not a full production-grade DBC implementation yet, but it is a strong architectural base.

    +

    This is not a full production-grade DBC implementation yet, but it is a strong architectural base.


    High-Level Architecture

    -

    The module is divided into two main paths.

    +

    The module is divided into two main paths.

    1. Parse and UI path

    -

    Used for:

    +

    Used for:

    • browsing frames and signals
    • later integration with Qt Model/View
    • displaying metadata
    -

    Pipeline:

    +

    Pipeline:

    DBC file
    ↓
    DbcParser
    @@ -132,13 +140,13 @@ High-Level Architecture
    future Qt UI

    2. Runtime decode path

    -

    Used for:

    +

    Used for:

    • live CAN decoding
    • CAN trace decoding
    • fast lookup by CAN ID
    -

    Pipeline:

    +

    Pipeline:

    DBC file
    ↓
    DbcParser
    @@ -152,86 +160,89 @@ High-Level Architecture
    DbcDecoder
    ↓
    Decoded values
    -

    This separation is intentional.

    -

    The tree is useful for UI, but it is not the main data structure for runtime decoding.

    +

    This separation is intentional.

    +

    The tree is useful for UI, but it is not the main data structure for runtime decoding.


    Why the Runtime Decode Layer Exists

    -

    A tree structure is convenient for browsing, but a runtime decoder needs something different:

    +

    A tree structure is convenient for browsing, but a runtime decoder needs something different:

    • fast lookup by CAN ID
    • direct access to signal decode definitions
    • minimal overhead during repeated decoding
    • the same logic for live frames and trace frames
    -

    Because of that, the design uses a dedicated runtime-ready structure:

    +

    Because of that, the design uses a dedicated runtime-ready structure:

    -

    This avoids forcing UI-oriented structures into a decode role they were not meant for.

    +

    This avoids forcing UI-oriented structures into a decode role they were not meant for.


    Module Layout

    Parsed DBC structures

    -

    Files:

    +

    Files:

    -

    These store a readable representation of the parsed DBC file.

    +

    These store a readable representation of the parsed DBC file.

    UI tree structures

    -

    Files:

    +

    Files:

    -

    These convert parsed DBC content into a tree hierarchy suitable for UI and model/view usage later.

    +

    These convert parsed DBC content into a tree hierarchy suitable for UI and model/view usage later.

    Runtime decode structures

    -

    Files:

    +

    Files:

    -

    These convert parsed DBC content into a structure optimized for decoding.

    +

    These convert parsed DBC content into a structure optimized for decoding.

    Runtime decoder

    -

    Files:

    +

    Files:

    -

    These perform actual decoding of raw CAN frames using DecodeDatabase.

    +

    These perform actual decoding of raw CAN frames using DecodeDatabase.

    Parser

    -

    Files:

    +

    Files:

    -

    These parse the DBC file itself.

    +

    The parser reads files and reports errors; registered statement handlers parse DBC constructs.

    Demo

    -

    File:

    +

    File:

    -

    Used as a small integration example.

    +

    Used as a small integration example.


    Parsed Data Structures

    <tt>SignalInfo</tt>

    -

    Represents one signal as parsed from the DBC file.

    -

    Fields:

    +

    Represents one signal as parsed from the DBC file.

    +

    Fields:

    • name
    • startBit
    • @@ -246,19 +257,19 @@ Parsed Data Structures
    • receivers
    • comment
    -

    Notes:

    +

    Notes:

    • receivers is a list because a signal may have more than one receiver ECU
    • factor and offset define physical conversion
    • this structure is close to DBC content and easy to inspect
    -

    Physical value rule:

    +

    Physical value rule:

    physical = raw * factor + offset

    <tt>FrameInfo</tt>

    -

    Represents one frame as parsed from the DBC file.

    -

    Fields:

    +

    Represents one frame as parsed from the DBC file.

    +

    Fields:

    • name
    • canId
    • @@ -270,7 +281,7 @@ Parsed Data Structures
    • comment
    • signals
    -

    Notes:

    +

    Notes:

    • signals is a list of SignalInfo
    • isExtended is determined during CAN ID normalization
    • @@ -279,23 +290,23 @@ Parsed Data Structures

      <tt>DbcDatabase</tt>

      -

      Top-level parsed DBC container.

      -

      Conceptually:

      +

      Top-level parsed DBC container.

      +

      Conceptually:

      DbcDatabase
      └── vector<FrameInfo>
      -

      This is the central structure produced by DbcParser.

      +

    This is the central structure produced by DbcParser.


    UI Tree Layer

    <tt>TreeNode</tt>

    -

    The UI tree contains three node types:

    +

    The UI tree contains three node types:

    • Root
    • Frame
    • Signal
    -

    Example hierarchy:

    +

    Example hierarchy:

    dbc
    ├── EngineData
    │ ├── EngineSpeed
    @@ -304,43 +315,43 @@ UI Tree Layer
    └── VehicleData
    ├── VehicleSpeed
    └── Odometer
    -

    Each node stores either:

    +

    Each node stores either:

    -

    The tree is intended for browsing and later Qt model integration.

    -

    It is not the primary runtime decode structure.

    +

    The tree is intended for browsing and later Qt model integration.

    +

    It is not the primary runtime decode structure.


    Runtime Decode Layer

    Purpose

    -

    The decode layer exists so that decoding can be fast and independent from UI concerns.

    -

    Instead of searching a tree, the decoder uses a prepared database with direct lookup.

    +

    The decode layer exists so that decoding can be fast and independent from UI concerns.

    +

    Instead of searching a tree, the decoder uses a prepared database with direct lookup.


    <tt>ByteOrder</tt>

    -

    Runtime byte order enum:

    +

    Runtime byte order enum:

    • Intel
    • Motorola
    -

    This is better for decode code than passing around raw DBC characters.

    +

    This is better for decode code than passing around raw DBC characters.


    <tt>ValueType</tt>

    -

    Numeric type enum:

    +

    Numeric type enum:

    • Unsigned
    • Signed
    -

    This is clearer than combining multiple boolean flags during runtime logic.

    +

    This is clearer than combining multiple boolean flags during runtime logic.


    <tt>DecodeSignal</tt>

    -

    Represents one runtime-ready signal definition.

    -

    Fields:

    +

    Represents one runtime-ready signal definition.

    +

    Fields:

    • name
    • startBit
    • @@ -355,12 +366,12 @@ Purpose
    • receivers
    • comment
    -

    This structure contains all information required for extracting and converting a signal value from raw frame data.

    +

    This structure contains all information required for extracting and converting a signal value from raw frame data.


    <tt>DecodeFrame</tt>

    -

    Represents one runtime-ready frame definition.

    -

    Fields:

    +

    Represents one runtime-ready frame definition.

    +

    Fields:

    • name
    • canId
    • @@ -372,44 +383,44 @@ Purpose
    • comment
    • signals
    -

    This structure is used directly by the decoder.

    +

    This structure is used directly by the decoder.


    <tt>FrameKey</tt>

    -

    Fast lookup key for runtime frame matching.

    -

    Fields:

    +

    Fast lookup key for runtime frame matching.

    +

    Fields:

    • canId
    • isExtended
    -

    This matters because the same numeric identifier must not be confused between standard and extended frames.

    +

    This matters because the same numeric identifier must not be confused between standard and extended frames.


    <tt>DecodeDatabase</tt>

    -

    Top-level runtime decode container.

    -

    Fields:

    +

    Top-level runtime decode container.

    +

    Fields:

    • frames
    • frameIndexByKey
    -

    Conceptually:

    +

    Conceptually:

    DecodeDatabase
    ├── vector<DecodeFrame>
    └── unordered_map<FrameKey, index>
    -

    This gives the decoder fast access to a frame definition using CAN ID and frame type.

    +

    This gives the decoder fast access to a frame definition using CAN ID and frame type.


    Decoder Layer

    <tt>RawCanFrame</tt>

    -

    Represents a raw CAN frame to decode.

    -

    Fields:

    +

    Represents a raw CAN frame to decode.

    +

    Fields:

    -

    This same structure can be used for:

    +

    This same structure can be used for: