From a1b36d343e05f78d591f3ef444c030f41ffdf792 Mon Sep 17 00:00:00 2001 From: Amar Mahmutbegovic Date: Sat, 11 Jan 2025 12:48:14 +0100 Subject: [PATCH] add Chapter17 --- Chapter17/fsm/.clang-format | 9 + Chapter17/fsm/.clang-tidy | 27 + Chapter17/fsm/CMakeLists.txt | 162 + Chapter17/fsm/app/src/main_fsm_simple.cpp | 116 + Chapter17/fsm/cstdlib_support/retarget.cpp | 81 + Chapter17/fsm/cstdlib_support/retarget.hpp | 10 + Chapter17/fsm/hal/adc/inc/adc.hpp | 18 + Chapter17/fsm/hal/adc/inc/adc_stm32.hpp | 22 + Chapter17/fsm/hal/adc/src/adc_stm32.cpp | 47 + Chapter17/fsm/hal/gpio/inc/gpio.hpp | 19 + .../hal/gpio/inc/gpio_interrupt_manager.hpp | 19 + Chapter17/fsm/hal/gpio/inc/gpio_stm32.hpp | 70 + Chapter17/fsm/hal/gpio/src/gpio.cpp | 21 + .../hal/gpio/src/gpio_interrupt_manager.cpp | 17 + Chapter17/fsm/hal/inc/hal.hpp | 33 + .../fsm/hal/uart/inc/stm32f0xx_hal_uart.hpp | 21 + Chapter17/fsm/hal/uart/inc/uart.hpp | 14 + Chapter17/fsm/hal/uart/inc/uart_stm32.hpp | 46 + Chapter17/fsm/hal/uart/src/uart_stm32.cpp | 34 + Chapter17/fsm/libs/etl/.clang-format | 51 + Chapter17/fsm/libs/etl/CMakeLists.txt | 82 + Chapter17/fsm/libs/etl/Doxyfile | 2401 + Chapter17/fsm/libs/etl/LICENSE | 19 + Chapter17/fsm/libs/etl/README.md | 147 + Chapter17/fsm/libs/etl/appveyor.yml | 26 + .../etl/arduino/Embedded_Template_Library.h | 80 + .../Example_0_import_etl.ino | 12 + .../Example_Vector_1_simple_use.ino | 46 + .../fsm/libs/etl/arduino/library-arduino.json | 39 + .../etl/arduino/library-arduino.properties | 10 + .../etl/cmake/GetGitRevisionDescription.cmake | 284 + .../cmake/GetGitRevisionDescription.cmake.in | 43 + .../fsm/libs/etl/cmake/etlConfig.cmake.in | 4 + Chapter17/fsm/libs/etl/cmake/helpers.cmake | 35 + .../ArmTimerCallbacks - C++/.gitignore | 4 + .../ArmTimerCallbacks.uvprojx | 487 + .../ArmTimerCallbacks - C++/etl_profile.h | 15 + .../examples/ArmTimerCallbacks - C++/main.cpp | 167 + .../etl/examples/Blink/Blink1/__vm/.gitignore | 2 + .../libs/etl/examples/BlinkList/BlinkList.ino | 53 + .../BlinkList/VisualMicro/BlinkList.sln | 22 + .../BlinkList/VisualMicro/BlinkList.vcxproj | 86 + .../VisualMicro/BlinkList.vcxproj.filters | 28 + .../BlinkList/VisualMicro/__vm/.gitignore | 1 + .../etl/examples/BlinkList/__vm/.gitignore | 1 + .../libs/etl/examples/Debounce/Debounce.ino | 39 + .../CMakeLists.txt | 17 + .../FunctionInterruptSimulation.cpp | 149 + .../etl_profile.h | 48 + .../v15/.gitignore | 1 + .../v15/.gitignore | 1 + .../FunctionInterruptSimulation-Delegates.sln | 31 + ...ctionInterruptSimulation-Delegates.vcxproj | 156 + .../FunctionInterruptSimulation-Delegates.sln | 31 + ...ctionInterruptSimulation-Delegates.vcxproj | 157 + .../CMakeLists.txt | 17 + .../FunctionInterruptSimulation.cpp | 149 + .../FunctionInterruptSimulation/etl_profile.h | 48 + .../vs2017/FunctionInterruptSimulation.sln | 31 + .../FunctionInterruptSimulation.vcxproj | 156 + ...unctionInterruptSimulation.vcxproj.filters | 27 + .../MutexMessageRouter/CMakeLists.txt | 12 + .../MutexMessageRouter/MutexMessageRouter.cpp | 110 + .../MutexMessageRouter/MutexMessageRouter.sln | 31 + .../MutexMessageRouter.vcxproj | 140 + .../etl/examples/QueuedFSM/CMakeLists.txt | 17 + .../libs/etl/examples/QueuedFSM/QueuedFSM.cpp | 288 + .../libs/etl/examples/QueuedFSM/etl_profile.h | 43 + .../examples/QueuedFSM/vs2019/QueuedFSM.sln | 30 + .../QueuedFSM/vs2019/QueuedFSM.vcxproj | 160 + .../vs2019/QueuedFSM.vcxproj.filters | 27 + .../QueuedMessageRouter/CMakeLists.txt | 17 + .../QueuedMessageRouter.cpp | 151 + .../QueuedMessageRouter/etl_profile.h | 43 + .../vs2019/QueuedMessageRouter.sln | 31 + .../vs2019/QueuedMessageRouter.vcxproj | 158 + .../etl/examples/Scheduler/CMakeLists.txt | 17 + .../libs/etl/examples/Scheduler/Scheduler.cpp | 184 + .../libs/etl/examples/Scheduler/etl_profile.h | 43 + .../examples/Scheduler/vs2017/Scheduler.sln | 30 + .../Scheduler/vs2017/Scheduler.vcxproj | 160 + .../examples/Scheduler/vs2019/Scheduler.sln | 30 + .../Scheduler/vs2019/Scheduler.vcxproj | 160 + .../etl/examples/SharedMessage/CMakeLists.txt | 17 + .../examples/SharedMessage/SharedMessage.cpp | 285 + .../examples/SharedMessage/SharedMessage.sln | 31 + .../SharedMessage/SharedMessage.vcxproj | 165 + .../etl/examples/SharedMessage/etl_profile.h | 0 .../libs/etl/examples/platformio/.gitignore | 7 + .../libs/etl/examples/platformio/README.md | 16 + .../examples/platformio/include/etl_profile.h | 1 + .../etl/examples/platformio/platformio.ini | 27 + .../libs/etl/examples/platformio/src/main.cpp | 142 + .../fsm/libs/etl/images/ArcticCodeVault.png | Bin 0 -> 65953 bytes .../etl/images/ArcticCodeVaultTransparent.png | Bin 0 -> 67930 bytes .../fsm/libs/etl/images/Coverty Shields.txt | 9 + Chapter17/fsm/libs/etl/images/etl-round.png | Bin 0 -> 33955 bytes Chapter17/fsm/libs/etl/images/etl.ico | Bin 0 -> 1150 bytes Chapter17/fsm/libs/etl/images/etl.png | Bin 0 -> 20267 bytes Chapter17/fsm/libs/etl/images/etl.xar | Bin 0 -> 28896 bytes Chapter17/fsm/libs/etl/images/etl16.png | Bin 0 -> 15993 bytes Chapter17/fsm/libs/etl/images/etl32.png | Bin 0 -> 19081 bytes Chapter17/fsm/libs/etl/images/etl48.png | Bin 0 -> 24217 bytes Chapter17/fsm/libs/etl/images/etl64.png | Bin 0 -> 2047 bytes Chapter17/fsm/libs/etl/images/favicon-32.png | Bin 0 -> 19081 bytes Chapter17/fsm/libs/etl/images/favicon-64.png | Bin 0 -> 2047 bytes Chapter17/fsm/libs/etl/images/favicon.ico | Bin 0 -> 1150 bytes Chapter17/fsm/libs/etl/include/etl/absolute.h | 96 + .../fsm/libs/etl/include/etl/algorithm.h | 3425 + .../fsm/libs/etl/include/etl/alignment.h | 339 + Chapter17/fsm/libs/etl/include/etl/array.h | 741 + .../fsm/libs/etl/include/etl/array_view.h | 655 + .../fsm/libs/etl/include/etl/array_wrapper.h | 418 + Chapter17/fsm/libs/etl/include/etl/atomic.h | 48 + .../libs/etl/include/etl/atomic/atomic_arm.h | 34 + .../include/etl/atomic/atomic_clang_sync.h | 34 + .../etl/include/etl/atomic/atomic_gcc_sync.h | 2236 + .../libs/etl/include/etl/atomic/atomic_std.h | 120 + Chapter17/fsm/libs/etl/include/etl/base64.h | 218 + .../fsm/libs/etl/include/etl/base64_decoder.h | 868 + .../fsm/libs/etl/include/etl/base64_encoder.h | 843 + .../libs/etl/include/etl/basic_format_spec.h | 496 + .../fsm/libs/etl/include/etl/basic_string.h | 2652 + .../etl/include/etl/basic_string_stream.h | 281 + Chapter17/fsm/libs/etl/include/etl/binary.h | 2689 + .../etl/include/etl/bip_buffer_spsc_atomic.h | 541 + Chapter17/fsm/libs/etl/include/etl/bit.h | 252 + .../fsm/libs/etl/include/etl/bit_stream.h | 1409 + Chapter17/fsm/libs/etl/include/etl/bitset.h | 42 + .../fsm/libs/etl/include/etl/bloom_filter.h | 190 + .../fsm/libs/etl/include/etl/bresenham_line.h | 361 + .../libs/etl/include/etl/buffer_descriptors.h | 304 + Chapter17/fsm/libs/etl/include/etl/byte.h | 323 + .../fsm/libs/etl/include/etl/byte_stream.h | 903 + Chapter17/fsm/libs/etl/include/etl/callback.h | 81 + .../libs/etl/include/etl/callback_service.h | 159 + .../fsm/libs/etl/include/etl/callback_timer.h | 842 + .../etl/include/etl/callback_timer_atomic.h | 670 + .../include/etl/callback_timer_interrupt.h | 671 + .../etl/include/etl/callback_timer_locked.h | 698 + .../fsm/libs/etl/include/etl/char_traits.h | 387 + Chapter17/fsm/libs/etl/include/etl/checksum.h | 307 + .../libs/etl/include/etl/circular_buffer.h | 1461 + .../libs/etl/include/etl/circular_iterator.h | 753 + .../fsm/libs/etl/include/etl/combinations.h | 63 + Chapter17/fsm/libs/etl/include/etl/compare.h | 112 + Chapter17/fsm/libs/etl/include/etl/constant.h | 57 + .../fsm/libs/etl/include/etl/container.h | 40 + .../fsm/libs/etl/include/etl/correlation.h | 292 + .../fsm/libs/etl/include/etl/covariance.h | 240 + Chapter17/fsm/libs/etl/include/etl/crc.h | 88 + Chapter17/fsm/libs/etl/include/etl/crc1.h | 105 + Chapter17/fsm/libs/etl/include/etl/crc16.h | 78 + Chapter17/fsm/libs/etl/include/etl/crc16_a.h | 78 + .../fsm/libs/etl/include/etl/crc16_arc.h | 78 + .../libs/etl/include/etl/crc16_aug_ccitt.h | 80 + .../fsm/libs/etl/include/etl/crc16_buypass.h | 78 + .../fsm/libs/etl/include/etl/crc16_ccitt.h | 78 + .../fsm/libs/etl/include/etl/crc16_cdma2000.h | 78 + .../fsm/libs/etl/include/etl/crc16_dds110.h | 78 + .../fsm/libs/etl/include/etl/crc16_dectr.h | 78 + .../fsm/libs/etl/include/etl/crc16_dectx.h | 78 + .../fsm/libs/etl/include/etl/crc16_dnp.h | 78 + .../fsm/libs/etl/include/etl/crc16_en13757.h | 78 + .../fsm/libs/etl/include/etl/crc16_genibus.h | 78 + .../fsm/libs/etl/include/etl/crc16_kermit.h | 78 + .../fsm/libs/etl/include/etl/crc16_m17.h | 78 + .../fsm/libs/etl/include/etl/crc16_maxim.h | 78 + .../fsm/libs/etl/include/etl/crc16_mcrf4xx.h | 78 + .../fsm/libs/etl/include/etl/crc16_modbus.h | 78 + .../fsm/libs/etl/include/etl/crc16_profibus.h | 78 + .../fsm/libs/etl/include/etl/crc16_riello.h | 78 + .../fsm/libs/etl/include/etl/crc16_t10dif.h | 78 + .../fsm/libs/etl/include/etl/crc16_teledisk.h | 78 + .../fsm/libs/etl/include/etl/crc16_tms37157.h | 78 + .../fsm/libs/etl/include/etl/crc16_usb.h | 78 + .../fsm/libs/etl/include/etl/crc16_x25.h | 78 + .../fsm/libs/etl/include/etl/crc16_xmodem.h | 78 + Chapter17/fsm/libs/etl/include/etl/crc32.h | 78 + .../fsm/libs/etl/include/etl/crc32_bzip2.h | 78 + Chapter17/fsm/libs/etl/include/etl/crc32_c.h | 78 + Chapter17/fsm/libs/etl/include/etl/crc32_d.h | 78 + .../fsm/libs/etl/include/etl/crc32_jamcrc.h | 78 + .../fsm/libs/etl/include/etl/crc32_mpeg2.h | 78 + .../fsm/libs/etl/include/etl/crc32_posix.h | 78 + Chapter17/fsm/libs/etl/include/etl/crc32_q.h | 78 + .../fsm/libs/etl/include/etl/crc32_xfer.h | 78 + .../fsm/libs/etl/include/etl/crc64_ecma.h | 78 + .../fsm/libs/etl/include/etl/crc8_ccitt.h | 76 + .../fsm/libs/etl/include/etl/crc8_cdma2000.h | 79 + .../fsm/libs/etl/include/etl/crc8_darc.h | 79 + .../fsm/libs/etl/include/etl/crc8_dvbs2.h | 79 + Chapter17/fsm/libs/etl/include/etl/crc8_ebu.h | 79 + .../fsm/libs/etl/include/etl/crc8_icode.h | 79 + Chapter17/fsm/libs/etl/include/etl/crc8_itu.h | 79 + .../fsm/libs/etl/include/etl/crc8_j1850.h | 79 + .../libs/etl/include/etl/crc8_j1850_zero.h | 79 + .../fsm/libs/etl/include/etl/crc8_maxim.h | 79 + .../fsm/libs/etl/include/etl/crc8_rohc.h | 79 + .../fsm/libs/etl/include/etl/crc8_wcdma.h | 79 + Chapter17/fsm/libs/etl/include/etl/cstring.h | 37 + .../fsm/libs/etl/include/etl/cyclic_value.h | 617 + Chapter17/fsm/libs/etl/include/etl/debounce.h | 587 + .../fsm/libs/etl/include/etl/debug_count.h | 180 + Chapter17/fsm/libs/etl/include/etl/delegate.h | 42 + .../libs/etl/include/etl/delegate_observer.h | 262 + .../libs/etl/include/etl/delegate_service.h | 215 + .../libs/etl/include/etl/deprecated/factory.h | 468 + Chapter17/fsm/libs/etl/include/etl/deque.h | 2636 + Chapter17/fsm/libs/etl/include/etl/doxygen.h | 55 + .../fsm/libs/etl/include/etl/endianness.h | 192 + .../fsm/libs/etl/include/etl/enum_type.h | 116 + .../fsm/libs/etl/include/etl/error_handler.h | 342 + .../fsm/libs/etl/include/etl/exception.h | 121 + Chapter17/fsm/libs/etl/include/etl/expected.h | 1108 + .../etl/include/etl/experimental/bit_cast.h | 33 + .../include/etl/experimental/class_traits.h | 181 + .../etl/include/etl/experimental/icache.h | 115 + .../etl/include/etl/experimental/mem_cast.h | 78 + ...oint flt (typo abs(a) should be abs(b).png | Bin 0 -> 926107 bytes .../etl/experimental/mid_point ptr.png | Bin 0 -> 325251 bytes .../include/etl/experimental/mid_point.png | Bin 0 -> 501223 bytes .../etl/include/etl/experimental/singleton.h | 87 + .../fsm/libs/etl/include/etl/factorial.h | 73 + .../fsm/libs/etl/include/etl/fibonacci.h | 82 + .../libs/etl/include/etl/file_error_numbers.h | 107 + .../fsm/libs/etl/include/etl/fixed_iterator.h | 277 + .../etl/fixed_sized_memory_block_allocator.h | 126 + Chapter17/fsm/libs/etl/include/etl/flags.h | 389 + Chapter17/fsm/libs/etl/include/etl/flat_map.h | 1261 + .../fsm/libs/etl/include/etl/flat_multimap.h | 1070 + .../fsm/libs/etl/include/etl/flat_multiset.h | 1038 + Chapter17/fsm/libs/etl/include/etl/flat_set.h | 1140 + Chapter17/fsm/libs/etl/include/etl/fnv_1.h | 286 + .../fsm/libs/etl/include/etl/format_spec.h | 45 + .../fsm/libs/etl/include/etl/forward_list.h | 2051 + .../etl/include/etl/frame_check_sequence.h | 193 + Chapter17/fsm/libs/etl/include/etl/fsm.h | 1523 + Chapter17/fsm/libs/etl/include/etl/function.h | 420 + .../fsm/libs/etl/include/etl/functional.h | 602 + Chapter17/fsm/libs/etl/include/etl/gamma.h | 108 + Chapter17/fsm/libs/etl/include/etl/gcd.h | 144 + .../include/etl/generators/fsm_generator.h | 853 + .../etl/include/etl/generators/generate.bat | 9 + .../include/etl/generators/generate_fsm.bat | 1 + .../etl/generators/generate_largest.bat | 1 + .../generators/generate_message_packet.bat | 1 + .../generators/generate_message_router.bat | 1 + .../etl/generators/generate_smallest.bat | 1 + .../etl/generators/generate_type_lookup.bat | 1 + .../etl/generators/generate_type_select.bat | 1 + .../etl/generators/generate_type_traits.bat | 1 + .../etl/generators/generate_variant_pool.bat | 1 + .../etl/generators/largest_generator.h | 452 + .../etl/generators/message_packet_generator.h | 1008 + .../etl/generators/message_router_generator.h | 898 + .../etl/generators/smallest_generator.h | 432 + .../etl/generators/type_lookup_generator.h | 337 + .../etl/generators/type_select_generator.h | 177 + .../etl/generators/type_traits_generator.h | 2373 + .../etl/generators/variant_pool_generator.h | 620 + .../fsm/libs/etl/include/etl/generic_pool.h | 359 + Chapter17/fsm/libs/etl/include/etl/hash.h | 545 + Chapter17/fsm/libs/etl/include/etl/hfsm.h | 256 + .../fsm/libs/etl/include/etl/histogram.h | 603 + Chapter17/fsm/libs/etl/include/etl/ihash.h | 76 + .../etl/include/etl/imemory_block_allocator.h | 135 + .../libs/etl/include/etl/indirect_vector.h | 1612 + .../libs/etl/include/etl/initializer_list.h | 228 + .../fsm/libs/etl/include/etl/instance_count.h | 117 + .../libs/etl/include/etl/integral_limits.h | 626 + .../etl/include/etl/intrusive_forward_list.h | 1188 + .../libs/etl/include/etl/intrusive_links.h | 1325 + .../fsm/libs/etl/include/etl/intrusive_list.h | 1205 + .../libs/etl/include/etl/intrusive_queue.h | 292 + .../libs/etl/include/etl/intrusive_stack.h | 271 + Chapter17/fsm/libs/etl/include/etl/invert.h | 83 + Chapter17/fsm/libs/etl/include/etl/io_port.h | 1378 + Chapter17/fsm/libs/etl/include/etl/ipool.h | 475 + .../etl/ireference_counted_message_pool.h | 73 + Chapter17/fsm/libs/etl/include/etl/iterator.h | 1217 + Chapter17/fsm/libs/etl/include/etl/jenkins.h | 121 + Chapter17/fsm/libs/etl/include/etl/largest.h | 379 + Chapter17/fsm/libs/etl/include/etl/lcm.h | 141 + Chapter17/fsm/libs/etl/include/etl/limiter.h | 87 + Chapter17/fsm/libs/etl/include/etl/limits.h | 1187 + Chapter17/fsm/libs/etl/include/etl/list.h | 2487 + Chapter17/fsm/libs/etl/include/etl/log.h | 130 + Chapter17/fsm/libs/etl/include/etl/macros.h | 47 + Chapter17/fsm/libs/etl/include/etl/map.h | 2900 + Chapter17/fsm/libs/etl/include/etl/math.h | 156 + .../fsm/libs/etl/include/etl/math_constants.h | 89 + Chapter17/fsm/libs/etl/include/etl/mean.h | 204 + Chapter17/fsm/libs/etl/include/etl/mem_cast.h | 596 + Chapter17/fsm/libs/etl/include/etl/memory.h | 2568 + .../fsm/libs/etl/include/etl/memory_model.h | 78 + Chapter17/fsm/libs/etl/include/etl/message.h | 268 + .../fsm/libs/etl/include/etl/message_broker.h | 390 + .../fsm/libs/etl/include/etl/message_bus.h | 450 + .../fsm/libs/etl/include/etl/message_packet.h | 4748 + .../fsm/libs/etl/include/etl/message_router.h | 2770 + .../etl/include/etl/message_router_registry.h | 578 + .../fsm/libs/etl/include/etl/message_timer.h | 705 + .../etl/include/etl/message_timer_atomic.h | 653 + .../etl/include/etl/message_timer_interrupt.h | 660 + .../etl/include/etl/message_timer_locked.h | 684 + .../fsm/libs/etl/include/etl/message_types.h | 48 + .../fsm/libs/etl/include/etl/multi_array.h | 69 + .../fsm/libs/etl/include/etl/multi_range.h | 529 + .../fsm/libs/etl/include/etl/multi_span.h | 343 + .../fsm/libs/etl/include/etl/multi_vector.h | 68 + Chapter17/fsm/libs/etl/include/etl/multimap.h | 2548 + Chapter17/fsm/libs/etl/include/etl/multiset.h | 2531 + Chapter17/fsm/libs/etl/include/etl/murmur3.h | 241 + Chapter17/fsm/libs/etl/include/etl/mutex.h | 103 + .../libs/etl/include/etl/mutex/mutex_arm.h | 34 + .../etl/include/etl/mutex/mutex_clang_sync.h | 34 + .../etl/include/etl/mutex/mutex_cmsis_os2.h | 82 + .../etl/include/etl/mutex/mutex_freertos.h | 80 + .../etl/include/etl/mutex/mutex_gcc_sync.h | 78 + .../libs/etl/include/etl/mutex/mutex_std.h | 45 + Chapter17/fsm/libs/etl/include/etl/negative.h | 62 + Chapter17/fsm/libs/etl/include/etl/nth_type.h | 54 + .../fsm/libs/etl/include/etl/null_type.h | 44 + Chapter17/fsm/libs/etl/include/etl/nullptr.h | 67 + Chapter17/fsm/libs/etl/include/etl/numeric.h | 218 + Chapter17/fsm/libs/etl/include/etl/observer.h | 548 + Chapter17/fsm/libs/etl/include/etl/optional.h | 2178 + Chapter17/fsm/libs/etl/include/etl/overload.h | 108 + Chapter17/fsm/libs/etl/include/etl/packet.h | 165 + .../fsm/libs/etl/include/etl/parameter_pack.h | 150 + .../fsm/libs/etl/include/etl/parameter_type.h | 57 + Chapter17/fsm/libs/etl/include/etl/pearson.h | 181 + .../fsm/libs/etl/include/etl/permutations.h | 74 + .../fsm/libs/etl/include/etl/placement_new.h | 67 + Chapter17/fsm/libs/etl/include/etl/platform.h | 521 + .../fsm/libs/etl/include/etl/poly_span.h | 1044 + Chapter17/fsm/libs/etl/include/etl/pool.h | 315 + Chapter17/fsm/libs/etl/include/etl/power.h | 221 + .../fsm/libs/etl/include/etl/priority_queue.h | 552 + .../libs/etl/include/etl/private/addressof.h | 62 + .../etl/include/etl/private/bitset_legacy.h | 1544 + .../libs/etl/include/etl/private/bitset_new.h | 3958 + .../include/etl/private/choose_namespace.h | 86 + .../etl/private/comparator_is_transparent.h | 51 + .../include/etl/private/crc_implementation.h | 713 + .../etl/include/etl/private/crc_parameters.h | 129 + .../etl/include/etl/private/delegate_cpp03.h | 1177 + .../etl/include/etl/private/delegate_cpp11.h | 632 + .../private/diagnostic_array_bounds_push.h | 44 + .../private/diagnostic_cxx_20_compat_push.h | 44 + .../etl/private/diagnostic_deprecated_push.h | 44 + .../etl/private/diagnostic_float_equal_push.h | 44 + .../diagnostic_null_dereference_push.h | 44 + .../diagnostic_pessimizing_move_push.h | 44 + .../etl/include/etl/private/diagnostic_pop.h | 42 + .../diagnostic_self_assign_overloaded_push.h | 43 + .../diagnostic_stringop_overread_push.h | 43 + .../private/diagnostic_uninitialized_push.h | 45 + .../private/diagnostic_unused_function_push.h | 44 + .../private/diagnostic_useless_cast_push.h | 43 + .../etl/include/etl/private/dynamic_extent.h | 42 + .../etl/include/etl/private/ivectorpointer.h | 1045 + .../libs/etl/include/etl/private/minmax_pop.h | 55 + .../etl/include/etl/private/minmax_push.h | 59 + .../etl/include/etl/private/pvoidvector.h | 820 + .../include/etl/private/to_string_helper.h | 629 + .../etl/include/etl/private/variant_legacy.h | 1011 + .../include/etl/private/variant_variadic.h | 2103 + .../etl/include/etl/private/vector_base.h | 175 + .../etl/include/etl/profiles/arduino_arm.h | 48 + .../fsm/libs/etl/include/etl/profiles/armv5.h | 48 + .../etl/include/etl/profiles/armv5_no_stl.h | 49 + .../fsm/libs/etl/include/etl/profiles/armv6.h | 48 + .../etl/include/etl/profiles/armv6_no_stl.h | 49 + .../fsm/libs/etl/include/etl/profiles/armv7.h | 48 + .../etl/include/etl/profiles/armv7_no_stl.h | 49 + .../fsm/libs/etl/include/etl/profiles/auto.h | 34 + .../etl/include/etl/profiles/clang_generic.h | 41 + .../etl/profiles/clang_generic_no_stl.h | 41 + .../fsm/libs/etl/include/etl/profiles/cpp03.h | 48 + .../etl/include/etl/profiles/cpp03_no_stl.h | 49 + .../fsm/libs/etl/include/etl/profiles/cpp11.h | 48 + .../etl/include/etl/profiles/cpp11_no_stl.h | 49 + .../fsm/libs/etl/include/etl/profiles/cpp14.h | 48 + .../etl/include/etl/profiles/cpp14_no_stl.h | 49 + .../fsm/libs/etl/include/etl/profiles/cpp17.h | 48 + .../etl/include/etl/profiles/cpp17_no_stl.h | 49 + .../etl/profiles/determine_builtin_support.h | 113 + .../include/etl/profiles/determine_compiler.h | 210 + .../determine_compiler_language_support.h | 209 + .../etl/profiles/determine_compiler_version.h | 76 + .../etl/profiles/determine_development_os.h | 83 + .../etl/include/etl/profiles/gcc_generic.h | 41 + .../include/etl/profiles/gcc_generic_no_stl.h | 42 + .../etl/include/etl/profiles/gcc_linux_x86.h | 41 + .../etl/profiles/gcc_linux_x86_no_stl.h | 42 + .../include/etl/profiles/gcc_windows_x86.h | 41 + .../etl/profiles/gcc_windows_x86_no_stl.h | 42 + .../libs/etl/include/etl/profiles/msvc_x86.h | 41 + .../include/etl/profiles/msvc_x86_no_stl.h | 42 + .../include/etl/profiles/segger_gcc_stlport.h | 54 + .../fsm/libs/etl/include/etl/profiles/ticc.h | 47 + .../etl/include/etl/profiles/ticc_no_stl.h | 48 + .../etl/include/etl/pseudo_moving_average.h | 425 + Chapter17/fsm/libs/etl/include/etl/quantize.h | 87 + Chapter17/fsm/libs/etl/include/etl/queue.h | 682 + .../fsm/libs/etl/include/etl/queue_lockable.h | 862 + .../libs/etl/include/etl/queue_mpmc_mutex.h | 718 + .../libs/etl/include/etl/queue_spsc_atomic.h | 573 + .../fsm/libs/etl/include/etl/queue_spsc_isr.h | 841 + .../libs/etl/include/etl/queue_spsc_locked.h | 903 + Chapter17/fsm/libs/etl/include/etl/radix.h | 67 + Chapter17/fsm/libs/etl/include/etl/random.h | 594 + Chapter17/fsm/libs/etl/include/etl/ratio.h | 103 + .../include/etl/reference_counted_message.h | 230 + .../etl/reference_counted_message_pool.h | 322 + .../include/etl/reference_counted_object.h | 291 + .../libs/etl/include/etl/reference_flat_map.h | 1176 + .../etl/include/etl/reference_flat_multimap.h | 1069 + .../etl/include/etl/reference_flat_multiset.h | 1043 + .../libs/etl/include/etl/reference_flat_set.h | 1033 + Chapter17/fsm/libs/etl/include/etl/rescale.h | 83 + Chapter17/fsm/libs/etl/include/etl/result.h | 479 + Chapter17/fsm/libs/etl/include/etl/rms.h | 211 + .../libs/etl/include/etl/scaled_rounding.h | 355 + .../fsm/libs/etl/include/etl/scheduler.h | 406 + Chapter17/fsm/libs/etl/include/etl/set.h | 2779 + .../fsm/libs/etl/include/etl/shared_message.h | 226 + .../fsm/libs/etl/include/etl/singleton.h | 336 + Chapter17/fsm/libs/etl/include/etl/smallest.h | 402 + Chapter17/fsm/libs/etl/include/etl/span.h | 821 + Chapter17/fsm/libs/etl/include/etl/sqrt.h | 74 + Chapter17/fsm/libs/etl/include/etl/stack.h | 623 + .../libs/etl/include/etl/standard_deviation.h | 262 + .../fsm/libs/etl/include/etl/state_chart.h | 1119 + .../fsm/libs/etl/include/etl/static_assert.h | 52 + Chapter17/fsm/libs/etl/include/etl/string.h | 510 + .../fsm/libs/etl/include/etl/string_stream.h | 48 + .../libs/etl/include/etl/string_utilities.h | 851 + .../fsm/libs/etl/include/etl/string_view.h | 922 + .../fsm/libs/etl/include/etl/stringify.h | 20 + .../fsm/libs/etl/include/etl/successor.h | 195 + Chapter17/fsm/libs/etl/include/etl/task.h | 129 + .../fsm/libs/etl/include/etl/threshold.h | 79 + Chapter17/fsm/libs/etl/include/etl/timer.h | 121 + .../fsm/libs/etl/include/etl/to_arithmetic.h | 1041 + .../fsm/libs/etl/include/etl/to_string.h | 149 + .../fsm/libs/etl/include/etl/to_u16string.h | 150 + .../fsm/libs/etl/include/etl/to_u32string.h | 149 + .../fsm/libs/etl/include/etl/to_u8string.h | 150 + .../fsm/libs/etl/include/etl/to_wstring.h | 149 + Chapter17/fsm/libs/etl/include/etl/type_def.h | 296 + .../fsm/libs/etl/include/etl/type_lookup.h | 373 + .../fsm/libs/etl/include/etl/type_select.h | 633 + .../fsm/libs/etl/include/etl/type_traits.h | 2369 + .../fsm/libs/etl/include/etl/u16format_spec.h | 45 + .../fsm/libs/etl/include/etl/u16string.h | 490 + .../libs/etl/include/etl/u16string_stream.h | 48 + .../fsm/libs/etl/include/etl/u32format_spec.h | 45 + .../fsm/libs/etl/include/etl/u32string.h | 490 + .../libs/etl/include/etl/u32string_stream.h | 48 + .../fsm/libs/etl/include/etl/u8format_spec.h | 45 + Chapter17/fsm/libs/etl/include/etl/u8string.h | 514 + .../libs/etl/include/etl/u8string_stream.h | 48 + .../fsm/libs/etl/include/etl/unaligned_type.h | 865 + .../fsm/libs/etl/include/etl/unordered_map.h | 1756 + .../libs/etl/include/etl/unordered_multimap.h | 1624 + .../libs/etl/include/etl/unordered_multiset.h | 1601 + .../fsm/libs/etl/include/etl/unordered_set.h | 1618 + .../fsm/libs/etl/include/etl/user_type.h | 125 + Chapter17/fsm/libs/etl/include/etl/utility.h | 677 + Chapter17/fsm/libs/etl/include/etl/variance.h | 236 + Chapter17/fsm/libs/etl/include/etl/variant.h | 43 + .../fsm/libs/etl/include/etl/variant_pool.h | 470 + Chapter17/fsm/libs/etl/include/etl/vector.h | 1849 + Chapter17/fsm/libs/etl/include/etl/version.h | 79 + Chapter17/fsm/libs/etl/include/etl/visitor.h | 597 + .../fsm/libs/etl/include/etl/wformat_spec.h | 45 + Chapter17/fsm/libs/etl/include/etl/wstring.h | 490 + .../fsm/libs/etl/include/etl/wstring_stream.h | 48 + Chapter17/fsm/libs/etl/library.json | 38 + Chapter17/fsm/libs/etl/library.properties | 10 + Chapter17/fsm/libs/etl/meson.build | 27 + Chapter17/fsm/libs/etl/meson_options.txt | 1 + .../fsm/libs/etl/scripts/generator_test.bat | 1 + .../fsm/libs/etl/scripts/generator_test.py | 45 + .../fsm/libs/etl/scripts/update_release.bat | 1 + .../fsm/libs/etl/scripts/update_release.py | 237 + .../fsm/libs/etl/scripts/update_version.bat | 1 + .../fsm/libs/etl/scripts/update_version.py | 154 + .../libs/etl/subprojects/unittest-cpp.wrap | 9 + .../fsm/libs/etl/support/Class diagrams.docx | Bin 0 -> 26284 bytes .../etl/support/Flat map class diagram.odg | Bin 0 -> 15195 bytes .../etl/support/Flat_map_class_diagram.doc | 13 + .../libs/etl/support/List class diagram.odg | Bin 0 -> 17818 bytes .../libs/etl/support/List_class_diagram.doc | 17 + .../fsm/libs/etl/support/Release notes.txt | 2394 + Chapter17/fsm/libs/etl/support/hfsm.docx | Bin 0 -> 24750 bytes Chapter17/fsm/libs/etl/support/hfsm.png | Bin 0 -> 30754 bytes Chapter17/fsm/libs/etl/test/CMakeLists.txt | 455 + .../test/Deprecated/test_embedded_compile.cpp | 426 + .../libs/etl/test/Deprecated/test_factory.cpp | 355 + .../unordered_map/unordered_map.sln | 28 + .../unordered_map/unordered_map/ReadMe.txt | 40 + .../unordered_map/unordered_map/stdafx.cpp | 8 + .../unordered_map/unordered_map/stdafx.h | 15 + .../unordered_map/unordered_map/targetver.h | 8 + .../unordered_map/unordered_map.cpp | 82 + .../unordered_map/unordered_map.vcxproj | 164 + .../unordered_map.vcxproj.filters | 42 + .../etl/test/UnitTest++/AssertException.cpp | 15 + .../etl/test/UnitTest++/AssertException.h | 23 + .../libs/etl/test/UnitTest++/CMakeLists.txt | 51 + .../libs/etl/test/UnitTest++/CheckMacros.h | 410 + .../fsm/libs/etl/test/UnitTest++/Checks.cpp | 50 + .../fsm/libs/etl/test/UnitTest++/Checks.h | 389 + .../test/UnitTest++/CompositeTestReporter.cpp | 66 + .../test/UnitTest++/CompositeTestReporter.h | 34 + .../fsm/libs/etl/test/UnitTest++/Config.h | 84 + .../libs/etl/test/UnitTest++/CurrentTest.cpp | 18 + .../libs/etl/test/UnitTest++/CurrentTest.h | 19 + .../test/UnitTest++/DeferredTestReporter.cpp | 33 + .../test/UnitTest++/DeferredTestReporter.h | 35 + .../test/UnitTest++/DeferredTestResult.cpp | 43 + .../etl/test/UnitTest++/DeferredTestResult.h | 52 + .../etl/test/UnitTest++/ExceptionMacros.h | 20 + .../libs/etl/test/UnitTest++/ExecuteTest.h | 61 + .../libs/etl/test/UnitTest++/HelperMacros.h | 52 + .../etl/test/UnitTest++/MemoryOutStream.cpp | 218 + .../etl/test/UnitTest++/MemoryOutStream.h | 87 + .../UnitTest++/Posix/SignalTranslator.cpp | 46 + .../test/UnitTest++/Posix/SignalTranslator.h | 41 + .../etl/test/UnitTest++/Posix/TimeHelpers.cpp | 33 + .../etl/test/UnitTest++/Posix/TimeHelpers.h | 28 + .../libs/etl/test/UnitTest++/ReportAssert.cpp | 71 + .../libs/etl/test/UnitTest++/ReportAssert.h | 12 + .../etl/test/UnitTest++/ReportAssertImpl.h | 46 + .../libs/etl/test/UnitTest++/RequireMacros.h | 16 + .../UnitTest++/RequiredCheckException.cpp | 17 + .../test/UnitTest++/RequiredCheckException.h | 23 + .../UnitTest++/RequiredCheckTestReporter.cpp | 26 + .../UnitTest++/RequiredCheckTestReporter.h | 33 + .../fsm/libs/etl/test/UnitTest++/Test.cpp | 38 + Chapter17/fsm/libs/etl/test/UnitTest++/Test.h | 35 + .../libs/etl/test/UnitTest++/TestDetails.cpp | 22 + .../libs/etl/test/UnitTest++/TestDetails.h | 27 + .../fsm/libs/etl/test/UnitTest++/TestList.cpp | 38 + .../fsm/libs/etl/test/UnitTest++/TestList.h | 33 + .../fsm/libs/etl/test/UnitTest++/TestMacros.h | 126 + .../libs/etl/test/UnitTest++/TestReporter.cpp | 8 + .../libs/etl/test/UnitTest++/TestReporter.h | 22 + .../test/UnitTest++/TestReporterStdout.cpp | 44 + .../etl/test/UnitTest++/TestReporterStdout.h | 19 + .../libs/etl/test/UnitTest++/TestResults.cpp | 59 + .../libs/etl/test/UnitTest++/TestResults.h | 41 + .../libs/etl/test/UnitTest++/TestRunner.cpp | 82 + .../fsm/libs/etl/test/UnitTest++/TestRunner.h | 61 + .../fsm/libs/etl/test/UnitTest++/TestSuite.h | 12 + .../test/UnitTest++/ThrowingTestReporter.cpp | 61 + .../test/UnitTest++/ThrowingTestReporter.h | 26 + .../etl/test/UnitTest++/TimeConstraint.cpp | 29 + .../libs/etl/test/UnitTest++/TimeConstraint.h | 37 + .../libs/etl/test/UnitTest++/TimeHelpers.h | 7 + .../fsm/libs/etl/test/UnitTest++/UnitTest++.h | 1 + .../fsm/libs/etl/test/UnitTest++/UnitTestPP.h | 12 + .../etl/test/UnitTest++/Win32/TimeHelpers.cpp | 49 + .../etl/test/UnitTest++/Win32/TimeHelpers.h | 45 + .../etl/test/UnitTest++/XmlTestReporter.cpp | 130 + .../etl/test/UnitTest++/XmlTestReporter.h | 38 + Chapter17/fsm/libs/etl/test/data.h | 284 + .../exceptions/CMakeLists.txt | 120 + .../exceptions/etl_profile.h | 0 .../exceptions/test_error_handler.cpp | 223 + .../log_errors/CMakeLists.txt | 123 + .../log_errors/etl_profile.h | 0 .../log_errors/test_error_handler.cpp | 174 + .../log_errors_and_exceptions/CMakeLists.txt | 124 + .../log_errors_and_exceptions/etl_profile.h | 0 .../test_error_handler.cpp | 244 + .../test/etl_initializer_list/CMakeLists.txt | 121 + .../etl_initializer_list.sln | 31 + .../etl_initializer_list.vcxproj | 157 + .../test/etl_initializer_list/etl_profile.h | 0 .../test_initializer_list.cpp | 100 + Chapter17/fsm/libs/etl/test/etl_profile.h | 135 + .../libs/etl/test/iterators_for_unit_tests.h | 219 + .../fsm/libs/etl/test/list_header_files.bat | 14 + .../fsm/libs/etl/test/list_test_files.bat | 10 + .../fsm/libs/etl/test/list_test_files.ps1 | 1 + .../fsm/libs/etl/test/list_test_files.sh | 3 + Chapter17/fsm/libs/etl/test/main.cpp | 33 + .../fsm/libs/etl/test/maincpp03check.cpp | 169 + Chapter17/fsm/libs/etl/test/meson.build | 316 + Chapter17/fsm/libs/etl/test/murmurhash3.cpp | 343 + Chapter17/fsm/libs/etl/test/murmurhash3.h | 42 + .../fsm/libs/etl/test/run-syntax-checks.sh | 1108 + Chapter17/fsm/libs/etl/test/run-tests.sh | 558 + .../etl/test/syntax_check/absolute.h.t.cpp | 29 + .../etl/test/syntax_check/algorithm.h.t.cpp | 29 + .../etl/test/syntax_check/alignment.h.t.cpp | 29 + .../libs/etl/test/syntax_check/array.h.t.cpp | 29 + .../etl/test/syntax_check/array_view.h.t.cpp | 29 + .../test/syntax_check/array_wrapper.h.t.cpp | 29 + .../libs/etl/test/syntax_check/atomic.h.t.cpp | 29 + .../libs/etl/test/syntax_check/base64.h.t.cpp | 29 + .../test/syntax_check/base64_decoder.h.t.cpp | 29 + .../test/syntax_check/base64_encoder.h.t.cpp | 29 + .../syntax_check/basic_format_spec.h.t.cpp | 29 + .../test/syntax_check/basic_string.h.t.cpp | 29 + .../syntax_check/basic_string_stream.h.t.cpp | 29 + .../libs/etl/test/syntax_check/binary.h.t.cpp | 29 + .../bip_buffer_spsc_atomic.h.t.cpp | 29 + .../libs/etl/test/syntax_check/bit.h.t.cpp | 29 + .../etl/test/syntax_check/bit_stream.h.t.cpp | 29 + .../libs/etl/test/syntax_check/bitset.h.t.cpp | 29 + .../test/syntax_check/bitset_legacy.h.t.cpp | 29 + .../etl/test/syntax_check/bitset_new.h.t.cpp | 29 + .../test/syntax_check/bloom_filter.h.t.cpp | 29 + .../test/syntax_check/bresenham_line.h.t.cpp | 29 + .../syntax_check/buffer_descriptors.h.t.cpp | 29 + .../libs/etl/test/syntax_check/byte.h.t.cpp | 29 + .../etl/test/syntax_check/byte_stream.h.t.cpp | 29 + .../test/syntax_check/c++03/CMakeLists.txt | 314 + .../etl/test/syntax_check/c++03/etl_profile.h | 70 + .../test/syntax_check/c++11/CMakeLists.txt | 314 + .../etl/test/syntax_check/c++11/etl_profile.h | 70 + .../test/syntax_check/c++14/CMakeLists.txt | 314 + .../etl/test/syntax_check/c++14/etl_profile.h | 70 + .../test/syntax_check/c++17/CMakeLists.txt | 314 + .../etl/test/syntax_check/c++17/etl_profile.h | 69 + .../test/syntax_check/c++20/CMakeLists.txt | 314 + .../etl/test/syntax_check/c++20/etl_profile.h | 69 + .../etl/test/syntax_check/callback.h.t.cpp | 29 + .../syntax_check/callback_service.h.t.cpp | 29 + .../test/syntax_check/callback_timer.h.t.cpp | 29 + .../callback_timer_atomic.h.t.cpp | 29 + .../callback_timer_interrupt.h.t.cpp | 29 + .../callback_timer_locked.h.t.cpp | 29 + .../etl/test/syntax_check/char_traits.h.t.cpp | 29 + .../etl/test/syntax_check/checksum.h.t.cpp | 29 + .../test/syntax_check/circular_buffer.h.t.cpp | 29 + .../syntax_check/circular_iterator.h.t.cpp | 29 + .../test/syntax_check/combinations.h.t.cpp | 29 + .../etl/test/syntax_check/compare.h.t.cpp | 29 + .../etl/test/syntax_check/constant.h.t.cpp | 29 + .../etl/test/syntax_check/container.h.t.cpp | 29 + .../etl/test/syntax_check/correlation.h.t.cpp | 29 + .../etl/test/syntax_check/covariance.h.t.cpp | 29 + .../libs/etl/test/syntax_check/crc1.h.t.cpp | 29 + .../libs/etl/test/syntax_check/crc16.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_a.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_arc.h.t.cpp | 29 + .../test/syntax_check/crc16_aug_ccitt.h.t.cpp | 29 + .../test/syntax_check/crc16_buypass.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_ccitt.h.t.cpp | 29 + .../test/syntax_check/crc16_cdma2000.h.t.cpp | 29 + .../test/syntax_check/crc16_dds110.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_dectr.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_dectx.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_dnp.h.t.cpp | 29 + .../test/syntax_check/crc16_en13757.h.t.cpp | 29 + .../test/syntax_check/crc16_genibus.h.t.cpp | 29 + .../test/syntax_check/crc16_kermit.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_m17.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_maxim.h.t.cpp | 29 + .../test/syntax_check/crc16_mcrf4xx.h.t.cpp | 29 + .../test/syntax_check/crc16_modbus.h.t.cpp | 29 + .../test/syntax_check/crc16_profibus.h.t.cpp | 29 + .../test/syntax_check/crc16_riello.h.t.cpp | 29 + .../test/syntax_check/crc16_t10dif.h.t.cpp | 29 + .../test/syntax_check/crc16_teledisk.h.t.cpp | 29 + .../test/syntax_check/crc16_tms37157.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_usb.h.t.cpp | 29 + .../etl/test/syntax_check/crc16_x25.h.t.cpp | 29 + .../test/syntax_check/crc16_xmodem.h.t.cpp | 29 + .../libs/etl/test/syntax_check/crc32.h.t.cpp | 29 + .../etl/test/syntax_check/crc32_bzip2.h.t.cpp | 29 + .../etl/test/syntax_check/crc32_c.h.t.cpp | 29 + .../etl/test/syntax_check/crc32_d.h.t.cpp | 29 + .../test/syntax_check/crc32_jamcrc.h.t.cpp | 29 + .../etl/test/syntax_check/crc32_mpeg2.h.t.cpp | 29 + .../etl/test/syntax_check/crc32_posix.h.t.cpp | 29 + .../etl/test/syntax_check/crc32_q.h.t.cpp | 29 + .../etl/test/syntax_check/crc32_xfer.h.t.cpp | 29 + .../etl/test/syntax_check/crc64_ecma.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_ccitt.h.t.cpp | 29 + .../test/syntax_check/crc8_cdma2000.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_darc.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_dvbs2.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_ebu.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_icode.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_itu.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_j1850.h.t.cpp | 29 + .../test/syntax_check/crc8_j1850_zero.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_maxim.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_rohc.h.t.cpp | 29 + .../etl/test/syntax_check/crc8_wcdma.h.t.cpp | 29 + .../test/syntax_check/cyclic_value.h.t.cpp | 29 + .../etl/test/syntax_check/debounce.h.t.cpp | 29 + .../etl/test/syntax_check/debug_count.h.t.cpp | 29 + .../etl/test/syntax_check/delegate.h.t.cpp | 29 + .../test/syntax_check/delegate_cpp03.h.t.cpp | 29 + .../syntax_check/delegate_service.h.t.cpp | 29 + .../libs/etl/test/syntax_check/deque.h.t.cpp | 29 + .../etl/test/syntax_check/endianness.h.t.cpp | 29 + .../etl/test/syntax_check/enum_type.h.t.cpp | 29 + .../test/syntax_check/error_handler.h.t.cpp | 29 + .../etl/test/syntax_check/exception.h.t.cpp | 29 + .../etl/test/syntax_check/expected.h.t.cpp | 29 + .../etl/test/syntax_check/factorial.h.t.cpp | 29 + .../etl/test/syntax_check/fibonacci.h.t.cpp | 29 + .../syntax_check/file_error_numbers.h.t.cpp | 29 + .../test/syntax_check/fixed_iterator.h.t.cpp | 29 + ...fixed_sized_memory_block_allocator.h.t.cpp | 29 + .../libs/etl/test/syntax_check/flags.h.t.cpp | 29 + .../etl/test/syntax_check/flat_map.h.t.cpp | 29 + .../test/syntax_check/flat_multimap.h.t.cpp | 29 + .../test/syntax_check/flat_multiset.h.t.cpp | 29 + .../etl/test/syntax_check/flat_set.h.t.cpp | 29 + .../libs/etl/test/syntax_check/fnv_1.h.t.cpp | 29 + .../etl/test/syntax_check/format_spec.h.t.cpp | 29 + .../test/syntax_check/forward_list.h.t.cpp | 29 + .../syntax_check/frame_check_sequence.h.t.cpp | 29 + .../libs/etl/test/syntax_check/fsm.h.t.cpp | 29 + .../etl/test/syntax_check/function.h.t.cpp | 29 + .../etl/test/syntax_check/functional.h.t.cpp | 29 + .../libs/etl/test/syntax_check/gamma.h.t.cpp | 29 + .../libs/etl/test/syntax_check/gcd.h.t.cpp | 29 + .../test/syntax_check/generic_pool.h.t.cpp | 29 + .../libs/etl/test/syntax_check/hash.h.t.cpp | 29 + .../libs/etl/test/syntax_check/hfsm.h.t.cpp | 29 + .../etl/test/syntax_check/histogram.h.t.cpp | 29 + .../libs/etl/test/syntax_check/ihash.h.t.cpp | 29 + .../imemory_block_allocator.h.t.cpp | 29 + .../test/syntax_check/indirect_vector.h.t.cpp | 29 + .../syntax_check/initializer_list.h.t.cpp | 32 + .../test/syntax_check/instance_count.h.t.cpp | 29 + .../test/syntax_check/integral_limits.h.t.cpp | 29 + .../intrusive_forward_list.h.t.cpp | 29 + .../test/syntax_check/intrusive_links.h.t.cpp | 29 + .../test/syntax_check/intrusive_list.h.t.cpp | 29 + .../test/syntax_check/intrusive_queue.h.t.cpp | 29 + .../test/syntax_check/intrusive_stack.h.t.cpp | 29 + .../libs/etl/test/syntax_check/invert.h.t.cpp | 29 + .../etl/test/syntax_check/io_port.h.t.cpp | 29 + .../libs/etl/test/syntax_check/ipool.h.t.cpp | 29 + .../ireference_counted_message_pool.h.t.cpp | 29 + .../etl/test/syntax_check/iterator.h.t.cpp | 29 + .../etl/test/syntax_check/jenkins.h.t.cpp | 29 + .../etl/test/syntax_check/largest.h.t.cpp | 29 + .../libs/etl/test/syntax_check/lcm.h.t.cpp | 29 + .../etl/test/syntax_check/limiter.h.t.cpp | 29 + .../libs/etl/test/syntax_check/limits.h.t.cpp | 29 + .../libs/etl/test/syntax_check/list.h.t.cpp | 29 + .../libs/etl/test/syntax_check/log.h.t.cpp | 29 + .../libs/etl/test/syntax_check/macros.h.t.cpp | 29 + .../libs/etl/test/syntax_check/map.h.t.cpp | 29 + .../libs/etl/test/syntax_check/math.h.t.cpp | 29 + .../test/syntax_check/math_constants.h.t.cpp | 29 + .../libs/etl/test/syntax_check/mean.h.t.cpp | 29 + .../etl/test/syntax_check/mem_cast.h.t.cpp | 29 + .../libs/etl/test/syntax_check/memory.h.t.cpp | 29 + .../test/syntax_check/memory_model.h.t.cpp | 29 + .../etl/test/syntax_check/message.h.t.cpp | 29 + .../test/syntax_check/message_broker.h.t.cpp | 29 + .../etl/test/syntax_check/message_bus.h.t.cpp | 29 + .../test/syntax_check/message_packet.h.t.cpp | 29 + .../test/syntax_check/message_router.h.t.cpp | 29 + .../message_router_registry.h.t.cpp | 29 + .../test/syntax_check/message_timer.h.t.cpp | 29 + .../syntax_check/message_timer_atomic.h.t.cpp | 29 + .../message_timer_interrupt.h.t.cpp | 29 + .../syntax_check/message_timer_locked.h.t.cpp | 29 + .../test/syntax_check/message_types.h.t.cpp | 29 + .../etl/test/syntax_check/multi_array.h.t.cpp | 29 + .../etl/test/syntax_check/multi_range.h.t.cpp | 29 + .../etl/test/syntax_check/multi_span.h.t.cpp | 29 + .../test/syntax_check/multi_vector.h.t.cpp | 29 + .../etl/test/syntax_check/multimap.h.t.cpp | 29 + .../etl/test/syntax_check/multiset.h.t.cpp | 29 + .../etl/test/syntax_check/murmur3.h.t.cpp | 29 + .../libs/etl/test/syntax_check/mutex.h.t.cpp | 29 + .../etl/test/syntax_check/negative.h.t.cpp | 29 + .../etl/test/syntax_check/nth_type.h.t.cpp | 29 + .../etl/test/syntax_check/null_type.h.t.cpp | 29 + .../etl/test/syntax_check/nullptr.h.t.cpp | 29 + .../etl/test/syntax_check/numeric.h.t.cpp | 29 + .../etl/test/syntax_check/observer.h.t.cpp | 29 + .../etl/test/syntax_check/optional.h.t.cpp | 29 + .../etl/test/syntax_check/overload.h.t.cpp | 29 + .../libs/etl/test/syntax_check/packet.h.t.cpp | 29 + .../test/syntax_check/parameter_pack.h.t.cpp | 29 + .../test/syntax_check/parameter_type.h.t.cpp | 29 + .../etl/test/syntax_check/pearson.h.t.cpp | 29 + .../test/syntax_check/permutations.h.t.cpp | 29 + .../test/syntax_check/placement_new.h.t.cpp | 29 + .../etl/test/syntax_check/platform.h.t.cpp | 29 + .../etl/test/syntax_check/poly_span.h.t.cpp | 29 + .../libs/etl/test/syntax_check/pool.h.t.cpp | 29 + .../libs/etl/test/syntax_check/power.h.t.cpp | 29 + .../test/syntax_check/priority_queue.h.t.cpp | 29 + .../pseudo_moving_average.h.t.cpp | 29 + .../etl/test/syntax_check/quantize.h.t.cpp | 29 + .../libs/etl/test/syntax_check/queue.h.t.cpp | 29 + .../test/syntax_check/queue_lockable.h.t.cpp | 29 + .../syntax_check/queue_mpmc_mutex.h.t.cpp | 29 + .../syntax_check/queue_spsc_atomic.h.t.cpp | 29 + .../test/syntax_check/queue_spsc_isr.h.t.cpp | 29 + .../syntax_check/queue_spsc_locked.h.t.cpp | 29 + .../libs/etl/test/syntax_check/radix.h.t.cpp | 29 + .../libs/etl/test/syntax_check/random.h.t.cpp | 29 + .../libs/etl/test/syntax_check/ratio.h.t.cpp | 29 + .../reference_counted_message.h.t.cpp | 29 + .../reference_counted_message_pool.h.t.cpp | 29 + .../reference_counted_object.h.t.cpp | 29 + .../syntax_check/reference_flat_map.h.t.cpp | 29 + .../reference_flat_multimap.h.t.cpp | 29 + .../reference_flat_multiset.h.t.cpp | 29 + .../syntax_check/reference_flat_set.h.t.cpp | 29 + .../etl/test/syntax_check/rescale.h.t.cpp | 29 + .../libs/etl/test/syntax_check/result.h.t.cpp | 29 + .../libs/etl/test/syntax_check/rms.h.t.cpp | 29 + .../test/syntax_check/scaled_rounding.h.t.cpp | 29 + .../etl/test/syntax_check/scheduler.h.t.cpp | 29 + .../libs/etl/test/syntax_check/set.h.t.cpp | 29 + .../test/syntax_check/shared_message.h.t.cpp | 29 + .../etl/test/syntax_check/singleton.h.t.cpp | 29 + .../etl/test/syntax_check/smallest.h.t.cpp | 29 + .../libs/etl/test/syntax_check/span.h.t.cpp | 29 + .../libs/etl/test/syntax_check/sqrt.h.t.cpp | 29 + .../libs/etl/test/syntax_check/stack.h.t.cpp | 29 + .../syntax_check/standard_deviation.h.t.cpp | 29 + .../etl/test/syntax_check/state_chart.h.t.cpp | 29 + .../test/syntax_check/static_assert.h.t.cpp | 29 + .../libs/etl/test/syntax_check/string.h.t.cpp | 29 + .../test/syntax_check/string_stream.h.t.cpp | 29 + .../syntax_check/string_utilities.h.t.cpp | 29 + .../etl/test/syntax_check/string_view.h.t.cpp | 29 + .../etl/test/syntax_check/stringify.h.t.cpp | 29 + .../etl/test/syntax_check/successor.h.t.cpp | 29 + .../libs/etl/test/syntax_check/task.h.t.cpp | 29 + .../etl/test/syntax_check/threshold.h.t.cpp | 29 + .../libs/etl/test/syntax_check/timer.h.t.cpp | 29 + .../test/syntax_check/to_arithmetic.h.t.cpp | 28 + .../etl/test/syntax_check/to_string.h.t.cpp | 29 + .../test/syntax_check/to_u16string.h.t.cpp | 29 + .../test/syntax_check/to_u32string.h.t.cpp | 29 + .../etl/test/syntax_check/to_u8string.h.t.cpp | 29 + .../etl/test/syntax_check/to_wstring.h.t.cpp | 29 + .../etl/test/syntax_check/type_def.h.t.cpp | 29 + .../etl/test/syntax_check/type_lookup.h.t.cpp | 29 + .../etl/test/syntax_check/type_select.h.t.cpp | 29 + .../etl/test/syntax_check/type_traits.h.t.cpp | 29 + .../test/syntax_check/u16format_spec.h.t.cpp | 29 + .../etl/test/syntax_check/u16string.h.t.cpp | 29 + .../syntax_check/u16string_stream.h.t.cpp | 29 + .../test/syntax_check/u32format_spec.h.t.cpp | 29 + .../etl/test/syntax_check/u32string.h.t.cpp | 29 + .../syntax_check/u32string_stream.h.t.cpp | 29 + .../test/syntax_check/u8format_spec.h.t.cpp | 29 + .../etl/test/syntax_check/u8string.h.t.cpp | 29 + .../test/syntax_check/u8string_stream.h.t.cpp | 29 + .../test/syntax_check/unaligned_type.h.t.cpp | 29 + .../test/syntax_check/unordered_map.h.t.cpp | 29 + .../syntax_check/unordered_multimap.h.t.cpp | 29 + .../syntax_check/unordered_multiset.h.t.cpp | 29 + .../test/syntax_check/unordered_set.h.t.cpp | 29 + .../etl/test/syntax_check/user_type.h.t.cpp | 29 + .../etl/test/syntax_check/utility.h.t.cpp | 29 + .../etl/test/syntax_check/variance.h.t.cpp | 29 + .../etl/test/syntax_check/variant.h.t.cpp | 29 + .../test/syntax_check/variant_legacy.h.t.cpp | 29 + .../etl/test/syntax_check/variant_old.h.t.cpp | 29 + .../test/syntax_check/variant_pool.h.t.cpp | 29 + .../syntax_check/variant_variadic.h.t.cpp | 29 + .../libs/etl/test/syntax_check/vector.h.t.cpp | 29 + .../etl/test/syntax_check/version.h.t.cpp | 29 + .../etl/test/syntax_check/visitor.h.t.cpp | 29 + .../test/syntax_check/wformat_spec.h.t.cpp | 29 + .../etl/test/syntax_check/wstring.h.t.cpp | 29 + .../test/syntax_check/wstring_stream.h.t.cpp | 29 + Chapter17/fsm/libs/etl/test/test.sh | 179 + .../fsm/libs/etl/test/test_algorithm.cpp | 2424 + .../fsm/libs/etl/test/test_alignment.cpp | 159 + Chapter17/fsm/libs/etl/test/test_array.cpp | 893 + .../fsm/libs/etl/test/test_array_view.cpp | 771 + .../fsm/libs/etl/test/test_array_wrapper.cpp | 576 + Chapter17/fsm/libs/etl/test/test_atomic.cpp | 743 + .../etl/test/test_base64_RFC2152_decoder.cpp | 777 + .../etl/test/test_base64_RFC2152_encoder.cpp | 747 + .../etl/test/test_base64_RFC3501_decoder.cpp | 774 + .../etl/test/test_base64_RFC3501_encoder.cpp | 743 + ...64_RFC4648_URL_decoder_with_no_padding.cpp | 789 + ...ase64_RFC4648_URL_decoder_with_padding.cpp | 788 + ...64_RFC4648_URL_encoder_with_no_padding.cpp | 741 + ...ase64_RFC4648_URL_encoder_with_padding.cpp | 741 + ...base64_RFC4648_decoder_with_no_padding.cpp | 789 + ...st_base64_RFC4648_decoder_with_padding.cpp | 789 + ...base64_RFC4648_encoder_with_no_padding.cpp | 741 + ...st_base64_RFC4648_encoder_with_padding.cpp | 741 + Chapter17/fsm/libs/etl/test/test_binary.cpp | 3059 + .../etl/test/test_bip_buffer_spsc_atomic.cpp | 398 + Chapter17/fsm/libs/etl/test/test_bit.cpp | 1569 + .../fsm/libs/etl/test/test_bit_stream.cpp | 1078 + .../test_bit_stream_reader_big_endian.cpp | 1511 + .../test_bit_stream_reader_little_endian.cpp | 1199 + .../test_bit_stream_writer_big_endian.cpp | 800 + .../test_bit_stream_writer_little_endian.cpp | 887 + .../fsm/libs/etl/test/test_bitset_legacy.cpp | 1528 + .../etl/test/test_bitset_new_comparisons.cpp | 239 + .../test_bitset_new_default_element_type.cpp | 2726 + ...itset_new_explicit_single_element_type.cpp | 2819 + ...st_bitset_new_ext_default_element_type.cpp | 2475 + ...t_new_ext_explicit_single_element_type.cpp | 2623 + .../fsm/libs/etl/test/test_bloom_filter.cpp | 265 + .../fsm/libs/etl/test/test_bresenham_line.cpp | 440 + .../fsm/libs/etl/test/test_bsd_checksum.cpp | 169 + .../libs/etl/test/test_buffer_descriptors.cpp | 407 + Chapter17/fsm/libs/etl/test/test_byte.cpp | 236 + .../fsm/libs/etl/test/test_byte_stream.cpp | 1352 + .../libs/etl/test/test_callback_service.cpp | 333 + .../fsm/libs/etl/test/test_callback_timer.cpp | 898 + .../etl/test/test_callback_timer_atomic.cpp | 906 + .../test/test_callback_timer_interrupt.cpp | 949 + .../etl/test/test_callback_timer_locked.cpp | 1099 + .../fsm/libs/etl/test/test_char_traits.cpp | 746 + Chapter17/fsm/libs/etl/test/test_checksum.cpp | 186 + .../libs/etl/test/test_circular_buffer.cpp | 1068 + .../test_circular_buffer_external_buffer.cpp | 1066 + .../libs/etl/test/test_circular_iterator.cpp | 703 + Chapter17/fsm/libs/etl/test/test_compare.cpp | 195 + Chapter17/fsm/libs/etl/test/test_constant.cpp | 65 + .../fsm/libs/etl/test/test_container.cpp | 151 + .../fsm/libs/etl/test/test_correlation.cpp | 284 + .../fsm/libs/etl/test/test_covariance.cpp | 242 + Chapter17/fsm/libs/etl/test/test_crc1.cpp | 140 + Chapter17/fsm/libs/etl/test/test_crc16.cpp | 263 + Chapter17/fsm/libs/etl/test/test_crc16_a.cpp | 263 + .../fsm/libs/etl/test/test_crc16_arc.cpp | 263 + .../libs/etl/test/test_crc16_aug_ccitt.cpp | 263 + .../fsm/libs/etl/test/test_crc16_buypass.cpp | 263 + .../fsm/libs/etl/test/test_crc16_ccitt.cpp | 263 + .../fsm/libs/etl/test/test_crc16_cdma2000.cpp | 263 + .../fsm/libs/etl/test/test_crc16_dds110.cpp | 263 + .../fsm/libs/etl/test/test_crc16_dectr.cpp | 263 + .../fsm/libs/etl/test/test_crc16_dectx.cpp | 263 + .../fsm/libs/etl/test/test_crc16_dnp.cpp | 263 + .../fsm/libs/etl/test/test_crc16_en13757.cpp | 263 + .../fsm/libs/etl/test/test_crc16_genibus.cpp | 263 + .../fsm/libs/etl/test/test_crc16_kermit.cpp | 263 + .../fsm/libs/etl/test/test_crc16_m17.cpp | 263 + .../fsm/libs/etl/test/test_crc16_maxim.cpp | 263 + .../fsm/libs/etl/test/test_crc16_mcrf4xx.cpp | 263 + .../fsm/libs/etl/test/test_crc16_modbus.cpp | 263 + .../fsm/libs/etl/test/test_crc16_profibus.cpp | 263 + .../fsm/libs/etl/test/test_crc16_riello.cpp | 263 + .../fsm/libs/etl/test/test_crc16_t10dif.cpp | 263 + .../fsm/libs/etl/test/test_crc16_teledisk.cpp | 263 + .../fsm/libs/etl/test/test_crc16_tms37157.cpp | 263 + .../fsm/libs/etl/test/test_crc16_usb.cpp | 263 + .../fsm/libs/etl/test/test_crc16_x25.cpp | 263 + .../fsm/libs/etl/test/test_crc16_xmodem.cpp | 263 + Chapter17/fsm/libs/etl/test/test_crc32.cpp | 263 + .../fsm/libs/etl/test/test_crc32_bzip2.cpp | 263 + Chapter17/fsm/libs/etl/test/test_crc32_c.cpp | 263 + Chapter17/fsm/libs/etl/test/test_crc32_d.cpp | 263 + .../fsm/libs/etl/test/test_crc32_jamcrc.cpp | 263 + .../fsm/libs/etl/test/test_crc32_mpeg2.cpp | 263 + .../fsm/libs/etl/test/test_crc32_posix.cpp | 263 + Chapter17/fsm/libs/etl/test/test_crc32_q.cpp | 263 + .../fsm/libs/etl/test/test_crc32_xfer.cpp | 263 + .../fsm/libs/etl/test/test_crc64_ecma.cpp | 263 + .../fsm/libs/etl/test/test_crc8_ccitt.cpp | 263 + .../fsm/libs/etl/test/test_crc8_cdma2000.cpp | 263 + .../fsm/libs/etl/test/test_crc8_darc.cpp | 263 + .../fsm/libs/etl/test/test_crc8_dvbs2.cpp | 263 + Chapter17/fsm/libs/etl/test/test_crc8_ebu.cpp | 263 + .../fsm/libs/etl/test/test_crc8_icode.cpp | 263 + Chapter17/fsm/libs/etl/test/test_crc8_itu.cpp | 263 + .../fsm/libs/etl/test/test_crc8_j1850.cpp | 263 + .../libs/etl/test/test_crc8_j1850_zero.cpp | 263 + .../fsm/libs/etl/test/test_crc8_maxim.cpp | 263 + .../fsm/libs/etl/test/test_crc8_rohc.cpp | 263 + .../fsm/libs/etl/test/test_crc8_wcdma.cpp | 263 + .../fsm/libs/etl/test/test_cyclic_value.cpp | 496 + Chapter17/fsm/libs/etl/test/test_debounce.cpp | 879 + Chapter17/fsm/libs/etl/test/test_delegate.cpp | 1437 + .../fsm/libs/etl/test/test_delegate_cpp03.cpp | 924 + .../libs/etl/test/test_delegate_service.cpp | 337 + .../test_delegate_service_compile_time.cpp | 165 + .../etl/test/test_delegate_service_cpp03.cpp | 337 + Chapter17/fsm/libs/etl/test/test_deque.cpp | 2269 + Chapter17/fsm/libs/etl/test/test_endian.cpp | 49 + .../fsm/libs/etl/test/test_enum_type.cpp | 154 + .../fsm/libs/etl/test/test_error_handler.cpp | 192 + .../fsm/libs/etl/test/test_etl_traits.cpp | 104 + .../fsm/libs/etl/test/test_exception.cpp | 65 + Chapter17/fsm/libs/etl/test/test_expected.cpp | 763 + .../fsm/libs/etl/test/test_fixed_iterator.cpp | 232 + ...est_fixed_sized_memory_block_allocator.cpp | 289 + Chapter17/fsm/libs/etl/test/test_flags.cpp | 614 + Chapter17/fsm/libs/etl/test/test_flat_map.cpp | 1559 + .../fsm/libs/etl/test/test_flat_multimap.cpp | 1368 + .../fsm/libs/etl/test/test_flat_multiset.cpp | 1360 + Chapter17/fsm/libs/etl/test/test_flat_set.cpp | 1320 + Chapter17/fsm/libs/etl/test/test_fnv_1.cpp | 323 + .../fsm/libs/etl/test/test_format_spec.cpp | 123 + .../fsm/libs/etl/test/test_forward_list.cpp | 1424 + .../test/test_forward_list_shared_pool.cpp | 1930 + Chapter17/fsm/libs/etl/test/test_fsm.cpp | 684 + Chapter17/fsm/libs/etl/test/test_function.cpp | 510 + .../fsm/libs/etl/test/test_functional.cpp | 383 + Chapter17/fsm/libs/etl/test/test_gamma.cpp | 125 + Chapter17/fsm/libs/etl/test/test_hash.cpp | 314 + Chapter17/fsm/libs/etl/test/test_hfsm.cpp | 990 + ...t_hfsm_recurse_to_inner_state_on_start.cpp | 260 + .../fsm/libs/etl/test/test_histogram.cpp | 380 + .../libs/etl/test/test_indirect_vector.cpp | 1557 + .../test_indirect_vector_external_buffer.cpp | 1704 + .../fsm/libs/etl/test/test_instance_count.cpp | 110 + .../libs/etl/test/test_integral_limits.cpp | 105 + .../etl/test/test_intrusive_forward_list.cpp | 1170 + .../libs/etl/test/test_intrusive_links.cpp | 1398 + .../fsm/libs/etl/test/test_intrusive_list.cpp | 1416 + .../libs/etl/test/test_intrusive_queue.cpp | 442 + .../libs/etl/test/test_intrusive_stack.cpp | 332 + Chapter17/fsm/libs/etl/test/test_invert.cpp | 134 + Chapter17/fsm/libs/etl/test/test_io_port.cpp | 527 + Chapter17/fsm/libs/etl/test/test_iterator.cpp | 584 + Chapter17/fsm/libs/etl/test/test_jenkins.cpp | 160 + Chapter17/fsm/libs/etl/test/test_largest.cpp | 255 + Chapter17/fsm/libs/etl/test/test_limiter.cpp | 102 + Chapter17/fsm/libs/etl/test/test_limits.cpp | 704 + Chapter17/fsm/libs/etl/test/test_list.cpp | 2237 + .../libs/etl/test/test_list_shared_pool.cpp | 2228 + Chapter17/fsm/libs/etl/test/test_macros.cpp | 61 + .../fsm/libs/etl/test/test_make_string.cpp | 188 + Chapter17/fsm/libs/etl/test/test_map.cpp | 1637 + Chapter17/fsm/libs/etl/test/test_math.cpp | 134 + .../fsm/libs/etl/test/test_math_functions.cpp | 539 + Chapter17/fsm/libs/etl/test/test_mean.cpp | 116 + Chapter17/fsm/libs/etl/test/test_mem_cast.cpp | 299 + .../fsm/libs/etl/test/test_mem_cast_ptr.cpp | 351 + Chapter17/fsm/libs/etl/test/test_memory.cpp | 1531 + Chapter17/fsm/libs/etl/test/test_message.cpp | 132 + .../fsm/libs/etl/test/test_message_broker.cpp | 562 + .../fsm/libs/etl/test/test_message_bus.cpp | 1011 + .../fsm/libs/etl/test/test_message_packet.cpp | 485 + .../fsm/libs/etl/test/test_message_router.cpp | 645 + .../etl/test/test_message_router_registry.cpp | 396 + .../fsm/libs/etl/test/test_message_timer.cpp | 769 + .../etl/test/test_message_timer_atomic.cpp | 769 + .../etl/test/test_message_timer_interrupt.cpp | 852 + .../etl/test/test_message_timer_locked.cpp | 908 + .../fsm/libs/etl/test/test_multi_array.cpp | 492 + .../fsm/libs/etl/test/test_multi_range.cpp | 435 + .../fsm/libs/etl/test/test_multi_span.cpp | 209 + .../fsm/libs/etl/test/test_multi_vector.cpp | 578 + Chapter17/fsm/libs/etl/test/test_multimap.cpp | 1695 + Chapter17/fsm/libs/etl/test/test_multiset.cpp | 1677 + Chapter17/fsm/libs/etl/test/test_murmur3.cpp | 127 + Chapter17/fsm/libs/etl/test/test_nth_type.cpp | 46 + Chapter17/fsm/libs/etl/test/test_numeric.cpp | 208 + Chapter17/fsm/libs/etl/test/test_observer.cpp | 576 + Chapter17/fsm/libs/etl/test/test_optional.cpp | 902 + Chapter17/fsm/libs/etl/test/test_overload.cpp | 168 + Chapter17/fsm/libs/etl/test/test_packet.cpp | 214 + .../fsm/libs/etl/test/test_parameter_pack.cpp | 91 + .../fsm/libs/etl/test/test_parameter_type.cpp | 90 + .../libs/etl/test/test_parity_checksum.cpp | 147 + Chapter17/fsm/libs/etl/test/test_pearson.cpp | 170 + .../test/test_poly_span_dynamic_extent.cpp | 550 + .../etl/test/test_poly_span_fixed_extent.cpp | 569 + Chapter17/fsm/libs/etl/test/test_pool.cpp | 479 + .../etl/test/test_pool_external_buffer.cpp | 527 + .../fsm/libs/etl/test/test_priority_queue.cpp | 654 + .../etl/test/test_pseudo_moving_average.cpp | 348 + Chapter17/fsm/libs/etl/test/test_quantize.cpp | 123 + Chapter17/fsm/libs/etl/test/test_queue.cpp | 573 + .../fsm/libs/etl/test/test_queue_lockable.cpp | 758 + .../etl/test/test_queue_lockable_small.cpp | 761 + .../test/test_queue_memory_model_small.cpp | 554 + .../libs/etl/test/test_queue_mpmc_mutex.cpp | 556 + .../etl/test/test_queue_mpmc_mutex_small.cpp | 581 + .../libs/etl/test/test_queue_spsc_atomic.cpp | 462 + .../etl/test/test_queue_spsc_atomic_small.cpp | 480 + .../fsm/libs/etl/test/test_queue_spsc_isr.cpp | 716 + .../etl/test/test_queue_spsc_isr_small.cpp | 734 + .../libs/etl/test/test_queue_spsc_locked.cpp | 724 + .../etl/test/test_queue_spsc_locked_small.cpp | 741 + Chapter17/fsm/libs/etl/test/test_random.cpp | 416 + .../libs/etl/test/test_reference_flat_map.cpp | 980 + .../etl/test/test_reference_flat_multimap.cpp | 922 + .../etl/test/test_reference_flat_multiset.cpp | 841 + .../libs/etl/test/test_reference_flat_set.cpp | 840 + Chapter17/fsm/libs/etl/test/test_rescale.cpp | 97 + Chapter17/fsm/libs/etl/test/test_result.cpp | 374 + Chapter17/fsm/libs/etl/test/test_rms.cpp | 70 + .../libs/etl/test/test_scaled_rounding.cpp | 345 + Chapter17/fsm/libs/etl/test/test_set.cpp | 1509 + .../fsm/libs/etl/test/test_shared_message.cpp | 387 + .../fsm/libs/etl/test/test_singleton.cpp | 103 + Chapter17/fsm/libs/etl/test/test_smallest.cpp | 460 + .../etl/test/test_span_dynamic_extent.cpp | 1210 + .../libs/etl/test/test_span_fixed_extent.cpp | 1128 + Chapter17/fsm/libs/etl/test/test_stack.cpp | 555 + .../libs/etl/test/test_standard_deviation.cpp | 164 + .../fsm/libs/etl/test/test_state_chart.cpp | 603 + .../test/test_state_chart_compile_time.cpp | 612 + ...chart_compile_time_with_data_parameter.cpp | 508 + .../test_state_chart_with_data_parameter.cpp | 499 + ...state_chart_with_rvalue_data_parameter.cpp | 515 + .../fsm/libs/etl/test/test_string_char.cpp | 4453 + .../test/test_string_char_external_buffer.cpp | 4794 + .../fsm/libs/etl/test/test_string_stream.cpp | 331 + .../libs/etl/test/test_string_stream_u16.cpp | 291 + .../libs/etl/test/test_string_stream_u32.cpp | 291 + .../libs/etl/test/test_string_stream_u8.cpp | 295 + .../etl/test/test_string_stream_wchar_t.cpp | 292 + .../fsm/libs/etl/test/test_string_u16.cpp | 4468 + .../test/test_string_u16_external_buffer.cpp | 4854 + .../fsm/libs/etl/test/test_string_u32.cpp | 4468 + .../test/test_string_u32_external_buffer.cpp | 4825 + .../fsm/libs/etl/test/test_string_u8.cpp | 4473 + .../test/test_string_u8_external_buffer.cpp | 4859 + .../libs/etl/test/test_string_utilities.cpp | 1664 + .../etl/test/test_string_utilities_std.cpp | 1620 + .../test/test_string_utilities_std_u16.cpp | 1595 + .../test/test_string_utilities_std_u32.cpp | 1593 + .../etl/test/test_string_utilities_std_u8.cpp | 1595 + .../test_string_utilities_std_wchar_t.cpp | 1593 + .../etl/test/test_string_utilities_u16.cpp | 1636 + .../etl/test/test_string_utilities_u32.cpp | 1636 + .../etl/test/test_string_utilities_u8.cpp | 1641 + .../test/test_string_utilities_wchar_t.cpp | 1636 + .../fsm/libs/etl/test/test_string_view.cpp | 1084 + .../fsm/libs/etl/test/test_string_wchar_t.cpp | 4468 + .../test_string_wchar_t_external_buffer.cpp | 4825 + .../fsm/libs/etl/test/test_successor.cpp | 515 + .../fsm/libs/etl/test/test_task_scheduler.cpp | 291 + .../fsm/libs/etl/test/test_threshold.cpp | 137 + .../fsm/libs/etl/test/test_to_arithmetic.cpp | 1045 + .../libs/etl/test/test_to_arithmetic_u16.cpp | 1021 + .../libs/etl/test/test_to_arithmetic_u32.cpp | 1021 + .../libs/etl/test/test_to_arithmetic_u8.cpp | 1025 + .../etl/test/test_to_arithmetic_wchar_t.cpp | 1021 + .../fsm/libs/etl/test/test_to_string.cpp | 667 + .../fsm/libs/etl/test/test_to_u16string.cpp | 570 + .../fsm/libs/etl/test/test_to_u32string.cpp | 575 + .../fsm/libs/etl/test/test_to_u8string.cpp | 573 + .../fsm/libs/etl/test/test_to_wstring.cpp | 637 + Chapter17/fsm/libs/etl/test/test_type_def.cpp | 263 + .../fsm/libs/etl/test/test_type_lookup.cpp | 431 + .../fsm/libs/etl/test/test_type_select.cpp | 186 + .../fsm/libs/etl/test/test_type_traits.cpp | 1382 + .../fsm/libs/etl/test/test_unaligned_type.cpp | 987 + .../test/test_unaligned_type_constexpr.cpp | 650 + .../fsm/libs/etl/test/test_unordered_map.cpp | 1211 + .../libs/etl/test/test_unordered_multimap.cpp | 1072 + .../libs/etl/test/test_unordered_multiset.cpp | 947 + .../fsm/libs/etl/test/test_unordered_set.cpp | 913 + .../fsm/libs/etl/test/test_user_type.cpp | 224 + Chapter17/fsm/libs/etl/test/test_utility.cpp | 670 + Chapter17/fsm/libs/etl/test/test_variance.cpp | 146 + .../fsm/libs/etl/test/test_variant_legacy.cpp | 939 + .../fsm/libs/etl/test/test_variant_pool.cpp | 314 + .../test_variant_pool_external_buffer.cpp | 329 + .../libs/etl/test/test_variant_variadic.cpp | 2146 + Chapter17/fsm/libs/etl/test/test_vector.cpp | 1531 + .../etl/test/test_vector_external_buffer.cpp | 1262 + .../libs/etl/test/test_vector_non_trivial.cpp | 1325 + .../fsm/libs/etl/test/test_vector_pointer.cpp | 2024 + .../test_vector_pointer_external_buffer.cpp | 1877 + Chapter17/fsm/libs/etl/test/test_visitor.cpp | 751 + .../fsm/libs/etl/test/test_xor_checksum.cpp | 149 + .../etl/test/test_xor_rotate_checksum.cpp | 149 + .../fsm/libs/etl/test/unit_test_framework.h | 34 + Chapter17/fsm/libs/etl/test/vs2019/.gitignore | 7 + .../libs/etl/test/vs2019/NatvisFile.natvis | 3 + Chapter17/fsm/libs/etl/test/vs2019/cpp.hint | 53 + Chapter17/fsm/libs/etl/test/vs2019/etl.sln | 157 + .../fsm/libs/etl/test/vs2019/etl.vcxproj | 13584 + .../libs/etl/test/vs2019/etl.vcxproj.filters | 3599 + .../etl_initialiser_list.vcxproj | 149 + .../etl_initialiser_list.vcxproj.filters | 22 + Chapter17/fsm/libs/etl/test/vs2022/.gitignore | 7 + Chapter17/fsm/libs/etl/test/vs2022/cpp.hint | 40 + Chapter17/fsm/libs/etl/test/vs2022/etl.sln | 91 + .../fsm/libs/etl/test/vs2022/etl.vcxproj | 9257 + .../libs/etl/test/vs2022/etl.vcxproj.filters | 3617 + .../etl_initialiser_list.vcxproj | 149 + .../etl_initialiser_list.vcxproj.filters | 22 + .../fsm/libs/etl/test/vs2022/io_port.natvis | 62 + Chapter17/fsm/libs/etl/test/words.txt | 291419 +++++++++++++++ Chapter17/fsm/libs/etl/todo.txt | 7 + Chapter17/fsm/libs/etl/uml/FSM example.png | 0 Chapter17/fsm/libs/etl/uml/Framework.png | 0 .../fsm/libs/etl/uml/MessageFramework.png | 0 .../fsm/libs/etl/uml/source/FSM example.zargo | 0 .../etl/uml/source/Message Framework.zargo | 0 Chapter17/fsm/libs/etl/version.txt | 1 + .../Device/ST/STM32F0xx/Include/stm32f030x6.h | 5368 + .../Device/ST/STM32F0xx/Include/stm32f030x8.h | 5435 + .../Device/ST/STM32F0xx/Include/stm32f030xc.h | 5814 + .../Device/ST/STM32F0xx/Include/stm32f031x6.h | 5694 + .../Device/ST/STM32F0xx/Include/stm32f038xx.h | 5659 + .../Device/ST/STM32F0xx/Include/stm32f042x6.h | 10677 + .../Device/ST/STM32F0xx/Include/stm32f048xx.h | 10641 + .../Device/ST/STM32F0xx/Include/stm32f051x8.h | 6776 + .../Device/ST/STM32F0xx/Include/stm32f058xx.h | 6741 + .../Device/ST/STM32F0xx/Include/stm32f070x6.h | 5620 + .../Device/ST/STM32F0xx/Include/stm32f070xb.h | 5806 + .../Device/ST/STM32F0xx/Include/stm32f071xb.h | 7374 + .../Device/ST/STM32F0xx/Include/stm32f072xb.h | 11307 + .../Device/ST/STM32F0xx/Include/stm32f078xx.h | 11277 + .../Device/ST/STM32F0xx/Include/stm32f091xc.h | 11858 + .../Device/ST/STM32F0xx/Include/stm32f098xx.h | 11825 + .../Device/ST/STM32F0xx/Include/stm32f0xx.h | 275 + .../ST/STM32F0xx/Include/system_stm32f0xx.h | 105 + .../CMSIS/Device/ST/STM32F0xx/License.md | 83 + .../fsm/platform/CMSIS/Include/cmsis_armcc.h | 865 + .../platform/CMSIS/Include/cmsis_armclang.h | 1869 + .../platform/CMSIS/Include/cmsis_compiler.h | 266 + .../fsm/platform/CMSIS/Include/cmsis_gcc.h | 2085 + .../fsm/platform/CMSIS/Include/cmsis_iccarm.h | 935 + .../platform/CMSIS/Include/cmsis_version.h | 39 + .../platform/CMSIS/Include/core_armv8mbl.h | 1918 + .../platform/CMSIS/Include/core_armv8mml.h | 2927 + .../fsm/platform/CMSIS/Include/core_cm0.h | 949 + .../fsm/platform/CMSIS/Include/core_cm0plus.h | 1083 + .../fsm/platform/CMSIS/Include/core_cm1.h | 976 + .../fsm/platform/CMSIS/Include/core_cm23.h | 1993 + .../fsm/platform/CMSIS/Include/core_cm3.h | 1941 + .../fsm/platform/CMSIS/Include/core_cm33.h | 3002 + .../fsm/platform/CMSIS/Include/core_cm4.h | 2129 + .../fsm/platform/CMSIS/Include/core_cm7.h | 2671 + .../fsm/platform/CMSIS/Include/core_sc000.h | 1022 + .../fsm/platform/CMSIS/Include/core_sc300.h | 1915 + .../fsm/platform/CMSIS/Include/mpu_armv7.h | 270 + .../fsm/platform/CMSIS/Include/mpu_armv8.h | 333 + .../fsm/platform/CMSIS/Include/tz_context.h | 70 + Chapter17/fsm/platform/CMSIS/LICENSE.txt | 201 + Chapter17/fsm/platform/STM32F072C8Tx_FLASH.ld | 189 + .../Inc/Legacy/stm32_hal_legacy.h | 3850 + .../Inc/Legacy/stm32f0xx_hal_can_legacy.h | 794 + .../Inc/stm32_assert_template.h | 57 + .../STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h | 585 + .../Inc/stm32f0xx_hal_adc.h | 1019 + .../Inc/stm32f0xx_hal_adc_ex.h | 299 + .../Inc/stm32f0xx_hal_can.h | 842 + .../Inc/stm32f0xx_hal_cec.h | 794 + .../Inc/stm32f0xx_hal_comp.h | 700 + .../Inc/stm32f0xx_hal_conf_template.h | 326 + .../Inc/stm32f0xx_hal_cortex.h | 133 + .../Inc/stm32f0xx_hal_crc.h | 359 + .../Inc/stm32f0xx_hal_crc_ex.h | 153 + .../Inc/stm32f0xx_hal_dac.h | 429 + .../Inc/stm32f0xx_hal_dac_ex.h | 292 + .../Inc/stm32f0xx_hal_def.h | 178 + .../Inc/stm32f0xx_hal_dma.h | 563 + .../Inc/stm32f0xx_hal_dma_ex.h | 811 + .../Inc/stm32f0xx_hal_exti.h | 375 + .../Inc/stm32f0xx_hal_flash.h | 353 + .../Inc/stm32f0xx_hal_flash_ex.h | 448 + .../Inc/stm32f0xx_hal_gpio.h | 322 + .../Inc/stm32f0xx_hal_gpio_ex.h | 800 + .../Inc/stm32f0xx_hal_i2c.h | 838 + .../Inc/stm32f0xx_hal_i2c_ex.h | 193 + .../Inc/stm32f0xx_hal_i2s.h | 546 + .../Inc/stm32f0xx_hal_irda.h | 856 + .../Inc/stm32f0xx_hal_irda_ex.h | 399 + .../Inc/stm32f0xx_hal_iwdg.h | 240 + .../Inc/stm32f0xx_hal_pcd.h | 1004 + .../Inc/stm32f0xx_hal_pcd_ex.h | 91 + .../Inc/stm32f0xx_hal_pwr.h | 189 + .../Inc/stm32f0xx_hal_pwr_ex.h | 459 + .../Inc/stm32f0xx_hal_rcc.h | 1686 + .../Inc/stm32f0xx_hal_rcc_ex.h | 2085 + .../Inc/stm32f0xx_hal_rtc.h | 854 + .../Inc/stm32f0xx_hal_rtc_ex.h | 1048 + .../Inc/stm32f0xx_hal_smartcard.h | 1058 + .../Inc/stm32f0xx_hal_smartcard_ex.h | 568 + .../Inc/stm32f0xx_hal_smbus.h | 789 + .../Inc/stm32f0xx_hal_spi.h | 852 + .../Inc/stm32f0xx_hal_spi_ex.h | 75 + .../Inc/stm32f0xx_hal_tim.h | 2131 + .../Inc/stm32f0xx_hal_tim_ex.h | 268 + .../Inc/stm32f0xx_hal_tsc.h | 800 + .../Inc/stm32f0xx_hal_uart.h | 1633 + .../Inc/stm32f0xx_hal_uart_ex.h | 592 + .../Inc/stm32f0xx_hal_usart.h | 795 + .../Inc/stm32f0xx_hal_usart_ex.h | 520 + .../Inc/stm32f0xx_hal_wwdg.h | 301 + .../Inc/stm32f0xx_ll_adc.h | 3411 + .../Inc/stm32f0xx_ll_bus.h | 845 + .../Inc/stm32f0xx_ll_comp.h | 831 + .../Inc/stm32f0xx_ll_cortex.h | 320 + .../Inc/stm32f0xx_ll_crc.h | 474 + .../Inc/stm32f0xx_ll_crs.h | 783 + .../Inc/stm32f0xx_ll_dac.h | 1422 + .../Inc/stm32f0xx_ll_dma.h | 2236 + .../Inc/stm32f0xx_ll_exti.h | 1016 + .../Inc/stm32f0xx_ll_gpio.h | 940 + .../Inc/stm32f0xx_ll_i2c.h | 2277 + .../Inc/stm32f0xx_ll_iwdg.h | 341 + .../Inc/stm32f0xx_ll_pwr.h | 552 + .../Inc/stm32f0xx_ll_rcc.h | 2261 + .../Inc/stm32f0xx_ll_rtc.h | 3169 + .../Inc/stm32f0xx_ll_spi.h | 2286 + .../Inc/stm32f0xx_ll_system.h | 1852 + .../Inc/stm32f0xx_ll_tim.h | 4015 + .../Inc/stm32f0xx_ll_usart.h | 3840 + .../Inc/stm32f0xx_ll_utils.h | 274 + .../Inc/stm32f0xx_ll_wwdg.h | 319 + .../platform/STM32F0xx_HAL_Driver/License.md | 3 + .../STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c | 514 + .../Src/stm32f0xx_hal_adc.c | 2497 + .../Src/stm32f0xx_hal_adc_ex.c | 192 + .../Src/stm32f0xx_hal_can.c | 2432 + .../Src/stm32f0xx_hal_cec.c | 997 + .../Src/stm32f0xx_hal_comp.c | 984 + .../Src/stm32f0xx_hal_cortex.c | 341 + .../Src/stm32f0xx_hal_crc.c | 520 + .../Src/stm32f0xx_hal_crc_ex.c | 227 + .../Src/stm32f0xx_hal_dac.c | 1090 + .../Src/stm32f0xx_hal_dac_ex.c | 1183 + .../Src/stm32f0xx_hal_dma.c | 901 + .../Src/stm32f0xx_hal_exti.c | 549 + .../Src/stm32f0xx_hal_flash.c | 694 + .../Src/stm32f0xx_hal_flash_ex.c | 984 + .../Src/stm32f0xx_hal_gpio.c | 540 + .../Src/stm32f0xx_hal_i2c.c | 6794 + .../Src/stm32f0xx_hal_i2c_ex.c | 365 + .../Src/stm32f0xx_hal_i2s.c | 1800 + .../Src/stm32f0xx_hal_irda.c | 2998 + .../Src/stm32f0xx_hal_iwdg.c | 285 + .../Src/stm32f0xx_hal_msp_template.c | 101 + .../Src/stm32f0xx_hal_pcd.c | 2184 + .../Src/stm32f0xx_hal_pcd_ex.c | 336 + .../Src/stm32f0xx_hal_pwr.c | 454 + .../Src/stm32f0xx_hal_pwr_ex.c | 274 + .../Src/stm32f0xx_hal_rcc.c | 1365 + .../Src/stm32f0xx_hal_rcc_ex.c | 964 + .../Src/stm32f0xx_hal_rtc.c | 1733 + .../Src/stm32f0xx_hal_rtc_ex.c | 1600 + .../Src/stm32f0xx_hal_smartcard.c | 2933 + .../Src/stm32f0xx_hal_smartcard_ex.c | 198 + .../Src/stm32f0xx_hal_smbus.c | 2750 + .../Src/stm32f0xx_hal_spi.c | 4404 + .../Src/stm32f0xx_hal_spi_ex.c | 115 + .../Src/stm32f0xx_hal_tim.c | 7635 + .../Src/stm32f0xx_hal_tim_ex.c | 2390 + ...tm32f0xx_hal_timebase_rtc_alarm_template.c | 318 + ...m32f0xx_hal_timebase_rtc_wakeup_template.c | 295 + .../Src/stm32f0xx_hal_timebase_tim_template.c | 179 + .../Src/stm32f0xx_hal_tsc.c | 1080 + .../Src/stm32f0xx_hal_uart.c | 4128 + .../Src/stm32f0xx_hal_uart_ex.c | 816 + .../Src/stm32f0xx_hal_usart.c | 3265 + .../Src/stm32f0xx_hal_usart_ex.c | 138 + .../Src/stm32f0xx_hal_wwdg.c | 422 + .../Src/stm32f0xx_ll_adc.c | 562 + .../Src/stm32f0xx_ll_comp.c | 316 + .../Src/stm32f0xx_ll_crc.c | 122 + .../Src/stm32f0xx_ll_crs.c | 87 + .../Src/stm32f0xx_ll_dac.c | 276 + .../Src/stm32f0xx_ll_dma.c | 397 + .../Src/stm32f0xx_ll_exti.c | 223 + .../Src/stm32f0xx_ll_gpio.c | 277 + .../Src/stm32f0xx_ll_i2c.c | 229 + .../Src/stm32f0xx_ll_pwr.c | 86 + .../Src/stm32f0xx_ll_rcc.c | 609 + .../Src/stm32f0xx_ll_rtc.c | 714 + .../Src/stm32f0xx_ll_spi.c | 537 + .../Src/stm32f0xx_ll_tim.c | 1170 + .../Src/stm32f0xx_ll_usart.c | 504 + .../Src/stm32f0xx_ll_utils.c | 622 + .../fsm/platform/inc/stm32f0xx_hal_conf.h | 322 + Chapter17/fsm/platform/inc/stm32f0xx_it.h | 74 + .../fsm/platform/src/stm32f0xx_hal_msp.c | 89 + Chapter17/fsm/platform/src/stm32f0xx_it.c | 133 + Chapter17/fsm/platform/src/system_stm32f0xx.c | 305 + Chapter17/fsm/platform/startup_stm32f072xb.s | 294 + Chapter17/fsm/renode_scripts/stm32f0.repl | 222 + Chapter17/fsm/renode_scripts/stm32f072.repl | 10 + Chapter17/fsm/renode_scripts/stm32f072.resc | 23 + .../fsm/renode_scripts/stm32f072_debug.resc | 23 + Chapter17/fsm/util/inc/signal.hpp | 102 + Chapter17/fsm/util/inc/units.hpp | 33 + Chapter17/fsm/util/src/units.cpp | 11 + 1391 files changed, 1058470 insertions(+) create mode 100644 Chapter17/fsm/.clang-format create mode 100644 Chapter17/fsm/.clang-tidy create mode 100644 Chapter17/fsm/CMakeLists.txt create mode 100644 Chapter17/fsm/app/src/main_fsm_simple.cpp create mode 100644 Chapter17/fsm/cstdlib_support/retarget.cpp create mode 100644 Chapter17/fsm/cstdlib_support/retarget.hpp create mode 100644 Chapter17/fsm/hal/adc/inc/adc.hpp create mode 100644 Chapter17/fsm/hal/adc/inc/adc_stm32.hpp create mode 100644 Chapter17/fsm/hal/adc/src/adc_stm32.cpp create mode 100644 Chapter17/fsm/hal/gpio/inc/gpio.hpp create mode 100644 Chapter17/fsm/hal/gpio/inc/gpio_interrupt_manager.hpp create mode 100644 Chapter17/fsm/hal/gpio/inc/gpio_stm32.hpp create mode 100644 Chapter17/fsm/hal/gpio/src/gpio.cpp create mode 100644 Chapter17/fsm/hal/gpio/src/gpio_interrupt_manager.cpp create mode 100644 Chapter17/fsm/hal/inc/hal.hpp create mode 100644 Chapter17/fsm/hal/uart/inc/stm32f0xx_hal_uart.hpp create mode 100644 Chapter17/fsm/hal/uart/inc/uart.hpp create mode 100644 Chapter17/fsm/hal/uart/inc/uart_stm32.hpp create mode 100644 Chapter17/fsm/hal/uart/src/uart_stm32.cpp create mode 100644 Chapter17/fsm/libs/etl/.clang-format create mode 100644 Chapter17/fsm/libs/etl/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/Doxyfile create mode 100644 Chapter17/fsm/libs/etl/LICENSE create mode 100644 Chapter17/fsm/libs/etl/README.md create mode 100644 Chapter17/fsm/libs/etl/appveyor.yml create mode 100644 Chapter17/fsm/libs/etl/arduino/Embedded_Template_Library.h create mode 100644 Chapter17/fsm/libs/etl/arduino/examples/Example_0_import_etl/Example_0_import_etl.ino create mode 100644 Chapter17/fsm/libs/etl/arduino/examples/Vector_Examples/Example_Vector_1_simple_use/Example_Vector_1_simple_use.ino create mode 100644 Chapter17/fsm/libs/etl/arduino/library-arduino.json create mode 100644 Chapter17/fsm/libs/etl/arduino/library-arduino.properties create mode 100644 Chapter17/fsm/libs/etl/cmake/GetGitRevisionDescription.cmake create mode 100644 Chapter17/fsm/libs/etl/cmake/GetGitRevisionDescription.cmake.in create mode 100644 Chapter17/fsm/libs/etl/cmake/etlConfig.cmake.in create mode 100644 Chapter17/fsm/libs/etl/cmake/helpers.cmake create mode 100644 Chapter17/fsm/libs/etl/examples/ArmTimerCallbacks - C++/.gitignore create mode 100644 Chapter17/fsm/libs/etl/examples/ArmTimerCallbacks - C++/ArmTimerCallbacks.uvprojx create mode 100644 Chapter17/fsm/libs/etl/examples/ArmTimerCallbacks - C++/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/examples/ArmTimerCallbacks - C++/main.cpp create mode 100644 Chapter17/fsm/libs/etl/examples/Blink/Blink1/__vm/.gitignore create mode 100644 Chapter17/fsm/libs/etl/examples/BlinkList/BlinkList.ino create mode 100644 Chapter17/fsm/libs/etl/examples/BlinkList/VisualMicro/BlinkList.sln create mode 100644 Chapter17/fsm/libs/etl/examples/BlinkList/VisualMicro/BlinkList.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/BlinkList/VisualMicro/BlinkList.vcxproj.filters create mode 100644 Chapter17/fsm/libs/etl/examples/BlinkList/VisualMicro/__vm/.gitignore create mode 100644 Chapter17/fsm/libs/etl/examples/BlinkList/__vm/.gitignore create mode 100644 Chapter17/fsm/libs/etl/examples/Debounce/Debounce.ino create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/FunctionInterruptSimulation.cpp create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/vs2017/.vs/FunctionInterruptSimulation-Delegates/v15/.gitignore create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/vs2017/.vs/FunctionInterruptSimulation/v15/.gitignore create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/vs2017/FunctionInterruptSimulation-Delegates.sln create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/vs2017/FunctionInterruptSimulation-Delegates.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/vs2019/FunctionInterruptSimulation-Delegates.sln create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation-Delegates/vs2019/FunctionInterruptSimulation-Delegates.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation/FunctionInterruptSimulation.cpp create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation/vs2017/FunctionInterruptSimulation.sln create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation/vs2017/FunctionInterruptSimulation.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/FunctionInterruptSimulation/vs2017/FunctionInterruptSimulation.vcxproj.filters create mode 100644 Chapter17/fsm/libs/etl/examples/MutexMessageRouter/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/examples/MutexMessageRouter/MutexMessageRouter.cpp create mode 100644 Chapter17/fsm/libs/etl/examples/MutexMessageRouter/MutexMessageRouter.sln create mode 100644 Chapter17/fsm/libs/etl/examples/MutexMessageRouter/MutexMessageRouter.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedFSM/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedFSM/QueuedFSM.cpp create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedFSM/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedFSM/vs2019/QueuedFSM.sln create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedFSM/vs2019/QueuedFSM.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedFSM/vs2019/QueuedFSM.vcxproj.filters create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedMessageRouter/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedMessageRouter/QueuedMessageRouter.cpp create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedMessageRouter/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedMessageRouter/vs2019/QueuedMessageRouter.sln create mode 100644 Chapter17/fsm/libs/etl/examples/QueuedMessageRouter/vs2019/QueuedMessageRouter.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/Scheduler/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/examples/Scheduler/Scheduler.cpp create mode 100644 Chapter17/fsm/libs/etl/examples/Scheduler/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/examples/Scheduler/vs2017/Scheduler.sln create mode 100644 Chapter17/fsm/libs/etl/examples/Scheduler/vs2017/Scheduler.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/Scheduler/vs2019/Scheduler.sln create mode 100644 Chapter17/fsm/libs/etl/examples/Scheduler/vs2019/Scheduler.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/SharedMessage/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/examples/SharedMessage/SharedMessage.cpp create mode 100644 Chapter17/fsm/libs/etl/examples/SharedMessage/SharedMessage.sln create mode 100644 Chapter17/fsm/libs/etl/examples/SharedMessage/SharedMessage.vcxproj create mode 100644 Chapter17/fsm/libs/etl/examples/SharedMessage/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/examples/platformio/.gitignore create mode 100644 Chapter17/fsm/libs/etl/examples/platformio/README.md create mode 100644 Chapter17/fsm/libs/etl/examples/platformio/include/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/examples/platformio/platformio.ini create mode 100644 Chapter17/fsm/libs/etl/examples/platformio/src/main.cpp create mode 100644 Chapter17/fsm/libs/etl/images/ArcticCodeVault.png create mode 100644 Chapter17/fsm/libs/etl/images/ArcticCodeVaultTransparent.png create mode 100644 Chapter17/fsm/libs/etl/images/Coverty Shields.txt create mode 100644 Chapter17/fsm/libs/etl/images/etl-round.png create mode 100644 Chapter17/fsm/libs/etl/images/etl.ico create mode 100644 Chapter17/fsm/libs/etl/images/etl.png create mode 100644 Chapter17/fsm/libs/etl/images/etl.xar create mode 100644 Chapter17/fsm/libs/etl/images/etl16.png create mode 100644 Chapter17/fsm/libs/etl/images/etl32.png create mode 100644 Chapter17/fsm/libs/etl/images/etl48.png create mode 100644 Chapter17/fsm/libs/etl/images/etl64.png create mode 100644 Chapter17/fsm/libs/etl/images/favicon-32.png create mode 100644 Chapter17/fsm/libs/etl/images/favicon-64.png create mode 100644 Chapter17/fsm/libs/etl/images/favicon.ico create mode 100644 Chapter17/fsm/libs/etl/include/etl/absolute.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/algorithm.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/alignment.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/array.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/array_view.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/array_wrapper.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/atomic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/atomic/atomic_arm.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/atomic/atomic_clang_sync.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/atomic/atomic_gcc_sync.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/atomic/atomic_std.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/base64.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/base64_decoder.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/base64_encoder.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/basic_format_spec.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/basic_string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/basic_string_stream.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/binary.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/bip_buffer_spsc_atomic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/bit.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/bit_stream.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/bitset.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/bloom_filter.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/bresenham_line.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/buffer_descriptors.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/byte.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/byte_stream.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/callback.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/callback_service.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/callback_timer.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/callback_timer_atomic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/callback_timer_interrupt.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/callback_timer_locked.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/char_traits.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/checksum.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/circular_buffer.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/circular_iterator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/combinations.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/compare.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/constant.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/container.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/correlation.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/covariance.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc1.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_a.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_arc.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_aug_ccitt.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_buypass.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_ccitt.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_cdma2000.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_dds110.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_dectr.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_dectx.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_dnp.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_en13757.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_genibus.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_kermit.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_m17.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_maxim.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_mcrf4xx.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_modbus.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_profibus.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_riello.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_t10dif.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_teledisk.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_tms37157.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_usb.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_x25.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc16_xmodem.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32_bzip2.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32_c.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32_d.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32_jamcrc.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32_mpeg2.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32_posix.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32_q.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc32_xfer.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc64_ecma.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_ccitt.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_cdma2000.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_darc.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_dvbs2.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_ebu.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_icode.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_itu.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_j1850.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_j1850_zero.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_maxim.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_rohc.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/crc8_wcdma.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/cstring.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/cyclic_value.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/debounce.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/debug_count.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/delegate.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/delegate_observer.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/delegate_service.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/deprecated/factory.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/deque.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/doxygen.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/endianness.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/enum_type.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/error_handler.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/exception.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/expected.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/experimental/bit_cast.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/experimental/class_traits.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/experimental/icache.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/experimental/mem_cast.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/experimental/mid_point flt (typo abs(a) should be abs(b).png create mode 100644 Chapter17/fsm/libs/etl/include/etl/experimental/mid_point ptr.png create mode 100644 Chapter17/fsm/libs/etl/include/etl/experimental/mid_point.png create mode 100644 Chapter17/fsm/libs/etl/include/etl/experimental/singleton.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/factorial.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/fibonacci.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/file_error_numbers.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/fixed_iterator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/fixed_sized_memory_block_allocator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/flags.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/flat_map.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/flat_multimap.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/flat_multiset.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/flat_set.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/fnv_1.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/format_spec.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/forward_list.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/frame_check_sequence.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/fsm.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/function.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/functional.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/gamma.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/gcd.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/fsm_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_fsm.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_largest.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_message_packet.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_message_router.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_smallest.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_type_lookup.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_type_select.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_type_traits.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/generate_variant_pool.bat create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/largest_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/message_packet_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/message_router_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/smallest_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/type_lookup_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/type_select_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/type_traits_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generators/variant_pool_generator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/generic_pool.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/hash.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/hfsm.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/histogram.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/ihash.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/imemory_block_allocator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/indirect_vector.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/initializer_list.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/instance_count.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/integral_limits.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/intrusive_forward_list.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/intrusive_links.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/intrusive_list.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/intrusive_queue.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/intrusive_stack.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/invert.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/io_port.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/ipool.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/ireference_counted_message_pool.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/iterator.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/jenkins.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/largest.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/lcm.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/limiter.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/limits.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/list.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/log.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/macros.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/map.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/math.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/math_constants.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mean.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mem_cast.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/memory.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/memory_model.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_broker.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_bus.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_packet.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_router.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_router_registry.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_timer.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_timer_atomic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_timer_interrupt.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_timer_locked.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/message_types.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/multi_array.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/multi_range.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/multi_span.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/multi_vector.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/multimap.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/multiset.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/murmur3.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mutex.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mutex/mutex_arm.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mutex/mutex_clang_sync.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mutex/mutex_cmsis_os2.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mutex/mutex_freertos.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mutex/mutex_gcc_sync.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/mutex/mutex_std.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/negative.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/nth_type.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/null_type.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/nullptr.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/numeric.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/observer.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/optional.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/overload.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/packet.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/parameter_pack.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/parameter_type.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/pearson.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/permutations.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/placement_new.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/platform.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/poly_span.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/pool.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/power.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/priority_queue.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/addressof.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/bitset_legacy.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/bitset_new.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/choose_namespace.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/comparator_is_transparent.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/crc_implementation.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/crc_parameters.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/delegate_cpp03.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/delegate_cpp11.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_array_bounds_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_cxx_20_compat_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_deprecated_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_float_equal_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_null_dereference_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_pessimizing_move_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_pop.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_self_assign_overloaded_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_stringop_overread_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_uninitialized_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_unused_function_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/diagnostic_useless_cast_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/dynamic_extent.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/ivectorpointer.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/minmax_pop.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/minmax_push.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/pvoidvector.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/to_string_helper.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/variant_legacy.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/variant_variadic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/private/vector_base.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/arduino_arm.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/armv5.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/armv5_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/armv6.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/armv6_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/armv7.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/armv7_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/auto.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/clang_generic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/clang_generic_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/cpp03.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/cpp03_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/cpp11.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/cpp11_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/cpp14.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/cpp14_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/cpp17.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/cpp17_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/determine_builtin_support.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/determine_compiler.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/determine_compiler_language_support.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/determine_compiler_version.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/determine_development_os.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/gcc_generic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/gcc_generic_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/gcc_linux_x86.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/gcc_linux_x86_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/gcc_windows_x86.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/gcc_windows_x86_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/msvc_x86.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/msvc_x86_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/segger_gcc_stlport.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/ticc.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/profiles/ticc_no_stl.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/pseudo_moving_average.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/quantize.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/queue.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/queue_lockable.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/queue_mpmc_mutex.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/queue_spsc_atomic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/queue_spsc_isr.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/queue_spsc_locked.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/radix.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/random.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/ratio.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/reference_counted_message.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/reference_counted_message_pool.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/reference_counted_object.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/reference_flat_map.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/reference_flat_multimap.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/reference_flat_multiset.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/reference_flat_set.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/rescale.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/result.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/rms.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/scaled_rounding.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/scheduler.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/set.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/shared_message.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/singleton.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/smallest.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/span.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/sqrt.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/stack.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/standard_deviation.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/state_chart.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/static_assert.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/string_stream.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/string_utilities.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/string_view.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/stringify.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/successor.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/task.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/threshold.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/timer.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/to_arithmetic.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/to_string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/to_u16string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/to_u32string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/to_u8string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/to_wstring.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/type_def.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/type_lookup.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/type_select.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/type_traits.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u16format_spec.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u16string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u16string_stream.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u32format_spec.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u32string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u32string_stream.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u8format_spec.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u8string.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/u8string_stream.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/unaligned_type.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/unordered_map.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/unordered_multimap.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/unordered_multiset.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/unordered_set.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/user_type.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/utility.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/variance.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/variant.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/variant_pool.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/vector.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/version.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/visitor.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/wformat_spec.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/wstring.h create mode 100644 Chapter17/fsm/libs/etl/include/etl/wstring_stream.h create mode 100644 Chapter17/fsm/libs/etl/library.json create mode 100644 Chapter17/fsm/libs/etl/library.properties create mode 100644 Chapter17/fsm/libs/etl/meson.build create mode 100644 Chapter17/fsm/libs/etl/meson_options.txt create mode 100644 Chapter17/fsm/libs/etl/scripts/generator_test.bat create mode 100644 Chapter17/fsm/libs/etl/scripts/generator_test.py create mode 100644 Chapter17/fsm/libs/etl/scripts/update_release.bat create mode 100644 Chapter17/fsm/libs/etl/scripts/update_release.py create mode 100644 Chapter17/fsm/libs/etl/scripts/update_version.bat create mode 100644 Chapter17/fsm/libs/etl/scripts/update_version.py create mode 100644 Chapter17/fsm/libs/etl/subprojects/unittest-cpp.wrap create mode 100644 Chapter17/fsm/libs/etl/support/Class diagrams.docx create mode 100644 Chapter17/fsm/libs/etl/support/Flat map class diagram.odg create mode 100644 Chapter17/fsm/libs/etl/support/Flat_map_class_diagram.doc create mode 100644 Chapter17/fsm/libs/etl/support/List class diagram.odg create mode 100644 Chapter17/fsm/libs/etl/support/List_class_diagram.doc create mode 100644 Chapter17/fsm/libs/etl/support/Release notes.txt create mode 100644 Chapter17/fsm/libs/etl/support/hfsm.docx create mode 100644 Chapter17/fsm/libs/etl/support/hfsm.png create mode 100644 Chapter17/fsm/libs/etl/test/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/Deprecated/test_embedded_compile.cpp create mode 100644 Chapter17/fsm/libs/etl/test/Deprecated/test_factory.cpp create mode 100644 Chapter17/fsm/libs/etl/test/Performance/unordered_map/unordered_map.sln create mode 100644 Chapter17/fsm/libs/etl/test/Performance/unordered_map/unordered_map/ReadMe.txt create mode 100644 Chapter17/fsm/libs/etl/test/Performance/unordered_map/unordered_map/stdafx.cpp create mode 100644 Chapter17/fsm/libs/etl/test/Performance/unordered_map/unordered_map/stdafx.h create mode 100644 Chapter17/fsm/libs/etl/test/Performance/unordered_map/unordered_map/targetver.h create mode 100644 Chapter17/fsm/libs/etl/test/Performance/unordered_map/unordered_map/unordered_map.cpp create mode 100644 Chapter17/fsm/libs/etl/test/Performance/unordered_map/unordered_map/unordered_map.vcxproj create mode 100644 Chapter17/fsm/libs/etl/test/Performance/unordered_map/unordered_map/unordered_map.vcxproj.filters create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/AssertException.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/AssertException.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/CheckMacros.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Checks.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Checks.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/CompositeTestReporter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/CompositeTestReporter.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Config.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/CurrentTest.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/CurrentTest.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/DeferredTestReporter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/DeferredTestReporter.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/DeferredTestResult.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/DeferredTestResult.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/ExceptionMacros.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/ExecuteTest.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/HelperMacros.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/MemoryOutStream.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/MemoryOutStream.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Posix/SignalTranslator.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Posix/SignalTranslator.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Posix/TimeHelpers.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Posix/TimeHelpers.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/ReportAssert.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/ReportAssert.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/ReportAssertImpl.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/RequireMacros.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/RequiredCheckException.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/RequiredCheckException.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/RequiredCheckTestReporter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/RequiredCheckTestReporter.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Test.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Test.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestDetails.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestDetails.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestList.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestList.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestMacros.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestReporter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestReporter.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestReporterStdout.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestReporterStdout.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestResults.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestResults.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestRunner.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestRunner.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TestSuite.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/ThrowingTestReporter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/ThrowingTestReporter.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TimeConstraint.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TimeConstraint.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/TimeHelpers.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/UnitTest++.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/UnitTestPP.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Win32/TimeHelpers.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/Win32/TimeHelpers.h create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/XmlTestReporter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/UnitTest++/XmlTestReporter.h create mode 100644 Chapter17/fsm/libs/etl/test/data.h create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/exceptions/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/exceptions/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/exceptions/test_error_handler.cpp create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/log_errors/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/log_errors/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/log_errors/test_error_handler.cpp create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/log_errors_and_exceptions/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/log_errors_and_exceptions/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/etl_error_handler/log_errors_and_exceptions/test_error_handler.cpp create mode 100644 Chapter17/fsm/libs/etl/test/etl_initializer_list/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/etl_initializer_list/etl_initializer_list.sln create mode 100644 Chapter17/fsm/libs/etl/test/etl_initializer_list/etl_initializer_list.vcxproj create mode 100644 Chapter17/fsm/libs/etl/test/etl_initializer_list/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/etl_initializer_list/test_initializer_list.cpp create mode 100644 Chapter17/fsm/libs/etl/test/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/iterators_for_unit_tests.h create mode 100644 Chapter17/fsm/libs/etl/test/list_header_files.bat create mode 100644 Chapter17/fsm/libs/etl/test/list_test_files.bat create mode 100644 Chapter17/fsm/libs/etl/test/list_test_files.ps1 create mode 100644 Chapter17/fsm/libs/etl/test/list_test_files.sh create mode 100644 Chapter17/fsm/libs/etl/test/main.cpp create mode 100644 Chapter17/fsm/libs/etl/test/maincpp03check.cpp create mode 100644 Chapter17/fsm/libs/etl/test/meson.build create mode 100644 Chapter17/fsm/libs/etl/test/murmurhash3.cpp create mode 100644 Chapter17/fsm/libs/etl/test/murmurhash3.h create mode 100644 Chapter17/fsm/libs/etl/test/run-syntax-checks.sh create mode 100644 Chapter17/fsm/libs/etl/test/run-tests.sh create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/absolute.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/algorithm.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/alignment.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/array.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/array_view.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/array_wrapper.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/atomic.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/base64.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/base64_decoder.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/base64_encoder.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/basic_format_spec.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/basic_string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/basic_string_stream.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/binary.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/bip_buffer_spsc_atomic.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/bit.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/bit_stream.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/bitset.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/bitset_legacy.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/bitset_new.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/bloom_filter.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/bresenham_line.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/buffer_descriptors.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/byte.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/byte_stream.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++03/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++03/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++11/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++11/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++14/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++14/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++17/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++17/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++20/CMakeLists.txt create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/c++20/etl_profile.h create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/callback.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/callback_service.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/callback_timer.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/callback_timer_atomic.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/callback_timer_interrupt.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/callback_timer_locked.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/char_traits.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/checksum.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/circular_buffer.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/circular_iterator.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/combinations.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/compare.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/constant.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/container.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/correlation.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/covariance.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc1.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_a.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_arc.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_aug_ccitt.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_buypass.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_ccitt.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_cdma2000.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_dds110.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_dectr.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_dectx.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_dnp.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_en13757.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_genibus.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_kermit.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_m17.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_maxim.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_mcrf4xx.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_modbus.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_profibus.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_riello.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_t10dif.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_teledisk.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_tms37157.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_usb.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_x25.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc16_xmodem.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32_bzip2.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32_c.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32_d.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32_jamcrc.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32_mpeg2.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32_posix.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32_q.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc32_xfer.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc64_ecma.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_ccitt.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_cdma2000.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_darc.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_dvbs2.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_ebu.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_icode.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_itu.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_j1850.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_j1850_zero.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_maxim.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_rohc.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/crc8_wcdma.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/cyclic_value.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/debounce.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/debug_count.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/delegate.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/delegate_cpp03.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/delegate_service.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/deque.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/endianness.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/enum_type.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/error_handler.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/exception.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/expected.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/factorial.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/fibonacci.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/file_error_numbers.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/fixed_iterator.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/fixed_sized_memory_block_allocator.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/flags.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/flat_map.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/flat_multimap.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/flat_multiset.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/flat_set.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/fnv_1.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/format_spec.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/forward_list.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/frame_check_sequence.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/fsm.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/function.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/functional.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/gamma.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/gcd.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/generic_pool.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/hash.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/hfsm.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/histogram.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/ihash.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/imemory_block_allocator.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/indirect_vector.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/initializer_list.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/instance_count.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/integral_limits.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/intrusive_forward_list.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/intrusive_links.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/intrusive_list.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/intrusive_queue.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/intrusive_stack.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/invert.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/io_port.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/ipool.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/ireference_counted_message_pool.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/iterator.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/jenkins.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/largest.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/lcm.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/limiter.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/limits.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/list.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/log.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/macros.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/map.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/math.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/math_constants.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/mean.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/mem_cast.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/memory.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/memory_model.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_broker.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_bus.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_packet.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_router.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_router_registry.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_timer.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_timer_atomic.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_timer_interrupt.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_timer_locked.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/message_types.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/multi_array.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/multi_range.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/multi_span.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/multi_vector.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/multimap.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/multiset.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/murmur3.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/mutex.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/negative.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/nth_type.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/null_type.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/nullptr.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/numeric.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/observer.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/optional.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/overload.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/packet.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/parameter_pack.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/parameter_type.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/pearson.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/permutations.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/placement_new.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/platform.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/poly_span.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/pool.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/power.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/priority_queue.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/pseudo_moving_average.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/quantize.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/queue.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/queue_lockable.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/queue_mpmc_mutex.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/queue_spsc_atomic.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/queue_spsc_isr.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/queue_spsc_locked.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/radix.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/random.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/ratio.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/reference_counted_message.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/reference_counted_message_pool.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/reference_counted_object.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/reference_flat_map.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/reference_flat_multimap.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/reference_flat_multiset.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/reference_flat_set.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/rescale.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/result.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/rms.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/scaled_rounding.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/scheduler.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/set.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/shared_message.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/singleton.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/smallest.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/span.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/sqrt.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/stack.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/standard_deviation.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/state_chart.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/static_assert.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/string_stream.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/string_utilities.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/string_view.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/stringify.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/successor.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/task.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/threshold.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/timer.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/to_arithmetic.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/to_string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/to_u16string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/to_u32string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/to_u8string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/to_wstring.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/type_def.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/type_lookup.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/type_select.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/type_traits.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u16format_spec.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u16string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u16string_stream.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u32format_spec.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u32string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u32string_stream.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u8format_spec.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u8string.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/u8string_stream.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/unaligned_type.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/unordered_map.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/unordered_multimap.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/unordered_multiset.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/unordered_set.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/user_type.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/utility.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/variance.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/variant.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/variant_legacy.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/variant_old.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/variant_pool.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/variant_variadic.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/vector.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/version.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/visitor.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/wformat_spec.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/wstring.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/syntax_check/wstring_stream.h.t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test.sh create mode 100644 Chapter17/fsm/libs/etl/test/test_algorithm.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_alignment.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_array.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_array_view.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_array_wrapper.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_atomic.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC2152_decoder.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC2152_encoder.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC3501_decoder.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC3501_encoder.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC4648_URL_decoder_with_no_padding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC4648_URL_decoder_with_padding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC4648_URL_encoder_with_no_padding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC4648_URL_encoder_with_padding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC4648_decoder_with_no_padding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC4648_decoder_with_padding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC4648_encoder_with_no_padding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_base64_RFC4648_encoder_with_padding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_binary.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bip_buffer_spsc_atomic.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bit.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bit_stream.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bit_stream_reader_big_endian.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bit_stream_reader_little_endian.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bit_stream_writer_big_endian.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bit_stream_writer_little_endian.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bitset_legacy.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bitset_new_comparisons.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bitset_new_default_element_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bitset_new_explicit_single_element_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bitset_new_ext_default_element_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bitset_new_ext_explicit_single_element_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bloom_filter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bresenham_line.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_bsd_checksum.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_buffer_descriptors.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_byte.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_byte_stream.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_callback_service.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_callback_timer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_callback_timer_atomic.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_callback_timer_interrupt.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_callback_timer_locked.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_char_traits.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_checksum.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_circular_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_circular_buffer_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_circular_iterator.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_compare.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_constant.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_container.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_correlation.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_covariance.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc1.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_a.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_arc.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_aug_ccitt.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_buypass.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_ccitt.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_cdma2000.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_dds110.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_dectr.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_dectx.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_dnp.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_en13757.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_genibus.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_kermit.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_m17.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_maxim.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_mcrf4xx.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_modbus.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_profibus.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_riello.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_t10dif.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_teledisk.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_tms37157.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_usb.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_x25.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc16_xmodem.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32_bzip2.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32_c.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32_d.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32_jamcrc.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32_mpeg2.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32_posix.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32_q.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc32_xfer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc64_ecma.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_ccitt.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_cdma2000.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_darc.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_dvbs2.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_ebu.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_icode.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_itu.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_j1850.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_j1850_zero.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_maxim.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_rohc.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_crc8_wcdma.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_cyclic_value.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_debounce.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_delegate.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_delegate_cpp03.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_delegate_service.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_delegate_service_compile_time.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_delegate_service_cpp03.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_deque.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_endian.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_enum_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_error_handler.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_etl_traits.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_exception.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_expected.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_fixed_iterator.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_fixed_sized_memory_block_allocator.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_flags.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_flat_map.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_flat_multimap.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_flat_multiset.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_flat_set.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_fnv_1.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_format_spec.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_forward_list.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_forward_list_shared_pool.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_fsm.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_function.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_functional.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_gamma.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_hash.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_hfsm.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_hfsm_recurse_to_inner_state_on_start.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_histogram.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_indirect_vector.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_indirect_vector_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_instance_count.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_integral_limits.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_intrusive_forward_list.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_intrusive_links.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_intrusive_list.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_intrusive_queue.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_intrusive_stack.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_invert.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_io_port.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_iterator.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_jenkins.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_largest.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_limiter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_limits.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_list.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_list_shared_pool.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_macros.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_make_string.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_map.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_math.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_math_functions.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_mean.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_mem_cast.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_mem_cast_ptr.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_memory.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_broker.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_bus.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_packet.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_router.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_router_registry.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_timer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_timer_atomic.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_timer_interrupt.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_message_timer_locked.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_multi_array.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_multi_range.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_multi_span.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_multi_vector.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_multimap.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_multiset.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_murmur3.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_nth_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_numeric.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_observer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_optional.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_overload.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_packet.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_parameter_pack.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_parameter_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_parity_checksum.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_pearson.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_poly_span_dynamic_extent.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_poly_span_fixed_extent.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_pool.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_pool_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_priority_queue.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_pseudo_moving_average.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_quantize.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_lockable.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_lockable_small.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_memory_model_small.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_mpmc_mutex.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_mpmc_mutex_small.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_spsc_atomic.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_spsc_atomic_small.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_spsc_isr.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_spsc_isr_small.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_spsc_locked.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_queue_spsc_locked_small.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_random.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_reference_flat_map.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_reference_flat_multimap.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_reference_flat_multiset.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_reference_flat_set.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_rescale.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_result.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_rms.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_scaled_rounding.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_set.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_shared_message.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_singleton.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_smallest.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_span_dynamic_extent.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_span_fixed_extent.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_stack.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_standard_deviation.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_state_chart.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_state_chart_compile_time.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_state_chart_compile_time_with_data_parameter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_state_chart_with_data_parameter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_state_chart_with_rvalue_data_parameter.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_char.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_char_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_stream.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_stream_u16.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_stream_u32.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_stream_u8.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_stream_wchar_t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_u16.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_u16_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_u32.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_u32_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_u8.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_u8_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_std.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_std_u16.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_std_u32.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_std_u8.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_std_wchar_t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_u16.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_u32.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_u8.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_utilities_wchar_t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_view.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_wchar_t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_string_wchar_t_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_successor.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_task_scheduler.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_threshold.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_arithmetic.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_arithmetic_u16.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_arithmetic_u32.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_arithmetic_u8.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_arithmetic_wchar_t.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_string.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_u16string.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_u32string.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_u8string.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_to_wstring.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_type_def.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_type_lookup.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_type_select.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_type_traits.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_unaligned_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_unaligned_type_constexpr.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_unordered_map.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_unordered_multimap.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_unordered_multiset.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_unordered_set.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_user_type.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_utility.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_variance.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_variant_legacy.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_variant_pool.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_variant_pool_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_variant_variadic.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_vector.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_vector_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_vector_non_trivial.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_vector_pointer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_vector_pointer_external_buffer.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_visitor.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_xor_checksum.cpp create mode 100644 Chapter17/fsm/libs/etl/test/test_xor_rotate_checksum.cpp create mode 100644 Chapter17/fsm/libs/etl/test/unit_test_framework.h create mode 100644 Chapter17/fsm/libs/etl/test/vs2019/.gitignore create mode 100644 Chapter17/fsm/libs/etl/test/vs2019/NatvisFile.natvis create mode 100644 Chapter17/fsm/libs/etl/test/vs2019/cpp.hint create mode 100644 Chapter17/fsm/libs/etl/test/vs2019/etl.sln create mode 100644 Chapter17/fsm/libs/etl/test/vs2019/etl.vcxproj create mode 100644 Chapter17/fsm/libs/etl/test/vs2019/etl.vcxproj.filters create mode 100644 Chapter17/fsm/libs/etl/test/vs2019/etl_initialiser_list/etl_initialiser_list.vcxproj create mode 100644 Chapter17/fsm/libs/etl/test/vs2019/etl_initialiser_list/etl_initialiser_list.vcxproj.filters create mode 100644 Chapter17/fsm/libs/etl/test/vs2022/.gitignore create mode 100644 Chapter17/fsm/libs/etl/test/vs2022/cpp.hint create mode 100644 Chapter17/fsm/libs/etl/test/vs2022/etl.sln create mode 100644 Chapter17/fsm/libs/etl/test/vs2022/etl.vcxproj create mode 100644 Chapter17/fsm/libs/etl/test/vs2022/etl.vcxproj.filters create mode 100644 Chapter17/fsm/libs/etl/test/vs2022/etl_initialiser_list/etl_initialiser_list.vcxproj create mode 100644 Chapter17/fsm/libs/etl/test/vs2022/etl_initialiser_list/etl_initialiser_list.vcxproj.filters create mode 100644 Chapter17/fsm/libs/etl/test/vs2022/io_port.natvis create mode 100644 Chapter17/fsm/libs/etl/test/words.txt create mode 100644 Chapter17/fsm/libs/etl/todo.txt create mode 100644 Chapter17/fsm/libs/etl/uml/FSM example.png create mode 100644 Chapter17/fsm/libs/etl/uml/Framework.png create mode 100644 Chapter17/fsm/libs/etl/uml/MessageFramework.png create mode 100644 Chapter17/fsm/libs/etl/uml/source/FSM example.zargo create mode 100644 Chapter17/fsm/libs/etl/uml/source/Message Framework.zargo create mode 100644 Chapter17/fsm/libs/etl/version.txt create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f030x6.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f030x8.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f030xc.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f031x6.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f038xx.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f042x6.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f048xx.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f051x8.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f058xx.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f070x6.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f070xb.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f071xb.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f072xb.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f078xx.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f091xc.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f098xx.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h create mode 100644 Chapter17/fsm/platform/CMSIS/Device/ST/STM32F0xx/License.md create mode 100644 Chapter17/fsm/platform/CMSIS/Include/cmsis_armcc.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/cmsis_armclang.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/cmsis_compiler.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/cmsis_gcc.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/cmsis_iccarm.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/cmsis_version.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_armv8mbl.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_armv8mml.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_cm0.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_cm0plus.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_cm1.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_cm23.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_cm3.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_cm33.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_cm4.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_cm7.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_sc000.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/core_sc300.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/mpu_armv7.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/mpu_armv8.h create mode 100644 Chapter17/fsm/platform/CMSIS/Include/tz_context.h create mode 100644 Chapter17/fsm/platform/CMSIS/LICENSE.txt create mode 100644 Chapter17/fsm/platform/STM32F072C8Tx_FLASH.ld create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/Legacy/stm32f0xx_hal_can_legacy.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32_assert_template.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_adc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_adc_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_can.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cec.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_comp.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_conf_template.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_cortex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_crc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_crc_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dac.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dac_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_def.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_dma_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_exti.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_flash_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_gpio_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2c_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_i2s.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_irda.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_irda_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_iwdg.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pcd.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pcd_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_pwr_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rcc_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rtc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_rtc_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_smartcard.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_smartcard_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_smbus.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_spi.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_spi_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tim_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_tsc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_uart_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_usart.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_usart_ex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_hal_wwdg.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_adc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_comp.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dac.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_i2c.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_iwdg.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rtc.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_spi.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_tim.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_wwdg.h create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/License.md create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_adc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_adc_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_can.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cec.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_comp.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_crc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_crc_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dac.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dac_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2s.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_irda.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_iwdg.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_msp_template.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pcd.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pcd_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rtc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rtc_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_smartcard.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_smartcard_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_smbus.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_spi.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_spi_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_timebase_rtc_alarm_template.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_timebase_rtc_wakeup_template.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_timebase_tim_template.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tsc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_usart.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_usart_ex.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_wwdg.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_adc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_comp.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_crc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_crs.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dac.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dma.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_exti.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_gpio.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_rcc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_rtc.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_spi.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_tim.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_usart.c create mode 100644 Chapter17/fsm/platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_utils.c create mode 100644 Chapter17/fsm/platform/inc/stm32f0xx_hal_conf.h create mode 100644 Chapter17/fsm/platform/inc/stm32f0xx_it.h create mode 100644 Chapter17/fsm/platform/src/stm32f0xx_hal_msp.c create mode 100644 Chapter17/fsm/platform/src/stm32f0xx_it.c create mode 100644 Chapter17/fsm/platform/src/system_stm32f0xx.c create mode 100644 Chapter17/fsm/platform/startup_stm32f072xb.s create mode 100644 Chapter17/fsm/renode_scripts/stm32f0.repl create mode 100644 Chapter17/fsm/renode_scripts/stm32f072.repl create mode 100644 Chapter17/fsm/renode_scripts/stm32f072.resc create mode 100644 Chapter17/fsm/renode_scripts/stm32f072_debug.resc create mode 100644 Chapter17/fsm/util/inc/signal.hpp create mode 100644 Chapter17/fsm/util/inc/units.hpp create mode 100644 Chapter17/fsm/util/src/units.cpp diff --git a/Chapter17/fsm/.clang-format b/Chapter17/fsm/.clang-format new file mode 100644 index 0000000..3e8d8da --- /dev/null +++ b/Chapter17/fsm/.clang-format @@ -0,0 +1,9 @@ +IndentWidth: 4 +KeepEmptyLinesAtTheStartOfBlocks: false +BreakBeforeBraces: Allman +ColumnLimit: 80 +SpaceBeforeParens: Never +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortFunctionsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false diff --git a/Chapter17/fsm/.clang-tidy b/Chapter17/fsm/.clang-tidy new file mode 100644 index 0000000..9ab07d4 --- /dev/null +++ b/Chapter17/fsm/.clang-tidy @@ -0,0 +1,27 @@ +Checks: > + -*, + bugprone-*, + misc-*, + clang-analyzer-*, + modernize-*, + -modernize-use-trailing-return-type, + performance-*, + -performance-no-int-to-ptr, + portability-*, + readability-*, + -readability-identifier-length + readability-identifier-naming + +CheckOptions: + - { key: readability-identifier-naming.NamespaceCase, value: lower_case } + - { key: readability-identifier-naming.ClassCase, value: lower_case } + - { key: readability-identifier-naming.StructCase, value: lower_case } + - { key: readability-identifier-naming.MethodCase, value: lower_case } + - { key: readability-identifier-naming.TemplateParameterCase, value: CamelCase } + - { key: readability-identifier-naming.FunctionCase, value: lower_case } + - { key: readability-identifier-naming.VariableCase, value: lower_case } + - { key: readability-identifier-naming.PrivateMemberSuffix, value: _ } + - { key: readability-identifier-naming.ConstexprVariablePrefix, value: c_ } + +ExtraArgs: + - -std=c++20 \ No newline at end of file diff --git a/Chapter17/fsm/CMakeLists.txt b/Chapter17/fsm/CMakeLists.txt new file mode 100644 index 0000000..3d9410c --- /dev/null +++ b/Chapter17/fsm/CMakeLists.txt @@ -0,0 +1,162 @@ +cmake_minimum_required(VERSION 3.13) + +set(CMAKE_EXPORT_COMPILE_COMMANDS 1) + +set(CMAKE_C_COMPILER "arm-none-eabi-gcc") +set(CMAKE_CXX_COMPILER "arm-none-eabi-g++") +set(CMAKE_ASM_COMPILER "arm-none-eabi-gcc") +set(CMAKE_OBJCOPY "arm-none-eabi-objcopy") +set(CMAKE_SIZE "arm-none-eabi-size") + +set(RENODE "renode" CACHE STRING "Path to Renode executable") + +set(MAIN_CPP_PATH "${CMAKE_SOURCE_DIR}/app/src/") +set(MAIN_CPP_FILE_NAME "main_fsm_simple.cpp" CACHE STRING "main file") +list(APPEND LIB_SPECS "-specs=nosys.specs") +list(APPEND LIB_SPECS "-specs=nano.specs") + +set(EXCEPTIONS_FLAGS "-fno-exceptions -fno-rtti") + +find_program(CCACHE_FOUND ccache) +if(CCACHE_FOUND) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) +endif(CCACHE_FOUND) + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +set(CDEFS "-DUSE_HAL_DRIVER -DSTM32F072xB") +set(MCU "-mcpu=cortex-m0 -mthumb") +set(COMMON_FLAGS "${MCU} ${CDEFS} -fdata-sections -ffunction-sections -Wno-address-of-packed-member -Wall -Wextra -Wno-unused-parameter") +set(CMAKE_C_FLAGS "${COMMON_FLAGS}") +set(CMAKE_CXX_FLAGS "${COMMON_FLAGS} -Wno-register ${EXCEPTIONS_FLAGS} -fno-threadsafe-statics") +set(CMAKE_ASM_FLAGS "${COMMON_FLAGS} -x assembler-with-cpp") + +set(CMAKE_C_FLAGS_DEBUG "-g -gdwarf-2 -Og") +set(CMAKE_CXX_FLAGS_DEBUG "-g -gdwarf-2 -Og") +set(CMAKE_C_FLAGS_RELEASE "-O2 -flto") +set(CMAKE_CXX_FLAGS_RELEASE "-O2 -flto") +set(CMAKE_C_FLAGS_MINSIZEREL "-Os -flto") +set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -flto") + +if(CMAKE_EXPORT_COMPILE_COMMANDS) + # This dreadful mess is to communicate to clang-tidy the C++ system includes. + # It seems that CMake doesn't support using its own compile_commands.json + # database, and that clang-tidy doesn't pick up non-default system headers. + execute_process( + COMMAND + bash -c + "${CMAKE_CXX_COMPILER} -x c++ -Wp,-v /dev/null 2>&1 > /dev/null | grep '^ /' | grep -w 'c++'" + OUTPUT_VARIABLE COMPILER_HEADERS + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX REPLACE "[ \n\t]+" ";" INCLUDE_COMPILER_HEADERS + ${COMPILER_HEADERS}) + set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${INCLUDE_COMPILER_HEADERS}) + message(STATUS "${CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES}") + + execute_process( + COMMAND + bash -c + "${CMAKE_C_COMPILER} -x c -Wp,-v /dev/null 2>&1 > /dev/null | grep '^ /' " + OUTPUT_VARIABLE COMPILER_HEADERS + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REGEX REPLACE "[ \n\t]+" ";" INCLUDE_COMPILER_HEADERS + ${COMPILER_HEADERS}) + set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES ${INCLUDE_COMPILER_HEADERS}) + message(STATUS "${CMAKE_C_STANDARD_INCLUDE_DIRECTORIES}") + + set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES + "${CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES} ${CMAKE_C_STANDARD_INCLUDE_DIRECTORIES}" + ) +endif() + +project(bare VERSION 1.0.6) + +enable_language(C CXX ASM) + +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED True) + +# global include directories +include_directories( + ${CMAKE_SOURCE_DIR}/platform/inc + ${CMAKE_SOURCE_DIR}/platform/CMSIS/Device/ST/STM32F0xx/Include + ${CMAKE_SOURCE_DIR}/platform/CMSIS/Include + ${CMAKE_SOURCE_DIR}/platform/STM32F0xx_HAL_Driver/Inc + ${CMAKE_SOURCE_DIR}/app/inc + ${CMAKE_SOURCE_DIR}/hal/uart/inc + ${CMAKE_SOURCE_DIR}/hal/inc + ${CMAKE_SOURCE_DIR}/hal/gpio/inc + ${CMAKE_SOURCE_DIR}/hal/adc/inc + ${CMAKE_SOURCE_DIR}/cstdlib_support + ${CMAKE_SOURCE_DIR}/util/inc + ) + +set(EXECUTABLE ${PROJECT_NAME}.elf) + +add_executable( + ${EXECUTABLE} + platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c + platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c + platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c + platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c + platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart.c + platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_uart_ex.c + platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_adc.c + platform/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_adc_ex.c + platform/startup_stm32f072xb.s + platform/src/stm32f0xx_hal_msp.c + platform/src/stm32f0xx_it.c + platform/src/system_stm32f0xx.c + hal/gpio/src/gpio.cpp + hal/gpio/src/gpio_interrupt_manager.cpp + hal/adc/src/adc_stm32.cpp + cstdlib_support/retarget.cpp + util/src/units.cpp + ${MAIN_CPP_PATH}/${MAIN_CPP_FILE_NAME} + ) + +target_link_libraries(${EXECUTABLE} PUBLIC) + +target_include_directories(${EXECUTABLE} PUBLIC ${PROJECT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}) + +set_target_properties(${EXECUTABLE} PROPERTIES LINKER_LANGUAGE CXX) + +target_link_options( + ${EXECUTABLE} + PUBLIC + -T${CMAKE_SOURCE_DIR}/platform/STM32F072C8Tx_FLASH.ld + -mcpu=cortex-m0 + -mthumb + ${LIB_SPECS} + -lnosys + -u + _printf_float + -lc + -lm + -Wl,--no-warn-rwx-segments + -Wl,-Map=${PROJECT_NAME}.map,--cref + -Wl,--gc-sections) + +add_subdirectory(libs/etl) +target_link_libraries(${EXECUTABLE} PRIVATE etl::etl) + +# Print executable size +add_custom_command( + TARGET ${EXECUTABLE} + POST_BUILD + COMMAND arm-none-eabi-size ${EXECUTABLE}) + +# Create hex file +add_custom_command( + TARGET ${EXECUTABLE} + POST_BUILD + COMMAND arm-none-eabi-objcopy -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex + COMMAND arm-none-eabi-objcopy -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin) + +# Run elf in Renode +add_custom_target( + run_in_renode + COMMAND ${RENODE} --console --disable-xwt ${CMAKE_SOURCE_DIR}/renode_scripts/stm32f072.resc -e start + DEPENDS ${PROJECT_NAME}.elf) + diff --git a/Chapter17/fsm/app/src/main_fsm_simple.cpp b/Chapter17/fsm/app/src/main_fsm_simple.cpp new file mode 100644 index 0000000..029e5c4 --- /dev/null +++ b/Chapter17/fsm/app/src/main_fsm_simple.cpp @@ -0,0 +1,116 @@ +#include +#include + +#include + +#include + +#include +#include +#include + +#include + +enum class ble_state { + idle, + advertising, + connected +}; + +enum class ble_event { + ble_button_pressed, + connection_request, + timer_expired +}; + +class ble_fsm { +public: + void handle_event(ble_event event) { + switch (current_state_) { + case ble_state::idle: + if (event == ble_event::ble_button_pressed) { + start_advertising(); + current_state_ = ble_state::advertising; + } + break; + + case ble_state::advertising: + if (event == ble_event::connection_request) { + current_state_ = ble_state::connected; + } else if (event == ble_event::timer_expired) { + stop_advertising(); + current_state_ = ble_state::idle; + } + break; + + case ble_state::connected: + if (event == ble_event::ble_button_pressed) { + disconnect(); + current_state_ = ble_state::idle; + } + break; + default: + break; + } + } + + ble_state get_state() const { + return current_state_; + } + +private: + ble_state current_state_ = ble_state::idle; + + void start_advertising() { + printf("Action: start_advertising()\n"); + } + + void stop_advertising() { + printf("Action: stop_advertising()\n"); + } + + void disconnect() { + printf("Action: disconnect()\n"); + } +}; + +static const char* state_to_string(ble_state state) { + switch (state) { + case ble_state::idle: return "idle"; + case ble_state::advertising: return "advertising"; + case ble_state::connected: return "connected"; + default: return "unknown"; + } +} + +int main() +{ + hal::init(); + + hal::uart_stm32 uart(USART2); + uart.init(); + + retarget::set_stdio_uart(&uart); + + ble_fsm my_ble_fsm; + + const auto print_current_state = [&]() { + printf("Current State: %s\n", state_to_string(my_ble_fsm.get_state())); + }; + + print_current_state(); + + my_ble_fsm.handle_event(ble_event::ble_button_pressed); + print_current_state(); + + my_ble_fsm.handle_event(ble_event::connection_request); + print_current_state(); + + my_ble_fsm.handle_event(ble_event::ble_button_pressed); + print_current_state(); + + + while(true) + { + } +} diff --git a/Chapter17/fsm/cstdlib_support/retarget.cpp b/Chapter17/fsm/cstdlib_support/retarget.cpp new file mode 100644 index 0000000..f2dd14c --- /dev/null +++ b/Chapter17/fsm/cstdlib_support/retarget.cpp @@ -0,0 +1,81 @@ +#include + +#include +#include +#include + +#include + +namespace +{ +hal::uart *uart_stdio; +}; + +void retarget::set_stdio_uart(hal::uart *uart) +{ + uart_stdio = uart; + + /* Disable I/O buffering for STDOUT stream, so that + * chars are sent out as soon as they are printed. */ + setvbuf(stdout, NULL, _IONBF, 0); +} + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +extern "C" int _write(int fd, char * ptr, int len) +{ + if(fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + uart_stdio->write(std::span(ptr, len)); + } + + return len; +} + +extern "C" int _isatty(int fd) +{ + if(fd >= STDIN_FILENO && fd <= STDERR_FILENO) + { + return 1; + } + errno = EBADF; + return 0; +} + +extern "C" int _close(int fd) +{ + if(fd >= STDIN_FILENO && fd <= STDERR_FILENO) + return 0; + + errno = EBADF; + return -1; +} + +extern "C" int _lseek(int fd, int ptr, int dir) +{ + (void)fd; + (void)ptr; + (void)dir; + + errno = EBADF; + return -1; +} + +extern "C" int _read(int fd, char *ptr, int len) +{ + return -1; +} + +int _fstat(int fd, struct stat *st) +{ + if(fd >= STDIN_FILENO && fd <= STDERR_FILENO) + { + st->st_mode = S_IFCHR; + return 0; + } + + errno = EBADF; + return 0; +} diff --git a/Chapter17/fsm/cstdlib_support/retarget.hpp b/Chapter17/fsm/cstdlib_support/retarget.hpp new file mode 100644 index 0000000..3a74dc6 --- /dev/null +++ b/Chapter17/fsm/cstdlib_support/retarget.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include + +namespace retarget +{ + +void set_stdio_uart(hal::uart *uart); + +}; \ No newline at end of file diff --git a/Chapter17/fsm/hal/adc/inc/adc.hpp b/Chapter17/fsm/hal/adc/inc/adc.hpp new file mode 100644 index 0000000..cea69ec --- /dev/null +++ b/Chapter17/fsm/hal/adc/inc/adc.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +#include + +namespace hal +{ + class adc { + public: + enum class error { + timeout + }; + + virtual void init() = 0; + virtual std::expected get_reading() = 0; + }; +}; \ No newline at end of file diff --git a/Chapter17/fsm/hal/adc/inc/adc_stm32.hpp b/Chapter17/fsm/hal/adc/inc/adc_stm32.hpp new file mode 100644 index 0000000..050ca43 --- /dev/null +++ b/Chapter17/fsm/hal/adc/inc/adc_stm32.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +#include +#include + +namespace hal +{ + + class adc_stm32 : public adc{ + public: + adc_stm32(units::voltage ref_voltage) : ref_voltage_(ref_voltage) {} + + void init() override; + std::expected get_reading() override; + private: + ADC_HandleTypeDef adc_handle_; + units::voltage ref_voltage_; + }; +}; \ No newline at end of file diff --git a/Chapter17/fsm/hal/adc/src/adc_stm32.cpp b/Chapter17/fsm/hal/adc/src/adc_stm32.cpp new file mode 100644 index 0000000..ba15253 --- /dev/null +++ b/Chapter17/fsm/hal/adc/src/adc_stm32.cpp @@ -0,0 +1,47 @@ +#include + +void hal::adc_stm32::init() { + ADC_ChannelConfTypeDef sConfig = {0}; + + /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) + */ + adc_handle_.Instance = ADC1; + adc_handle_.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; + adc_handle_.Init.Resolution = ADC_RESOLUTION_12B; + adc_handle_.Init.DataAlign = ADC_DATAALIGN_RIGHT; + adc_handle_.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; + adc_handle_.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + adc_handle_.Init.LowPowerAutoWait = DISABLE; + adc_handle_.Init.LowPowerAutoPowerOff = DISABLE; + adc_handle_.Init.ContinuousConvMode = DISABLE; + adc_handle_.Init.DiscontinuousConvMode = DISABLE; + adc_handle_.Init.ExternalTrigConv = ADC_SOFTWARE_START; + adc_handle_.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + adc_handle_.Init.DMAContinuousRequests = DISABLE; + adc_handle_.Init.Overrun = ADC_OVR_DATA_PRESERVED; + if (HAL_ADC_Init(&adc_handle_) != HAL_OK) + { + //Error_Handler(); + } + + /** Configure for the selected ADC regular channel to be converted. + */ + sConfig.Channel = ADC_CHANNEL_0; + sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + if (HAL_ADC_ConfigChannel(&adc_handle_, &sConfig) != HAL_OK) + { + //Error_Handler(); + } +} + +std::expected hal::adc_stm32::get_reading() { + HAL_ADC_Start(&adc_handle_); + if(HAL_ADC_PollForConversion(&adc_handle_, 1000) != HAL_OK) { + return std::unexpected(hal::adc::error::timeout); + } + + auto adc_val = HAL_ADC_GetValue(&adc_handle_); + + return ref_voltage_ * adc_val / 4096.f; +} \ No newline at end of file diff --git a/Chapter17/fsm/hal/gpio/inc/gpio.hpp b/Chapter17/fsm/hal/gpio/inc/gpio.hpp new file mode 100644 index 0000000..9141590 --- /dev/null +++ b/Chapter17/fsm/hal/gpio/inc/gpio.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +namespace hal +{ +class gpio +{ +public: + gpio(const std::function & on_press = nullptr); + void execute_interrupt_handler() const; + + [[nodiscard]] virtual bool is_interrupt_generated() const = 0; + virtual void clear_interrupt_flag() const = 0; +private: + std::function on_press_; +}; +}; // namespace hal diff --git a/Chapter17/fsm/hal/gpio/inc/gpio_interrupt_manager.hpp b/Chapter17/fsm/hal/gpio/inc/gpio_interrupt_manager.hpp new file mode 100644 index 0000000..0363d0e --- /dev/null +++ b/Chapter17/fsm/hal/gpio/inc/gpio_interrupt_manager.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +#include + +namespace hal { + + struct gpio_interrupt_manager { + static void register_interrupt_handler(gpio * pin); + + static void execute_interrupt_handlers(); + + static constexpr std::size_t c_gpio_handlers_num = 16; + static inline std::array gpio_handlers{}; + static inline std::size_t w_idx = 0; + }; +}; \ No newline at end of file diff --git a/Chapter17/fsm/hal/gpio/inc/gpio_stm32.hpp b/Chapter17/fsm/hal/gpio/inc/gpio_stm32.hpp new file mode 100644 index 0000000..0bd7d56 --- /dev/null +++ b/Chapter17/fsm/hal/gpio/inc/gpio_stm32.hpp @@ -0,0 +1,70 @@ +#include + +#include + +namespace hal { + +enum class pin : uint16_t { + p_invalid = 0, + p0 = 0x0001U, + p1 = 0x0002U, + p2 = 0x0004U, + p3 = 0x0008U, + p4 = 0x0010U, + p5 = 0x0020U, + p6 = 0x0040U, + p7 = 0x0080U, + p8 = 0x0100U, + p9 = 0x0200U, + p10 = 0x0400U, + p11 = 0x0800U, + p12 = 0x1000U, + p13 = 0x2000U, + p14 = 0x4000U, + p15 = 0x8000U, + all = 0xFFFFU +}; + +struct port_a { + static constexpr uint8_t c_pin_num = 16; + static inline GPIO_TypeDef * port = reinterpret_cast(GPIOA); + static void init_clock () { + __HAL_RCC_GPIOA_CLK_ENABLE(); + } +}; + +template +class gpio_stm32 : public gpio { +public: + gpio_stm32(pin the_pin, const std::function & on_press = nullptr) + : gpio(on_press), the_pin_(the_pin) { + Port::init_clock(); + + GPIO_InitTypeDef GPIO_InitStruct { static_cast(the_pin), + GPIO_MODE_IT_RISING, + GPIO_NOPULL, + GPIO_SPEED_FREQ_LOW, + 0 }; + HAL_GPIO_Init(Port::port, &GPIO_InitStruct); + + if(on_press) { + enable_interrupt(); + } + } + + [[nodiscard]] bool is_interrupt_generated() const override { + return __HAL_GPIO_EXTI_GET_IT(static_cast(the_pin_)); + } + void clear_interrupt_flag() const override { + __HAL_GPIO_EXTI_CLEAR_IT(static_cast(the_pin_)); + } +private: + pin the_pin_ = pin::p_invalid; + + void enable_interrupt() { + // TODO: check EXTI line macro according to pin used + HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(EXTI4_15_IRQn); + } +}; +}; \ No newline at end of file diff --git a/Chapter17/fsm/hal/gpio/src/gpio.cpp b/Chapter17/fsm/hal/gpio/src/gpio.cpp new file mode 100644 index 0000000..55043f4 --- /dev/null +++ b/Chapter17/fsm/hal/gpio/src/gpio.cpp @@ -0,0 +1,21 @@ +#include +#include + +namespace hal { + +gpio::gpio(const std::function & on_press) { + on_press_ = on_press; + gpio_interrupt_manager::register_interrupt_handler(this); +} + +void gpio::execute_interrupt_handler () const { + if(is_interrupt_generated()) + { + clear_interrupt_flag(); + if(on_press_) { + on_press_(); + } + } +} + +}; \ No newline at end of file diff --git a/Chapter17/fsm/hal/gpio/src/gpio_interrupt_manager.cpp b/Chapter17/fsm/hal/gpio/src/gpio_interrupt_manager.cpp new file mode 100644 index 0000000..b1e5cb2 --- /dev/null +++ b/Chapter17/fsm/hal/gpio/src/gpio_interrupt_manager.cpp @@ -0,0 +1,17 @@ +#include + +namespace hal { + +void gpio_interrupt_manager::register_interrupt_handler(gpio * pin) { + gpio_handlers.at(w_idx++) = pin; +} + +void gpio_interrupt_manager::execute_interrupt_handlers() { + for(std::size_t i = 0; i < w_idx; i++) { + gpio_handlers[i]->execute_interrupt_handler(); + } +} +extern "C" void EXTI4_15_IRQHandler(void) { + gpio_interrupt_manager::execute_interrupt_handlers(); +} +}; \ No newline at end of file diff --git a/Chapter17/fsm/hal/inc/hal.hpp b/Chapter17/fsm/hal/inc/hal.hpp new file mode 100644 index 0000000..c57083b --- /dev/null +++ b/Chapter17/fsm/hal/inc/hal.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include + +#include + +namespace hal +{ +inline void init() +{ + HAL_Init(); +} + +inline std::uint32_t get_pc() +{ + std::uint32_t pc; + __asm volatile ("mov %0, pc" : "=r" (pc) ); + return pc; +} + +struct time +{ + static std::uint32_t get_ms() + { + return HAL_GetTick(); + } + + static void delay_ms(uint32_t delay) + { + HAL_Delay(delay); + } +}; +}; // namespace hal \ No newline at end of file diff --git a/Chapter17/fsm/hal/uart/inc/stm32f0xx_hal_uart.hpp b/Chapter17/fsm/hal/uart/inc/stm32f0xx_hal_uart.hpp new file mode 100644 index 0000000..309e1ce --- /dev/null +++ b/Chapter17/fsm/hal/uart/inc/stm32f0xx_hal_uart.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include +#include + +namespace hal::stm32{ + struct uart { + uart() = delete; + + static inline HAL_StatusTypeDef init(UART_HandleTypeDef *huart) { + return HAL_UART_Init(huart); + } + + static inline HAL_StatusTypeDef transmit(UART_HandleTypeDef *huart, + uint8_t *pData, + uint16_t Size, + uint32_t Timeout) { + return HAL_UART_Transmit(huart, pData, Size, Timeout); + } + }; +}; \ No newline at end of file diff --git a/Chapter17/fsm/hal/uart/inc/uart.hpp b/Chapter17/fsm/hal/uart/inc/uart.hpp new file mode 100644 index 0000000..b9756ad --- /dev/null +++ b/Chapter17/fsm/hal/uart/inc/uart.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include +#include + +namespace hal +{ +class uart +{ + public: + virtual void init(std::uint32_t baudrate) = 0; + virtual void write(std::span data) = 0; +}; +}; // namespace hal diff --git a/Chapter17/fsm/hal/uart/inc/uart_stm32.hpp b/Chapter17/fsm/hal/uart/inc/uart_stm32.hpp new file mode 100644 index 0000000..29fe979 --- /dev/null +++ b/Chapter17/fsm/hal/uart/inc/uart_stm32.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include +#include + +#include + +#include + +namespace hal +{ +template +class uart_stm32 : public uart +{ + public: + uart_stm32(USART_TypeDef *inst) : instance_(inst) {} + + void init(std::uint32_t baudrate = c_baudrate_default) override { + huart_.Instance = instance_; + huart_.Init.BaudRate = baudrate; + huart_.Init.WordLength = UART_WORDLENGTH_8B; + huart_.Init.StopBits = UART_STOPBITS_1; + huart_.Init.Parity = UART_PARITY_NONE; + huart_.Init.Mode = UART_MODE_TX_RX; + huart_.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart_.Init.OverSampling = UART_OVERSAMPLING_16; + huart_.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart_.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + // TODO: add GPIO initialization for real hardware + huart_.MspInitCallback = nullptr; + HalUart::init(&huart_); + } + void write(std::span data) override { + // we must cast away costness due to ST HAL's API + char * data_ptr = const_cast(data.data()); + HalUart::transmit(&huart_, reinterpret_cast(data_ptr), data.size(), + HAL_MAX_DELAY); + } + + private: + UART_HandleTypeDef huart_; + USART_TypeDef *instance_; + std::uint32_t baudrate_; + static constexpr std::uint32_t c_baudrate_default = 115200; +}; +}; // namespace hal diff --git a/Chapter17/fsm/hal/uart/src/uart_stm32.cpp b/Chapter17/fsm/hal/uart/src/uart_stm32.cpp new file mode 100644 index 0000000..3cc165b --- /dev/null +++ b/Chapter17/fsm/hal/uart/src/uart_stm32.cpp @@ -0,0 +1,34 @@ +#include + +template +hal::uart_stm32::uart_stm32(USART_TypeDef *inst) + : instance_(inst) +{ +} + +template +void hal::uart_stm32::init(std::uint32_t baudrate) +{ + huart_.Instance = instance_; + huart_.Init.BaudRate = baudrate; + huart_.Init.WordLength = UART_WORDLENGTH_8B; + huart_.Init.StopBits = UART_STOPBITS_1; + huart_.Init.Parity = UART_PARITY_NONE; + huart_.Init.Mode = UART_MODE_TX_RX; + huart_.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart_.Init.OverSampling = UART_OVERSAMPLING_16; + huart_.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart_.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + // TODO: add GPIO initialization for real hardware + huart_.MspInitCallback = nullptr; + HalUart::init(&huart_); +} + +template +void hal::uart_stm32::write(std::span data) +{ + // we must cast away costness due to ST HAL's API + char * data_ptr = const_cast(data.data()); + HalUart::transmit(&huart_, reinterpret_cast(data_ptr), data.size(), + HAL_MAX_DELAY); +} \ No newline at end of file diff --git a/Chapter17/fsm/libs/etl/.clang-format b/Chapter17/fsm/libs/etl/.clang-format new file mode 100644 index 0000000..8a40998 --- /dev/null +++ b/Chapter17/fsm/libs/etl/.clang-format @@ -0,0 +1,51 @@ +--- +#------------------------------------ +# Configuration for clang-format v12 +#------------------------------------ + +Language: Cpp + +SortIncludes: true + +BasedOnStyle: Chromium + +BinPackParameters: false +BitFieldColonSpacing: Both + +BreakBeforeBraces: Allman +BreakConstructorInitializers: BeforeComma + +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: true +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false + +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true + +ConstructorInitializerAllOnOneLineOrOnePerLine: 'true' +ConstructorInitializerIndentWidth: '2' + +NamespaceIndentation: All +IndentPPDirectives: BeforeHash +PointerAlignment: Left +ColumnLimit: '0' +ContinuationIndentWidth: '2' +UseTab: Never +TabWidth: '2' +IndentWidth: '2' +AccessModifierOffset : '-2' +IndentCaseLabels: false +Cpp11BracedListStyle: 'true' +AlignAfterOpenBracket: Align +AlignConsecutiveDeclarations: true + +#------------------------------------ +# Configurations not supported by clang-format v12 +#------------------------------------ +# BreakInheritanceList: AfterComma +# EmptyLineBeforeAccessModifier: Always +# EmptyLineAfterAccessModifier: Always +# ReferenceAlignment: Left + +... diff --git a/Chapter17/fsm/libs/etl/CMakeLists.txt b/Chapter17/fsm/libs/etl/CMakeLists.txt new file mode 100644 index 0000000..9f81b8b --- /dev/null +++ b/Chapter17/fsm/libs/etl/CMakeLists.txt @@ -0,0 +1,82 @@ +####################################################################### +# The Embedded Template Library (https://www.etlcpp.com/) +####################################################################### +cmake_minimum_required(VERSION 3.5.0) + +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/helpers.cmake) + +set(MSG_PREFIX "etl |") +determine_version_with_git(${GIT_DIR_LOOKUP_POLICY}) +if(NOT ETL_VERSION) + determine_version_with_file("version.txt") +endif() + +project(etl VERSION ${ETL_VERSION} LANGUAGES CXX) + +option(BUILD_TESTS "Build unit tests" OFF) +option(NO_STL "No STL" OFF) +# There is a bug on old gcc versions for some targets that causes all system headers +# to be implicitly wrapped with 'extern "C"' +# Users can add set(NO_SYSTEM_INCLUDE ON) to their top level CMakeLists.txt to work around this. +option(NO_SYSTEM_INCLUDE "Do not include with -isystem" OFF) +if (NO_SYSTEM_INCLUDE) + set(INCLUDE_SPECIFIER "") +else() + set(INCLUDE_SPECIFIER "SYSTEM") +endif() + +add_library(${PROJECT_NAME} INTERFACE) +# This allows users which use the add_subdirectory or FetchContent +# to use the same target as users which use find_package +add_library(etl::etl ALIAS ${PROJECT_NAME}) + +include(GNUInstallDirs) + +target_include_directories(${PROJECT_NAME} ${INCLUDE_SPECIFIER} INTERFACE + $ + $ + ) + +target_link_libraries(${PROJECT_NAME} INTERFACE) + +# only install if top level project +if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME}) + # Steps here based on excellent guide: https://dominikberner.ch/cmake-interface-lib/ + # Which also details all steps + include(CMakePackageConfigHelpers) + install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + if(ETL_VERSION) + # Generate the package configuration files using CMake provided macros + write_basic_package_version_file( + "${PROJECT_NAME}ConfigVersion.cmake" + COMPATIBILITY SameMajorVersion + ARCH_INDEPENDENT + ) + endif() + configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION + ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) + + # Install target file, then package configuration files, and finally the headers + install(EXPORT ${PROJECT_NAME}Targets + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) + install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/etl DESTINATION include) + +endif() + +if (BUILD_TESTS) + enable_testing() + add_subdirectory(test) +endif() diff --git a/Chapter17/fsm/libs/etl/Doxyfile b/Chapter17/fsm/libs/etl/Doxyfile new file mode 100644 index 0000000..437a911 --- /dev/null +++ b/Chapter17/fsm/libs/etl/Doxyfile @@ -0,0 +1,2401 @@ +# Doxyfile 1.8.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "Embedded Template Library" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = 1.0 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + +PROJECT_LOGO = ./etl48.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./docs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = YES + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = ./README.md ./src ./include + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.as \ + *.js + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = ./test + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = ./README.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# compiled with the --with-libclang option. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefor more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra stylesheet files is of importance (e.g. the last +# stylesheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /