diff --git a/.clang-format b/.clang-format index 1d8cdf8..da3f715 100644 --- a/.clang-format +++ b/.clang-format @@ -6,18 +6,19 @@ BasedOnStyle: Google # "int& foo" for this project: DerivePointerAlignment: false PointerAlignment: Left +ColumnLimit: 120 # Rules for includes # IncludeBlocks: IBS_Regroup # Requires clang-format 6.0+ # Ordering of includes, higher priority lower in list IncludeCategories: -- Regex: '^\"unit/' - Priority: 5999 -- Regex: '^\"' - Priority: 4000 -- Regex: '^<.*/.*' - Priority: 2000 -- Regex: '^<[^\/.]*>' - Priority: 1000 -- Regex: '^<.*.h>' - Priority: 500 + - Regex: '^\"unit/' + Priority: 5999 + - Regex: '^\"' + Priority: 4000 + - Regex: "^<.*/.*" + Priority: 2000 + - Regex: '^<[^\/.]*>' + Priority: 1000 + - Regex: "^<.*.h>" + Priority: 500 diff --git a/.clang-tidy b/.clang-tidy index bf4629c..3240638 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -9,7 +9,7 @@ # -readability-function-cognitive-complexity disallows large functions # -readability-identifier-length allows short variable names # To be corrected: -Checks: '-*, bugprone-*, clang-*, google-readability-*, misc-*, modernize-*, readability-*, performance-*, -clang-analyzer-cplusplus*, -google-readability-namespace-comments, -bugprone-easily-swappable-parameters, -bugprone-suspicious-include, -readability-function-cognitive-complexity, -readability-identifier-length, -modernize-use-trailing-return-type' +Checks: '-*, bugprone-*, clang-*, google-readability-*, misc-*, modernize-*, readability-*, performance-*, -clang-analyzer-cplusplus*, -readability-identifier-naming, -google-readability-namespace-comments, -bugprone-easily-swappable-parameters, -bugprone-suspicious-include, -readability-function-cognitive-complexity, -readability-identifier-length, -modernize-use-trailing-return-type' # Most warnings should be errors WarningsAsErrors: 'bugprone-*, clang-*, google-*, misc-*, modernize-*, readability-*, performance-*' # Overall format style, Google Style Guide w/ extra restrictions @@ -18,7 +18,6 @@ CheckOptions: - { key: readability-identifier-naming.ClassCase, value: CamelCase } - { key: readability-identifier-naming.StructCase, value: CamelCase } - { key: readability-identifier-naming.TemplateParameterCase, value: CamelCase } - - { key: readability-identifier-naming.FunctionCase, value: CamelCase } - { key: readability-identifier-naming.NamespaceCase, value: lower_case } - { key: readability-identifier-naming.VariableCase, value: lower_case } - { key: readability-identifier-naming.LocalConstantCase, value: lower_case } @@ -33,8 +32,6 @@ CheckOptions: - { key: readability-identifier-naming.ProtectedMemberCase, value: lower_case } - { key: readability-identifier-naming.ConstexprVariableCase, value: CamelCase } - { key: readability-identifier-naming.ConstexprVariablePrefix, value: k } - - { key: readability-identifier-naming.EnumConstantCase, value: CamelCase } - - { key: readability-identifier-naming.EnumConstantPrefix, value: k } - { key: readability-identifier-naming.MemberConstantCase, value: CamelCase } - { key: readability-identifier-naming.MemberConstantPrefix, value: k } - { key: readability-identifier-naming.StaticConstantCase, value: CamelCase } diff --git a/CMakeLists.txt b/CMakeLists.txt index 17f3a8a..1d06959 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,52 +1,38 @@ cmake_minimum_required(VERSION 3.22) -project(libsersi - VERSION 0.1.0 +if(NOT PROJECT_NAME) + set(PROJECT_NAME sersi) +endif() + +if(NOT PROJECT_VERSION) + set(PROJECT_VERSION 0.2.0) +endif() + +project(${PROJECT_NAME} + VERSION ${PROJECT_VERSION} + DESCRIPTION "IEEE 1278.1-2012 Distributed Interactive Simulation library" LANGUAGES CXX ) -include(${CMAKE_SOURCE_DIR}/cmake/libsersi-api.cmake) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) -libsersi_project_defaults() +# Export compile commands +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -# Define library -add_library(sersi "") +# Add CXX build flags for robust warning and error checking during compilation +if (NOT MSVC) + add_compile_options(-Wall -Wextra -pedantic -Werror) +endif() -# Add src/ to the include directories to libsersi -target_include_directories(sersi - PUBLIC $ - $ -) -target_include_directories(sersi SYSTEM - PUBLIC $ - $ - PRIVATE $ -) +include(GNUInstallDirs) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) # Add source directories +add_subdirectory(include) add_subdirectory(src) -# Configure install target (i.e. what files to install) -install(TARGETS sersi - EXPORT libsersi-targets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(EXPORT libsersi-targets - NAMESPACE libsersi:: - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libsersi") - -# Add cmake configuration -add_subdirectory(cmake) - -# configure package target (i.e. Package Types, and meta data) -set(CPACK_GENERATOR "DEB" "RPM" "TXZ" "TGZ") -set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) -set(CPACK_PACKAGE_NAME "libsersi") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The libsersi library") -set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.${CMAKE_SYSTEM_PROCESSOR}") -set(CPACK_PACKAGE_RPM_DIR "${CMAKE_CURRENT_BINARY_DIR}/_CPack_Packages/Linux/RPM") -set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Cameron Howell ") -set(CPACK_PACKAGE_PACKAGER $ENV{USER}) -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The libsersi library") include(CPack) diff --git a/CMakeUserPresets.json b/CMakeUserPresets.json new file mode 100644 index 0000000..945b382 --- /dev/null +++ b/CMakeUserPresets.json @@ -0,0 +1,9 @@ +{ + "version": 4, + "vendor": { + "conan": {} + }, + "include": [ + "build/CMakePresets.json" + ] +} \ No newline at end of file diff --git a/LICENSE b/LICENSE index 6d9b293..5ba8eeb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 2-Clause License -Copyright (c) 2024, Cameron +Copyright (c) 2026, Cameron Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/README.md b/README.md index fb1603c..0356fb2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ width="0px" /> libsersi
- (IEEE 1278.1a-1998) + (IEEE 1278.1-2012) Maintained

@@ -50,36 +50,59 @@   ## 💭 About -C++ implementation of the IEEE 1278.1a-1998 Distributed Interactive Simulation (DIS) application protocol. This library was implemented according to the IEEE Std 1278.1a-1998 publication. The name `libsersi` is derived from the words "*ser*ialize" and "*si*mulation". + +C++ implementation of the IEEE 1278.1-2012 Distributed Interactive Simulation (DIS) application protocol. This library was implemented according to the IEEE Std 1278.1-2012 publication. The name `libsersi` is derived from the words "*ser*ialize" and "*si*mulation". ## 📕 Documentation + Will add Doxygen documentation in a future patch. ## 🔰 Getting Started + This library can be manually built and installed with CMake and make tools, or it can be imported from the Conan Center. + ### Building from Source + +#### With CMake + To build from source, CMake 3.22+ is required. On Linux, run the following commands to build and install: + ```bash mkdir build cd build cmake .. make ``` + To build Linux package files, run + ```bash make package ``` + To install the library into your `CMAKE_INSTALL_PREFIX`, run + ``` make install ``` -### Importing with Conan -Conan 2.x is required to import this library. +#### With Conan + +To build the library with Conan: + +```bash +conan build . -of build --build=missing +``` + +To create the Conan package from source: + +```bash +conan create . +```

- Copyright © 2024-present + Copyright © 2026 Cameron Howell

diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt deleted file mode 100644 index 322cd94..0000000 --- a/cmake/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -set(LIBSERSI_PACKAGE_DIR - "${CMAKE_INSTALL_LIBDIR}/cmake/libsersi" -) - -include(CMakePackageConfigHelpers) -configure_package_config_file( - ${CMAKE_CURRENT_SOURCE_DIR}/libsersi-config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/libsersi-config.cmake - INSTALL_DESTINATION ${LIBSERSI_PACKAGE_DIR} - PATH_VARS CMAKE_INSTALL_INCLUDEDIR - CMAKE_INSTALL_LIBDIR - CMAKE_INSTALL_BINDIR - CMAKE_INSTALL_DOCDIR -) - -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/libsersi-config-version.cmake" - VERSION "${PROJECT_VERSION}" - COMPATIBILITY SameMajorVersion -) - -export(EXPORT libsersi-targets - FILE "${CMAKE_CURRENT_BINARY_DIR}/libsersi-targets.cmake" - NAMESPACE libsersi:: -) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libsersi-config.cmake - ${CMAKE_CURRENT_BINARY_DIR}/libsersi-config-version.cmake - ${CMAKE_CURRENT_SOURCE_DIR}/libsersi-api.cmake - DESTINATION ${LIBSERSI_PACKAGE_DIR} - COMPONENT devel -) - -install(EXPORT libsersi-targets - FILE libsersi-targets.cmake - NAMESPACE libsersi:: - DESTINATION ${LIBSERSI_PACKAGE_DIR} - COMPONENT devel -) - -install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/Modules/CodeCoverage.cmake - DESTINATION ${LIBSERSI_PACKAGE_DIR}/Modules - COMPONENT devel -) diff --git a/cmake/Modules/CodeCoverage.cmake b/cmake/Modules/CodeCoverage.cmake deleted file mode 100644 index c500cfa..0000000 --- a/cmake/Modules/CodeCoverage.cmake +++ /dev/null @@ -1,750 +0,0 @@ -# Copyright (c) 2012 - 2017, Lars Bilke -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its contributors -# may be used to endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# CHANGES: -# -# 2012-01-31, Lars Bilke -# - Enable Code Coverage -# -# 2013-09-17, Joakim Söderberg -# - Added support for Clang. -# - Some additional usage instructions. -# -# 2016-02-03, Lars Bilke -# - Refactored functions to use named parameters -# -# 2017-06-02, Lars Bilke -# - Merged with modified version from github.com/ufz/ogs -# -# 2019-05-06, Anatolii Kurotych -# - Remove unnecessary --coverage flag -# -# 2019-12-13, FeRD (Frank Dana) -# - Deprecate COVERAGE_LCOVR_EXCLUDES and COVERAGE_GCOVR_EXCLUDES lists in favor -# of tool-agnostic COVERAGE_EXCLUDES variable, or EXCLUDE setup arguments. -# - CMake 3.4+: All excludes can be specified relative to BASE_DIRECTORY -# - All setup functions: accept BASE_DIRECTORY, EXCLUDE list -# - Set lcov basedir with -b argument -# - Add automatic --demangle-cpp in lcovr, if 'c++filt' is available (can be -# overridden with NO_DEMANGLE option in setup_target_for_coverage_lcovr().) -# - Delete output dir, .info file on 'make clean' -# - Remove Python detection, since version mismatches will break gcovr -# - Minor cleanup (lowercase function names, update examples...) -# -# 2019-12-19, FeRD (Frank Dana) -# - Rename Lcov outputs, make filtered file canonical, fix cleanup for targets -# -# 2020-01-19, Bob Apthorpe -# - Added gfortran support -# -# 2020-02-17, FeRD (Frank Dana) -# - Make all add_custom_target()s VERBATIM to auto-escape wildcard characters -# in EXCLUDEs, and remove manual escaping from gcovr targets -# -# 2021-01-19, Robin Mueller -# - Add CODE_COVERAGE_VERBOSE option which will allow to print out commands which are run -# - Added the option for users to set the GCOVR_ADDITIONAL_ARGS variable to supply additional -# flags to the gcovr command -# -# 2020-05-04, Mihchael Davis -# - Add -fprofile-abs-path to make gcno files contain absolute paths -# - Fix BASE_DIRECTORY not working when defined -# - Change BYPRODUCT from folder to index.html to stop ninja from complaining about double defines -# -# 2021-05-10, Martin Stump -# - Check if the generator is multi-config before warning about non-Debug builds -# -# 2022-02-22, Marko Wehle -# - Change gcovr output from -o for --xml and --html output respectively. -# This will allow for Multiple Output Formats at the same time by making use of GCOVR_ADDITIONAL_ARGS, e.g. GCOVR_ADDITIONAL_ARGS "--txt". -# -# 2022-09-28, Sebastian Mueller -# - fix append_coverage_compiler_flags_to_target to correctly add flags -# - replace "-fprofile-arcs -ftest-coverage" with "--coverage" (equivalent) -# -# USAGE: -# -# 1. Copy this file into your cmake modules path. -# -# 2. Add the following line to your CMakeLists.txt (best inside an if-condition -# using a CMake option() to enable it just optionally): -# include(CodeCoverage) -# -# 3. Append necessary compiler flags for all supported source files: -# append_coverage_compiler_flags() -# Or for specific target: -# append_coverage_compiler_flags_to_target(YOUR_TARGET_NAME) -# -# 3.a (OPTIONAL) Set appropriate optimization flags, e.g. -O0, -O1 or -Og -# -# 4. If you need to exclude additional directories from the report, specify them -# using full paths in the COVERAGE_EXCLUDES variable before calling -# setup_target_for_coverage_*(). -# Example: -# set(COVERAGE_EXCLUDES -# '${PROJECT_SOURCE_DIR}/src/dir1/*' -# '/path/to/my/src/dir2/*') -# Or, use the EXCLUDE argument to setup_target_for_coverage_*(). -# Example: -# setup_target_for_coverage_lcov( -# NAME coverage -# EXECUTABLE testrunner -# EXCLUDE "${PROJECT_SOURCE_DIR}/src/dir1/*" "/path/to/my/src/dir2/*") -# -# 4.a NOTE: With CMake 3.4+, COVERAGE_EXCLUDES or EXCLUDE can also be set -# relative to the BASE_DIRECTORY (default: PROJECT_SOURCE_DIR) -# Example: -# set(COVERAGE_EXCLUDES "dir1/*") -# setup_target_for_coverage_gcovr_html( -# NAME coverage -# EXECUTABLE testrunner -# BASE_DIRECTORY "${PROJECT_SOURCE_DIR}/src" -# EXCLUDE "dir2/*") -# -# 5. Use the functions described below to create a custom make target which -# runs your test executable and produces a code coverage report. -# -# 6. Build a Debug build: -# cmake -DCMAKE_BUILD_TYPE=Debug .. -# make -# make my_coverage_target -# - -include(CMakeParseArguments) - -option(CODE_COVERAGE_VERBOSE "Verbose information" FALSE) - -# Check prereqs -find_program( GCOV_PATH gcov ) -find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl) -find_program( FASTCOV_PATH NAMES fastcov fastcov.py ) -find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat ) -find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test) -find_program( CPPFILT_PATH NAMES c++filt ) - -if(NOT GCOV_PATH) - message(FATAL_ERROR "gcov not found! Aborting...") -endif() # NOT GCOV_PATH - -# Check supported compiler (Clang, GNU and Flang) -get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) -foreach(LANG ${LANGUAGES}) - if("${CMAKE_${LANG}_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") - if("${CMAKE_${LANG}_COMPILER_VERSION}" VERSION_LESS 3) - message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") - endif() - elseif(NOT "${CMAKE_${LANG}_COMPILER_ID}" MATCHES "GNU" - AND NOT "${CMAKE_${LANG}_COMPILER_ID}" MATCHES "(LLVM)?[Ff]lang") - message(FATAL_ERROR "Compiler is not GNU or Flang! Aborting...") - endif() -endforeach() - -set(COVERAGE_COMPILER_FLAGS "-g --coverage" - CACHE INTERNAL "") - -if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") - include(CheckCXXCompilerFlag) - check_cxx_compiler_flag(-fprofile-abs-path HAVE_cxx_fprofile_abs_path) - if(HAVE_cxx_fprofile_abs_path) - set(COVERAGE_CXX_COMPILER_FLAGS "${COVERAGE_COMPILER_FLAGS} -fprofile-abs-path") - endif() -endif() -if(CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang)") - include(CheckCCompilerFlag) - check_c_compiler_flag(-fprofile-abs-path HAVE_c_fprofile_abs_path) - if(HAVE_c_fprofile_abs_path) - set(COVERAGE_C_COMPILER_FLAGS "${COVERAGE_COMPILER_FLAGS} -fprofile-abs-path") - endif() -endif() - -set(CMAKE_Fortran_FLAGS_COVERAGE - ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the Fortran compiler during coverage builds." - FORCE ) -set(CMAKE_CXX_FLAGS_COVERAGE - ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the C++ compiler during coverage builds." - FORCE ) -set(CMAKE_C_FLAGS_COVERAGE - ${COVERAGE_COMPILER_FLAGS} - CACHE STRING "Flags used by the C compiler during coverage builds." - FORCE ) -set(CMAKE_EXE_LINKER_FLAGS_COVERAGE - "" - CACHE STRING "Flags used for linking binaries during coverage builds." - FORCE ) -set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE - "" - CACHE STRING "Flags used by the shared libraries linker during coverage builds." - FORCE ) -mark_as_advanced( - CMAKE_Fortran_FLAGS_COVERAGE - CMAKE_CXX_FLAGS_COVERAGE - CMAKE_C_FLAGS_COVERAGE - CMAKE_EXE_LINKER_FLAGS_COVERAGE - CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) - -get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR GENERATOR_IS_MULTI_CONFIG)) - message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading") -endif() # NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR GENERATOR_IS_MULTI_CONFIG) - -if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - link_libraries(gcov) -endif() - -# Defines a target for running and collection code coverage information -# Builds dependencies, runs the given executable and outputs reports. -# NOTE! The executable should always have a ZERO as exit code otherwise -# the coverage generation will not complete. -# -# setup_target_for_coverage_lcov( -# NAME testrunner_coverage # New target name -# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR -# DEPENDENCIES testrunner # Dependencies to build first -# BASE_DIRECTORY "../" # Base directory for report -# # (defaults to PROJECT_SOURCE_DIR) -# EXCLUDE "src/dir1/*" "src/dir2/*" # Patterns to exclude (can be relative -# # to BASE_DIRECTORY, with CMake 3.4+) -# NO_DEMANGLE # Don't demangle C++ symbols -# # even if c++filt is found -# ) -function(setup_target_for_coverage_lcov) - - set(options NO_DEMANGLE SONARQUBE) - set(oneValueArgs BASE_DIRECTORY NAME) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES LCOV_ARGS GENHTML_ARGS) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT LCOV_PATH) - message(FATAL_ERROR "lcov not found! Aborting...") - endif() # NOT LCOV_PATH - - if(NOT GENHTML_PATH) - message(FATAL_ERROR "genhtml not found! Aborting...") - endif() # NOT GENHTML_PATH - - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if(DEFINED Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else() - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif() - - # Collect excludes (CMake 3.4+: Also compute absolute paths) - set(LCOV_EXCLUDES "") - foreach(EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_LCOV_EXCLUDES}) - if(CMAKE_VERSION VERSION_GREATER 3.4) - get_filename_component(EXCLUDE ${EXCLUDE} ABSOLUTE BASE_DIR ${BASEDIR}) - endif() - list(APPEND LCOV_EXCLUDES "${EXCLUDE}") - endforeach() - list(REMOVE_DUPLICATES LCOV_EXCLUDES) - - # Conditional arguments - if(CPPFILT_PATH AND NOT ${Coverage_NO_DEMANGLE}) - set(GENHTML_EXTRA_ARGS "--demangle-cpp") - endif() - - # Setting up commands which will be run to generate coverage data. - # Cleanup lcov - set(LCOV_CLEAN_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -directory . - -b ${BASEDIR} --zerocounters - ) - # Create baseline to make sure untouched files show up in the report - set(LCOV_BASELINE_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -c -i -d . -b - ${BASEDIR} -o ${Coverage_NAME}.base - ) - # Run tests - set(LCOV_EXEC_TESTS_CMD - ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} - ) - # Capturing lcov counters and generating report - set(LCOV_CAPTURE_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} --directory . -b - ${BASEDIR} --capture --output-file ${Coverage_NAME}.capture - ) - # add baseline counters - set(LCOV_BASELINE_COUNT_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} -a ${Coverage_NAME}.base - -a ${Coverage_NAME}.capture --output-file ${Coverage_NAME}.total - ) - # filter collected data to final coverage report - set(LCOV_FILTER_CMD - ${LCOV_PATH} ${Coverage_LCOV_ARGS} --gcov-tool ${GCOV_PATH} --remove - ${Coverage_NAME}.total ${LCOV_EXCLUDES} --output-file ${Coverage_NAME}.info - ) - # Generate HTML output - set(LCOV_GEN_HTML_CMD - ${GENHTML_PATH} ${GENHTML_EXTRA_ARGS} ${Coverage_GENHTML_ARGS} -o - ${Coverage_NAME} ${Coverage_NAME}.info - ) - if(${Coverage_SONARQUBE}) - # Generate SonarQube output - set(GCOVR_XML_CMD - ${GCOVR_PATH} --sonarqube ${Coverage_NAME}_sonarqube.xml -r ${BASEDIR} ${GCOVR_ADDITIONAL_ARGS} - ${GCOVR_EXCLUDE_ARGS} --object-directory=${PROJECT_BINARY_DIR} - ) - set(GCOVR_XML_CMD_COMMAND - COMMAND ${GCOVR_XML_CMD} - ) - set(GCOVR_XML_CMD_BYPRODUCTS ${Coverage_NAME}_sonarqube.xml) - set(GCOVR_XML_CMD_COMMENT COMMENT "SonarQube code coverage info report saved in ${Coverage_NAME}_sonarqube.xml.") - endif() - - - if(CODE_COVERAGE_VERBOSE) - message(STATUS "Executed command report") - message(STATUS "Command to clean up lcov: ") - string(REPLACE ";" " " LCOV_CLEAN_CMD_SPACED "${LCOV_CLEAN_CMD}") - message(STATUS "${LCOV_CLEAN_CMD_SPACED}") - - message(STATUS "Command to create baseline: ") - string(REPLACE ";" " " LCOV_BASELINE_CMD_SPACED "${LCOV_BASELINE_CMD}") - message(STATUS "${LCOV_BASELINE_CMD_SPACED}") - - message(STATUS "Command to run the tests: ") - string(REPLACE ";" " " LCOV_EXEC_TESTS_CMD_SPACED "${LCOV_EXEC_TESTS_CMD}") - message(STATUS "${LCOV_EXEC_TESTS_CMD_SPACED}") - - message(STATUS "Command to capture counters and generate report: ") - string(REPLACE ";" " " LCOV_CAPTURE_CMD_SPACED "${LCOV_CAPTURE_CMD}") - message(STATUS "${LCOV_CAPTURE_CMD_SPACED}") - - message(STATUS "Command to add baseline counters: ") - string(REPLACE ";" " " LCOV_BASELINE_COUNT_CMD_SPACED "${LCOV_BASELINE_COUNT_CMD}") - message(STATUS "${LCOV_BASELINE_COUNT_CMD_SPACED}") - - message(STATUS "Command to filter collected data: ") - string(REPLACE ";" " " LCOV_FILTER_CMD_SPACED "${LCOV_FILTER_CMD}") - message(STATUS "${LCOV_FILTER_CMD_SPACED}") - - message(STATUS "Command to generate lcov HTML output: ") - string(REPLACE ";" " " LCOV_GEN_HTML_CMD_SPACED "${LCOV_GEN_HTML_CMD}") - message(STATUS "${LCOV_GEN_HTML_CMD_SPACED}") - - if(${Coverage_SONARQUBE}) - message(STATUS "Command to generate SonarQube XML output: ") - string(REPLACE ";" " " GCOVR_XML_CMD_SPACED "${GCOVR_XML_CMD}") - message(STATUS "${GCOVR_XML_CMD_SPACED}") - endif() - endif() - - # Setup target - add_custom_target(${Coverage_NAME} - COMMAND ${LCOV_CLEAN_CMD} - COMMAND ${LCOV_BASELINE_CMD} - COMMAND ${LCOV_EXEC_TESTS_CMD} - COMMAND ${LCOV_CAPTURE_CMD} - COMMAND ${LCOV_BASELINE_COUNT_CMD} - COMMAND ${LCOV_FILTER_CMD} - COMMAND ${LCOV_GEN_HTML_CMD} - ${GCOVR_XML_CMD_COMMAND} - - # Set output files as GENERATED (will be removed on 'make clean') - BYPRODUCTS - ${Coverage_NAME}.base - ${Coverage_NAME}.capture - ${Coverage_NAME}.total - ${Coverage_NAME}.info - ${GCOVR_XML_CMD_BYPRODUCTS} - ${Coverage_NAME}/index.html - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." - ) - - # Show where to find the lcov info report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ; - COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info." - ${GCOVR_XML_CMD_COMMENT} - ) - - # Show info where to find the report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ; - COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." - ) - -endfunction() # setup_target_for_coverage_lcov - -# Defines a target for running and collection code coverage information -# Builds dependencies, runs the given executable and outputs reports. -# NOTE! The executable should always have a ZERO as exit code otherwise -# the coverage generation will not complete. -# -# setup_target_for_coverage_gcovr_xml( -# NAME ctest_coverage # New target name -# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR -# DEPENDENCIES executable_target # Dependencies to build first -# BASE_DIRECTORY "../" # Base directory for report -# # (defaults to PROJECT_SOURCE_DIR) -# EXCLUDE "src/dir1/*" "src/dir2/*" # Patterns to exclude (can be relative -# # to BASE_DIRECTORY, with CMake 3.4+) -# ) -# The user can set the variable GCOVR_ADDITIONAL_ARGS to supply additional flags to the -# GCVOR command. -function(setup_target_for_coverage_gcovr_xml) - - set(options NONE) - set(oneValueArgs BASE_DIRECTORY NAME) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT GCOVR_PATH) - message(FATAL_ERROR "gcovr not found! Aborting...") - endif() # NOT GCOVR_PATH - - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if(DEFINED Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else() - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif() - - # Collect excludes (CMake 3.4+: Also compute absolute paths) - set(GCOVR_EXCLUDES "") - foreach(EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_GCOVR_EXCLUDES}) - if(CMAKE_VERSION VERSION_GREATER 3.4) - get_filename_component(EXCLUDE ${EXCLUDE} ABSOLUTE BASE_DIR ${BASEDIR}) - endif() - list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") - endforeach() - list(REMOVE_DUPLICATES GCOVR_EXCLUDES) - - # Combine excludes to several -e arguments - set(GCOVR_EXCLUDE_ARGS "") - foreach(EXCLUDE ${GCOVR_EXCLUDES}) - list(APPEND GCOVR_EXCLUDE_ARGS "-e") - list(APPEND GCOVR_EXCLUDE_ARGS "${EXCLUDE}") - endforeach() - - # Set up commands which will be run to generate coverage data - # Run tests - set(GCOVR_XML_EXEC_TESTS_CMD - ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} - ) - # Running gcovr - set(GCOVR_XML_CMD - ${GCOVR_PATH} --xml ${Coverage_NAME}.xml -r ${BASEDIR} ${GCOVR_ADDITIONAL_ARGS} - ${GCOVR_EXCLUDE_ARGS} --object-directory=${PROJECT_BINARY_DIR} - ) - - if(CODE_COVERAGE_VERBOSE) - message(STATUS "Executed command report") - - message(STATUS "Command to run tests: ") - string(REPLACE ";" " " GCOVR_XML_EXEC_TESTS_CMD_SPACED "${GCOVR_XML_EXEC_TESTS_CMD}") - message(STATUS "${GCOVR_XML_EXEC_TESTS_CMD_SPACED}") - - message(STATUS "Command to generate gcovr XML coverage data: ") - string(REPLACE ";" " " GCOVR_XML_CMD_SPACED "${GCOVR_XML_CMD}") - message(STATUS "${GCOVR_XML_CMD_SPACED}") - endif() - - add_custom_target(${Coverage_NAME} - COMMAND ${GCOVR_XML_EXEC_TESTS_CMD} - COMMAND ${GCOVR_XML_CMD} - - BYPRODUCTS ${Coverage_NAME}.xml - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Running gcovr to produce Cobertura code coverage report." - ) - - # Show info where to find the report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ; - COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml." - ) -endfunction() # setup_target_for_coverage_gcovr_xml - -# Defines a target for running and collection code coverage information -# Builds dependencies, runs the given executable and outputs reports. -# NOTE! The executable should always have a ZERO as exit code otherwise -# the coverage generation will not complete. -# -# setup_target_for_coverage_gcovr_html( -# NAME ctest_coverage # New target name -# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR -# DEPENDENCIES executable_target # Dependencies to build first -# BASE_DIRECTORY "../" # Base directory for report -# # (defaults to PROJECT_SOURCE_DIR) -# EXCLUDE "src/dir1/*" "src/dir2/*" # Patterns to exclude (can be relative -# # to BASE_DIRECTORY, with CMake 3.4+) -# ) -# The user can set the variable GCOVR_ADDITIONAL_ARGS to supply additional flags to the -# GCVOR command. -function(setup_target_for_coverage_gcovr_html) - - set(options NONE) - set(oneValueArgs BASE_DIRECTORY NAME) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT GCOVR_PATH) - message(FATAL_ERROR "gcovr not found! Aborting...") - endif() # NOT GCOVR_PATH - - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if(DEFINED Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else() - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif() - - # Collect excludes (CMake 3.4+: Also compute absolute paths) - set(GCOVR_EXCLUDES "") - foreach(EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_GCOVR_EXCLUDES}) - if(CMAKE_VERSION VERSION_GREATER 3.4) - get_filename_component(EXCLUDE ${EXCLUDE} ABSOLUTE BASE_DIR ${BASEDIR}) - endif() - list(APPEND GCOVR_EXCLUDES "${EXCLUDE}") - endforeach() - list(REMOVE_DUPLICATES GCOVR_EXCLUDES) - - # Combine excludes to several -e arguments - set(GCOVR_EXCLUDE_ARGS "") - foreach(EXCLUDE ${GCOVR_EXCLUDES}) - list(APPEND GCOVR_EXCLUDE_ARGS "-e") - list(APPEND GCOVR_EXCLUDE_ARGS "${EXCLUDE}") - endforeach() - - # Set up commands which will be run to generate coverage data - # Run tests - set(GCOVR_HTML_EXEC_TESTS_CMD - ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS} - ) - # Create folder - set(GCOVR_HTML_FOLDER_CMD - ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/${Coverage_NAME} - ) - # Running gcovr - set(GCOVR_HTML_CMD - ${GCOVR_PATH} --html ${Coverage_NAME}/index.html --html-details -r ${BASEDIR} ${GCOVR_ADDITIONAL_ARGS} - ${GCOVR_EXCLUDE_ARGS} --object-directory=${PROJECT_BINARY_DIR} - ) - - if(CODE_COVERAGE_VERBOSE) - message(STATUS "Executed command report") - - message(STATUS "Command to run tests: ") - string(REPLACE ";" " " GCOVR_HTML_EXEC_TESTS_CMD_SPACED "${GCOVR_HTML_EXEC_TESTS_CMD}") - message(STATUS "${GCOVR_HTML_EXEC_TESTS_CMD_SPACED}") - - message(STATUS "Command to create a folder: ") - string(REPLACE ";" " " GCOVR_HTML_FOLDER_CMD_SPACED "${GCOVR_HTML_FOLDER_CMD}") - message(STATUS "${GCOVR_HTML_FOLDER_CMD_SPACED}") - - message(STATUS "Command to generate gcovr HTML coverage data: ") - string(REPLACE ";" " " GCOVR_HTML_CMD_SPACED "${GCOVR_HTML_CMD}") - message(STATUS "${GCOVR_HTML_CMD_SPACED}") - endif() - - add_custom_target(${Coverage_NAME} - COMMAND ${GCOVR_HTML_EXEC_TESTS_CMD} - COMMAND ${GCOVR_HTML_FOLDER_CMD} - COMMAND ${GCOVR_HTML_CMD} - - BYPRODUCTS ${PROJECT_BINARY_DIR}/${Coverage_NAME}/index.html # report directory - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Running gcovr to produce HTML code coverage report." - ) - - # Show info where to find the report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ; - COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report." - ) - -endfunction() # setup_target_for_coverage_gcovr_html - -# Defines a target for running and collection code coverage information -# Builds dependencies, runs the given executable and outputs reports. -# NOTE! The executable should always have a ZERO as exit code otherwise -# the coverage generation will not complete. -# -# setup_target_for_coverage_fastcov( -# NAME testrunner_coverage # New target name -# EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR -# DEPENDENCIES testrunner # Dependencies to build first -# BASE_DIRECTORY "../" # Base directory for report -# # (defaults to PROJECT_SOURCE_DIR) -# EXCLUDE "src/dir1/" "src/dir2/" # Patterns to exclude. -# NO_DEMANGLE # Don't demangle C++ symbols -# # even if c++filt is found -# SKIP_HTML # Don't create html report -# POST_CMD perl -i -pe s!${PROJECT_SOURCE_DIR}/!!g ctest_coverage.json # E.g. for stripping source dir from file paths -# ) -function(setup_target_for_coverage_fastcov) - - set(options NO_DEMANGLE SKIP_HTML) - set(oneValueArgs BASE_DIRECTORY NAME) - set(multiValueArgs EXCLUDE EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES FASTCOV_ARGS GENHTML_ARGS POST_CMD) - cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - if(NOT FASTCOV_PATH) - message(FATAL_ERROR "fastcov not found! Aborting...") - endif() - - if(NOT Coverage_SKIP_HTML AND NOT GENHTML_PATH) - message(FATAL_ERROR "genhtml not found! Aborting...") - endif() - - # Set base directory (as absolute path), or default to PROJECT_SOURCE_DIR - if(Coverage_BASE_DIRECTORY) - get_filename_component(BASEDIR ${Coverage_BASE_DIRECTORY} ABSOLUTE) - else() - set(BASEDIR ${PROJECT_SOURCE_DIR}) - endif() - - # Collect excludes (Patterns, not paths, for fastcov) - set(FASTCOV_EXCLUDES "") - foreach(EXCLUDE ${Coverage_EXCLUDE} ${COVERAGE_EXCLUDES} ${COVERAGE_FASTCOV_EXCLUDES}) - list(APPEND FASTCOV_EXCLUDES "${EXCLUDE}") - endforeach() - list(REMOVE_DUPLICATES FASTCOV_EXCLUDES) - - # Conditional arguments - if(CPPFILT_PATH AND NOT ${Coverage_NO_DEMANGLE}) - set(GENHTML_EXTRA_ARGS "--demangle-cpp") - endif() - - # Set up commands which will be run to generate coverage data - set(FASTCOV_EXEC_TESTS_CMD ${Coverage_EXECUTABLE} ${Coverage_EXECUTABLE_ARGS}) - - set(FASTCOV_CAPTURE_CMD ${FASTCOV_PATH} ${Coverage_FASTCOV_ARGS} --gcov ${GCOV_PATH} - --search-directory ${BASEDIR} - --process-gcno - --output ${Coverage_NAME}.json - --exclude ${FASTCOV_EXCLUDES} - ) - - set(FASTCOV_CONVERT_CMD ${FASTCOV_PATH} - -C ${Coverage_NAME}.json --lcov --output ${Coverage_NAME}.info - ) - - if(Coverage_SKIP_HTML) - set(FASTCOV_HTML_CMD ";") - else() - set(FASTCOV_HTML_CMD ${GENHTML_PATH} ${GENHTML_EXTRA_ARGS} ${Coverage_GENHTML_ARGS} - -o ${Coverage_NAME} ${Coverage_NAME}.info - ) - endif() - - set(FASTCOV_POST_CMD ";") - if(Coverage_POST_CMD) - set(FASTCOV_POST_CMD ${Coverage_POST_CMD}) - endif() - - if(CODE_COVERAGE_VERBOSE) - message(STATUS "Code coverage commands for target ${Coverage_NAME} (fastcov):") - - message(" Running tests:") - string(REPLACE ";" " " FASTCOV_EXEC_TESTS_CMD_SPACED "${FASTCOV_EXEC_TESTS_CMD}") - message(" ${FASTCOV_EXEC_TESTS_CMD_SPACED}") - - message(" Capturing fastcov counters and generating report:") - string(REPLACE ";" " " FASTCOV_CAPTURE_CMD_SPACED "${FASTCOV_CAPTURE_CMD}") - message(" ${FASTCOV_CAPTURE_CMD_SPACED}") - - message(" Converting fastcov .json to lcov .info:") - string(REPLACE ";" " " FASTCOV_CONVERT_CMD_SPACED "${FASTCOV_CONVERT_CMD}") - message(" ${FASTCOV_CONVERT_CMD_SPACED}") - - if(NOT Coverage_SKIP_HTML) - message(" Generating HTML report: ") - string(REPLACE ";" " " FASTCOV_HTML_CMD_SPACED "${FASTCOV_HTML_CMD}") - message(" ${FASTCOV_HTML_CMD_SPACED}") - endif() - if(Coverage_POST_CMD) - message(" Running post command: ") - string(REPLACE ";" " " FASTCOV_POST_CMD_SPACED "${FASTCOV_POST_CMD}") - message(" ${FASTCOV_POST_CMD_SPACED}") - endif() - endif() - - # Setup target - add_custom_target(${Coverage_NAME} - - # Cleanup fastcov - COMMAND ${FASTCOV_PATH} ${Coverage_FASTCOV_ARGS} --gcov ${GCOV_PATH} - --search-directory ${BASEDIR} - --zerocounters - - COMMAND ${FASTCOV_EXEC_TESTS_CMD} - COMMAND ${FASTCOV_CAPTURE_CMD} - COMMAND ${FASTCOV_CONVERT_CMD} - COMMAND ${FASTCOV_HTML_CMD} - COMMAND ${FASTCOV_POST_CMD} - - # Set output files as GENERATED (will be removed on 'make clean') - BYPRODUCTS - ${Coverage_NAME}.info - ${Coverage_NAME}.json - ${Coverage_NAME}/index.html # report directory - - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - DEPENDS ${Coverage_DEPENDENCIES} - VERBATIM # Protect arguments to commands - COMMENT "Resetting code coverage counters to zero. Processing code coverage counters and generating report." - ) - - set(INFO_MSG "fastcov code coverage info report saved in ${Coverage_NAME}.info and ${Coverage_NAME}.json.") - if(NOT Coverage_SKIP_HTML) - string(APPEND INFO_MSG " Open ${PROJECT_BINARY_DIR}/${Coverage_NAME}/index.html in your browser to view the coverage report.") - endif() - # Show where to find the fastcov info report - add_custom_command(TARGET ${Coverage_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E echo ${INFO_MSG} - ) - -endfunction() # setup_target_for_coverage_fastcov - -function(append_coverage_compiler_flags) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE) - message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}") -endfunction() # append_coverage_compiler_flags - -# Setup coverage for specific library -function(append_coverage_compiler_flags_to_target name) - separate_arguments(_flag_list NATIVE_COMMAND "${COVERAGE_COMPILER_FLAGS}") - target_compile_options(${name} PRIVATE ${_flag_list}) - if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - target_link_libraries(${name} PRIVATE gcov) - endif() -endfunction() diff --git a/cmake/libsersi-api.cmake b/cmake/libsersi-api.cmake deleted file mode 100644 index d38409f..0000000 --- a/cmake/libsersi-api.cmake +++ /dev/null @@ -1,92 +0,0 @@ -macro(libsersi_project_defaults) - string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER) - set(${PROJECT_NAME_UPPER}_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) - set(${PROJECT_NAME_UPPER}_VERSION_MINOR ${PROJECT_VERSION_MINOR}) - set(${PROJECT_NAME_UPPER}_VERSION_PATCH ${PROJECT_VERSION_PATCH}) - set(${PROJECT_NAME_UPPER}_VERSION ${PROJECT_VERSION}) - set(CI_BUILD_ID 0 CACHE STRING "CI build number") - - message(STATUS "${PROJECT_NAME_UPPER} Version: ${PROJECT_VERSION}") - - # Ensure compiling for C++17 - set(CMAKE_CXX_STANDARD 17) - set(CMAKE_CXX_STANDARD_REQUIRED ON) - set(CMAKE_CXX_EXTENSIONS ON) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") - - set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - - if(BUILD_SHARED_LIBS) - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) - endif() - - # Use GNU installation directories - include(GNUInstallDirs) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) - - # CMake CCache - find_program(CCACHE_EXE ccache) - if(CCACHE_EXE) - set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_EXE}) - set(CMAKE_CC_COMPILER_LAUNCHER ${CCACHE_EXE}) - endif() - - set(CMAKE_BUILD_TYPES "" None Debug Release Profile RelWithDebugInfo MinSizeRel) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_BUILD_TYPES}) - if(NOT CMAKE_CXX_FLAGS_PROFILE) - set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE} -pg" - CACHE STRING "Flags used by the compiler during profile builds." FORCE - ) - set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE} -pg" - CACHE STRING "Flags used by the compiler during profile builds." FORCE - ) - set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -pg" - CACHE STRING "Flags used by the linker during profile builds." FORCE - ) - set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -pg" - CACHE STRING "Flags used by the linker during profile builds." FORCE - ) - mark_as_advanced( - CMAKE_CXX_FLAGS_PROFILE - CMAKE_C_FLAGS_PROFILE - CMAKE_EXE_LINKER_FLAGS_PROFILE - CMAKE_SHARED_LINKER_FLAGS_PROFILE - ) - endif() - - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message(STATUS "Setting build type to 'Release' as none was specified.") - set(CMAKE_BUILD_TYPE "Release" CACHE - STRING "Choose the type of build." FORCE - ) - endif() - - if(NOT CMAKE_BUILD_TYPE IN_LIST CMAKE_BUILD_TYPES) - message(FATAL_ERROR "CMAKE_BUILD_TYPE should be one of ${CMAKE_BUILD_TYPES}") - endif() - - option(BUILD_TESTS "Build test suites" ON) - option(BUILD_DOCS "Build documentation" ON) - option(ENABLE_COVERAGE "Enable code coverage instrumentation" OFF) - option(ENABLE_LINT "Enable source code linting" OFF) - - if(BUILD_TESTS) - enable_testing() - endif() - - if(ENABLE_LINT) - find_program(CLANGTIDY_EXE clang-tidy) - if(CLANGTIDY_EXE) - set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY_EXE}) - set(CMAKE_C_CLANG_TIDY ${CLANGTIDY_EXE}) - endif() - - find_program(CPPLINT_EXE cpplint) - if(CPPLINT_EXE) - set(CMAKE_CXX_CPPLINT ${CPPLINT_EXE} --quiet) - endif() - endif() - -endmacro(libsersi_project_defaults) diff --git a/cmake/libsersi-config.cmake.in b/cmake/libsersi-config.cmake.in deleted file mode 100644 index 1bd20eb..0000000 --- a/cmake/libsersi-config.cmake.in +++ /dev/null @@ -1,20 +0,0 @@ -set(LIBSERSI_VERSION_MAJOR @PROJECT_VERSION_MAJOR@) -set(LIBSERSI_VERSION_MINOR @PROJECT_VERSION_MINOR@) -set(LIBSERSI_VERSION_PATCH @PROJECT_VERSION_PATCH@) -set(LIBSERSI_VERSION @PROJECT_VERSION@) - -@PACKAGE_INIT@ - -set_and_check(LIBSERSI_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") -set_and_check(LIBSERSI_LIB_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@") -set_and_check(LIBSERSI_PACKAGE_DIR "@PACKAGE_CMAKE_INSTALL_LIBDIR@/cmake/libsersi") -if (${_NAME}_doc_FOUND) - set_and_check(LIBSERSI_DOC_DIR "@PACKAGE_CMAKE_INSTALL_DOCDIR@") -endif() - -include(${CMAKE_CURRENT_LIST_DIR}/libsersi-targets.cmake) - -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/Modules) -list(APPEND CMAKE_PROGRAM_PATH ${CMAKE_CURRENT_LIST_DIR}/Modules) - -include(${CMAKE_CURRENT_LIST_DIR}/libsersi-api.cmake) diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 0000000..a977d09 --- /dev/null +++ b/conanfile.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from conan import ConanFile +from conan.tools.build import check_min_cppstd +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout + +required_conan_version = ">=2.9.3" + + +class SersiConan(ConanFile): + name = "sersi" + version = "0.2.0" + + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeToolchain", "CMakeDeps" + + def validate(self): + if self.info.settings.get_safe("compiler.cppstd"): + check_min_cppstd(self, 17) + + def build(self): + cmake = CMake(self) + cmake.configure( + variables={"PROJECT_NAME": self.name, "PROJECT_VERSION": self.version} + ) + cmake.build() diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt new file mode 100644 index 0000000..7a77674 --- /dev/null +++ b/include/CMakeLists.txt @@ -0,0 +1,8 @@ +# Create list of all headers +file(GLOB_RECURSE protocol_hdrs + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + *.hpp +) + +install(FILES ${protocol_hdrs} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi) diff --git a/include/DistributedEmissions.hpp b/include/DistributedEmissions.hpp new file mode 100644 index 0000000..16811e5 --- /dev/null +++ b/include/DistributedEmissions.hpp @@ -0,0 +1,65 @@ +#pragma once + +namespace dis { +// Section 5.3.7.1. Information about active electronic warfare (EW) emissions +// and active EW countermeasures shall be communicated using an Electromagnetic +// Emission PDU. COMPLETE (I think) + +class ElectromagneticEmissionsPdu : public Pdu { + private: + /** ID of the entity emitting */ + EntityID emitting_entity_id_; + + /** ID of event */ + EventID event_id_; + + /** This field shall be used to indicate if the data in the PDU represents a + * state update or just data that has changed since issuance of the last + * Electromagnetic Emission PDU [relative to the identified entity and + * emission system(s)]. */ + uint8_t state_update_indicator_; + + /** This field shall specify the number of emission systems being described in + * the current PDU. */ + uint8_t number_of_systems_; + + /** padding */ + uint16_t padding_for_emissions_pdu_; + + /** Electromagnetic emmissions systems */ + std::vector systems_; + + public: + ElectromagneticEmissionsPdu(); + ~ElectromagneticEmissionsPdu() override; + + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; + + EntityID& GetEmittingEntityId(); + [[nodiscard]] const EntityID& GetEmittingEntityId() const; + void SetEmittingEntityId(const EntityID& value); + + EventID& GetEventId(); + [[nodiscard]] const EventID& GetEventId() const; + void SetEventId(const EventID& value); + + [[nodiscard]] uint8_t GetStateUpdateIndicator() const; + void SetStateUpdateIndicator(uint8_t value); + + [[nodiscard]] uint8_t GetNumberOfSystems() const; + + [[nodiscard]] uint16_t GetPaddingForEmissionsPdu() const; + void SetPaddingForEmissionsPdu(uint16_t value); + + std::vector& GetSystems(); + [[nodiscard]] const std::vector& + GetSystems() const; + void SetSystems(const std::vector& value); + + [[nodiscard]] std::size_t GetMarshalledSize() const override; + + bool operator==(const ElectromagneticEmissionsPdu& rhs) const; +}; + +} diff --git a/include/EntityInformation.hpp b/include/EntityInformation.hpp new file mode 100644 index 0000000..c0b0d8b --- /dev/null +++ b/include/EntityInformation.hpp @@ -0,0 +1,39 @@ +#pragma once + +#include common/EntityID.h" +#include common/EventID.h" +#include common/Pdu.hpp" +#include common/Vector3Float.h" + +namespace dis { +class CollisionElasticPdu final : public Pdu { + FIELD(EntityID, issuing_entity_id) + FIELD(EntityID, colliding_entity_id) + FIELD(EventID, collision_event_id) + FIELD(uint16_t, padding) + FIELD(Vector3Float, contact_velocity) + FIELD(float, mass) + FIELD(Vector3Float, location) + FIELD(float, collision_result_xx) + FIELD(float, collision_result_xy) + FIELD(float, collision_result_xz) + FIELD(float, collision_result_yy) + FIELD(float, collision_result_yz) + FIELD(float, collision_result_zz) + FIELD(Vector3Float, unit_surface_normal) + FIELD(float, coefficient_of_restitution) + + public: + CollisionElasticPdu(); + ~CollisionElasticPdu() final; + + Result Marshal(ByteBuffer& data_stream) const final; + Result Unmarshal(ByteBuffer& data_stream) final; + + [[nodiscard]] std::size_t GetMarshalledSize() const final; + + friend bool operator==(const CollisionElasticPdu& lhs, const CollisionElasticPdu& rhs) { + return lhs.issuing_entity_id_ == rhs.issuing_entity_id_; + } +}; +} // namespace dis diff --git a/include/EntityManagement.hpp b/include/EntityManagement.hpp new file mode 100644 index 0000000..e69de29 diff --git a/include/Logistics.hpp b/include/Logistics.hpp new file mode 100644 index 0000000..e69de29 diff --git a/include/Minefield.hpp b/include/Minefield.hpp new file mode 100644 index 0000000..e69de29 diff --git a/include/RadioCommunications.hpp b/include/RadioCommunications.hpp new file mode 100644 index 0000000..e69de29 diff --git a/include/Warfare.hpp b/include/Warfare.hpp new file mode 100644 index 0000000..3f3375f --- /dev/null +++ b/include/Warfare.hpp @@ -0,0 +1,148 @@ +// libsersi - C++ implementation of the IEEE 1278.1-2012 Distributed +// Interactive Simulation application protocol specification +// Copyright (C) 2026 Cameron Howell +// +// Licensed under the BSD-2-Clause License + +#pragma once + +#include "common/data_types/ArticulationParameter.hpp" +#include "common/data_types/BurstDescriptor.hpp" +#include "common/data_types/EntityID.hpp" +#include "common/data_types/EventID.hpp" +#include "common/Pdu.hpp" +#include "common/data_types/Vector3Double.hpp" +#include "common/data_types/Vector3Float.hpp" +#include "common/data_types/ClockTime.hpp" +#include "utils/ByteBuffer.hpp" + +namespace dis { +/// Implemented according to IEEE 1278.1-2012 §7.3.2 +class FirePdu final : public Pdu { + FIELD(EntityID, firing_entity_id) + FIELD(EntityID, target_entity_id) + FIELD(EntityID, munition_id) + FIELD(EventID, event_id) + FIELD(int, fire_mission_index) + FIELD(Vector3Double, location_in_world_coordinates) + FIELD(BurstDescriptor, burst_descriptor) + FIELD(Vector3Float, velocity) + FIELD(float, range) + + public: + FirePdu(); + ~FirePdu() final; + + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; + + [[nodiscard]] std::size_t GetMarshalledSize() const final; + + friend bool operator==(const FirePdu& lhs, const FirePdu& rhs) { + return lhs.firing_entity_id_ == rhs.firing_entity_id_ && lhs.target_entity_id_ == rhs.target_entity_id_ && + lhs.munition_id_ == rhs.munition_id_ && lhs.event_id_ == rhs.event_id_ && + lhs.fire_mission_index_ == rhs.fire_mission_index_ && + lhs.location_in_world_coordinates_ == rhs.location_in_world_coordinates_ && + lhs.burst_descriptor_ == rhs.burst_descriptor_ && lhs.velocity_ == rhs.velocity_ && lhs.range_ == rhs.range_; + } +}; + +/// Implemented according to IEEE 1278.1-2012 §7.3.3 +class DetonationPdu final : public Pdu { + FIELD(EntityID, firing_entity_id) + FIELD(EntityID, target_entity_id) + FIELD(EntityID, munition_id) + FIELD(EventID, event_id) + FIELD(Vector3Float, velocity) + FIELD(Vector3Double, location_in_world_coordinates) + FIELD(BurstDescriptor, burst_descriptor) + FIELD(Vector3Float, location_in_entity_coordinates) + FIELD(uint8_t, detonation_result) + FIELD(uint8_t, number_of_articulation_parameters) + FIELD(uint16_t, padding) + FIELD(std::vector, articulation_parameters) + + public: + DetonationPdu(); + ~DetonationPdu() final; + + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; + + [[nodiscard]] std::size_t GetMarshalledSize() const final; + + friend bool operator==(const DetonationPdu& lhs, const DetonationPdu& rhs) { + return lhs.firing_entity_id_ == rhs.firing_entity_id_ && lhs.target_entity_id_ == rhs.target_entity_id_ && + lhs.munition_id_ == rhs.munition_id_ && lhs.event_id_ == rhs.event_id_; + } +}; + +/// Implemented according to IEEE 1278.1-2012 §7.3.4 +class DirectedEnergyFirePdu final : public Pdu { + FIELD(EntityID, firing_entity_id) + FIELD(EventID, event_id) + FIELD(EntityType, munition_type) + FIELD(ClockTime, shot_start_time) + FIELD(float, cumulative_shot_time) + FIELD(EntityCoordinateVector, aperture_emitter_location) + FIELD(float, aperture_diameter) + FIELD(float, wavelength) + FIELD(uint32_t, padding) + FIELD(float, pulse_repetition_frequency) + FIELD(float, pulse_width) + FIELD(uint16_t, flags) + FIELD(DEFirePulseShape, pulse_shape) + FIELD(uint8_t, padding2) + FIELD(uint32_t, padding3) + FIELD(uint16_t, padding4) + FIELD(uint16_t, number_of_de_records) + FIELD(std::vector, damage_descriptions) + + public: + DirectedEnergyFirePdu(); + ~DirectedEnergyFirePdu() final; + + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; + + [[nodiscard]] std::size_t GetMarshalledSize() const final; + + friend bool operator==(const DirectedEnergyFirePdu& lhs, const DirectedEnergyFirePdu& rhs) { + return lhs.firing_entity_id_ == rhs.firing_entity_id_ && lhs.event_id_ == rhs.event_id_ && + lhs.munition_type_ == rhs.munition_type_ && lhs.shot_start_time_ == rhs.shot_start_time_ && + lhs.cumulative_shot_time_ == rhs.cumulative_shot_time_ && + lhs.aperture_emitter_location_ == rhs.aperture_emitter_location_ && + lhs.aperture_diameter_ == rhs.aperture_diameter_ && lhs.wavelength_ == rhs.wavelength_ && + lhs.padding_ == rhs.padding_ && lhs.pulse_repetition_frequency_ == rhs.pulse_repetition_frequency_ && + lhs.pulse_width_ == rhs.pulse_width_ && lhs.flags_ == rhs.flags_ && lhs.pulse_shape_ == rhs.pulse_shape_ && + lhs.padding2_ == rhs.padding2_ && lhs.padding3_ == rhs.padding3_ && lhs.padding4_ == rhs.padding4_ && + lhs.number_of_de_records_ == rhs.number_of_de_records_ && + lhs.damage_descriptions_ == rhs.damage_descriptions_; + } +}; + +/// Implemented according to IEEE 1278.1-2012 §7.3.5 +class EntityDamageStatusPdu final : public Pdu { + FIELD(EntityID, damaged_entity_id); + FIELD(uint16_t, padding); + FIELD(uint16_t, padding2); + FIELD(uint16_t, number_of_damage_descriptions); + FIELD(std::vector, damage_descriptions); + + public: + EntityDamageStatusPdu(); + ~EntityDamageStatusPdu() final; + + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; + + [[nodiscard]] std::size_t GetMarshalledSize() const final; + + friend bool operator==(const EntityDamageStatusPdu& lhs, const EntityDamageStatusPdu& rhs) { + return lhs.damaged_entity_id_ == rhs.damaged_entity_id_ && lhs.padding_ == rhs.padding_ && + lhs.padding2_ == rhs.padding2_ && lhs.number_of_damage_descriptions_ == rhs.number_of_damage_descriptions_ && + lhs.damage_descriptions_ == rhs.damage_descriptions_; + } +}; + +} // namespace dis diff --git a/src/libsersi/warfare/BurstDescriptor.h b/include/common/BurstDescriptor.hpp similarity index 79% rename from src/libsersi/warfare/BurstDescriptor.h rename to include/common/BurstDescriptor.hpp index 398b898..0770c40 100644 --- a/src/libsersi/warfare/BurstDescriptor.h +++ b/include/common/BurstDescriptor.hpp @@ -1,8 +1,8 @@ -#ifndef LIBSERSI_WARFARE_BURSTDESCRIPTOR_H_ -#define LIBSERSI_WARFARE_BURSTDESCRIPTOR_H_ +#pragma once -#include "libsersi/common/EntityType.h" -#include "libsersi/utils/DataStream.h" +#include "common/data_types/EntityType.hpp" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.2.7. Specifies the type of muntion fired, the type of warhead, the @@ -30,8 +30,8 @@ class BurstDescriptor { BurstDescriptor(); ~BurstDescriptor() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); EntityType& GetMunition(); [[nodiscard]] const EntityType& GetMunition() const; @@ -54,5 +54,3 @@ class BurstDescriptor { bool operator==(const BurstDescriptor& rhs) const; }; } // namespace dis - -#endif // LIBSERSI_WARFARE_BURSTDESCRIPTOR_H_ diff --git a/include/common/Pdu.hpp b/include/common/Pdu.hpp new file mode 100644 index 0000000..405b4ab --- /dev/null +++ b/include/common/Pdu.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include "common/PduHeader.hpp" +#include "common/Result.hpp" +#include "utils/ByteBuffer.hpp" + +#define FIELD(type, name) \ + private: \ + type name##_; \ + \ + public: \ + const type& name() const { return name##_; } \ + void name(const type& value) { name##_ = value; } + +namespace dis { +// The superclass for all PDUs. This incorporates the PduHeader record, +// section 5.2.29. + +class Pdu { + protected: + PduHeader header_; // NOLINT + + public: + Pdu() = default; + virtual ~Pdu() = default; + + virtual Result Marshal(ByteBuffer& byte_buffer) const; + virtual Result Unmarshal(ByteBuffer& byte_buffer); + + [[nodiscard]] const PduHeader header() const; + + [[nodiscard]] virtual std::size_t GetMarshalledSize() const; + + bool operator==(const Pdu& rhs) const; +}; +} // namespace dis diff --git a/include/common/PduHeader.hpp b/include/common/PduHeader.hpp new file mode 100644 index 0000000..3ab92b5 --- /dev/null +++ b/include/common/PduHeader.hpp @@ -0,0 +1,74 @@ +#pragma once + +#include + +#include "common/enums.hpp" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" + +namespace dis { + +class PduStatusRecord { + public: + // TransferredEntityIdenticator tei_; + // LVCIndicator lvc_; + // CoupledExtensionIndicator cei_; + // B2 bit4_5_; + // B2 _reserved; +}; + +class PduHeader { + public: + PduHeader() = default; + ~PduHeader() = default; + + uint32_t CalculateDISTimestamp(); + + [[nodiscard]] ProtocolVersion protocol_version() const; + void protocol_version(ProtocolVersion value); + + [[nodiscard]] uint8_t exercise_id() const; + void exercise_id(uint8_t value); + + [[nodiscard]] PduType pdu_type() const; + void pdu_type(PduType value); + + [[nodiscard]] ProtocolFamily protocol_family() const; + void protocol_family(ProtocolFamily value); + + [[nodiscard]] uint32_t timestamp() const; + void timestamp(uint32_t value); + + [[nodiscard]] uint16_t length() const; + void length(uint16_t value); + + [[nodiscard]] PduStatusRecord status_record() const; + void status_record(PduStatusRecord value); + + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); + + private: + /// The version of the protocol + ProtocolVersion protocol_version_; + + /// Exercise ID + uint8_t exercise_id_; + + /// Type of PDU, unique for each PDU class + PduType pdu_type_; + + /// Value that refers to the protocol family + ProtocolFamily protocol_family_; + + /// Timestamp value + uint32_t timestamp_; + + /// Length, in bytes, of the PDU + uint16_t length_; + + /// PDU status record + PduStatusRecord status_record_; +}; + +} // namespace dis diff --git a/src/libsersi/common/RecordSet.h b/include/common/RecordSet.hpp similarity index 85% rename from src/libsersi/common/RecordSet.h rename to include/common/RecordSet.hpp index 7fa7b56..8a8c88c 100644 --- a/src/libsersi/common/RecordSet.h +++ b/include/common/RecordSet.hpp @@ -2,7 +2,8 @@ #include -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Record sets, used in transfer control request PDU @@ -31,8 +32,8 @@ class RecordSet { RecordSet(); ~RecordSet() = default; - void Marshal(dis::DataStream& data_stream) const; - void Unmarshal(dis::DataStream& data_stream); + Result Marshal(dis::ByteBuffer& byte_buffer) const; + Result Unmarshal(dis::ByteBuffer& byte_buffer); [[nodiscard]] uint32_t GetRecordId() const; void SetRecordId(uint32_t value); diff --git a/include/common/Result.hpp b/include/common/Result.hpp new file mode 100644 index 0000000..9ea1fba --- /dev/null +++ b/include/common/Result.hpp @@ -0,0 +1,100 @@ +#pragma once + +#include +#include +#include + +#define TRY(expr) \ + do { \ + auto _res = (expr); \ + if (!_res) return Result::Err(*_res.err()); \ + } while (false) + +template +class Result { + public: + using value_type = T; + using error_type = E; + + explicit operator bool() const noexcept { return is_ok(); } + + static Result Ok(T value) { return Result(std::move(value)); } + static Result Err(E error) { return Result(std::move(error), err_tag{}); } + + [[nodiscard]] bool is_ok() const noexcept { return std::holds_alternative(data_); } + + [[nodiscard]] bool is_err() const noexcept { return std::holds_alternative(data_); } + + const T& unwrap() const { + if (is_err()) { + throw std::logic_error("Called unwrap() on Err"); + } + return std::get(data_); + } + + const E& unwrap_err() const { + if (is_ok()) { + throw std::logic_error("Called unwrap_err() on Ok"); + } + return std::get(data_); + } + + const T* ok() const noexcept { return std::get_if(&data_); } + + const E* err() const noexcept { return std::get_if(&data_); } + + private: + struct err_tag {}; + + explicit Result(T value) : data_(std::move(value)) {} + + Result(E error, [[maybe_unused]] err_tag et) : data_(std::move(error)) {} + + std::variant data_; +}; + +template +class [[nodiscard]] Result { + public: + using error_type = E; + + explicit operator bool() const noexcept { return is_ok(); } + + // Factory helpers + static Result Ok() { return Result(ok_tag{}); } + + static Result Err(E error) { return Result(std::move(error)); } + + // Observers + [[nodiscard]] bool is_ok() const noexcept { return std::holds_alternative(data_); } + + [[nodiscard]] bool is_err() const noexcept { return std::holds_alternative(data_); } + + // Checked accessors + void unwrap() const { + if (is_err()) { + throw std::logic_error("Called unwrap() on Err"); + } + } + + const E& unwrap_err() const { + if (is_ok()) { + throw std::logic_error("Called unwrap_err() on Ok"); + } + return std::get(data_); + } + + // Optional-style accessors + [[nodiscard]] bool ok() const noexcept { return is_ok(); } + + const E* err() const noexcept { return std::get_if(&data_); } + + private: + struct ok_tag {}; + + explicit Result(ok_tag) : data_(ok_tag{}) {} // NOLINT + + explicit Result(E error) : data_(std::move(error)) {} + + std::variant data_; +}; diff --git a/src/libsersi/distributed_emissions/AcousticBeamData.h b/include/common/data_types/AcousticBeamData.h similarity index 73% rename from src/libsersi/distributed_emissions/AcousticBeamData.h rename to include/common/data_types/AcousticBeamData.h index e090113..21a572a 100644 --- a/src/libsersi/distributed_emissions/AcousticBeamData.h +++ b/include/common/data_types/AcousticBeamData.h @@ -1,10 +1,9 @@ -#ifndef LIBSERSI_DISTRIBUTED_EMISSIONS_ACOUSTICBEAMDATA_H_ -#define LIBSERSI_DISTRIBUTED_EMISSIONS_ACOUSTICBEAMDATA_H_ +#pragma once #include -#include "libsersi/distributed_emissions/AcousticBeamFundamentalParameter.h" -#include "libsersi/utils/DataStream.h" +#include distributed_emissions/AcousticBeamFundamentalParameter.h" +#include utils/ByteBuffer.hpp" namespace dis { // Used in UA PDU @@ -27,8 +26,8 @@ class AcousticBeamData { AcousticBeamData(); ~AcousticBeamData() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetBeamDataLength() const; void SetBeamDataLength(uint16_t value); @@ -50,5 +49,3 @@ class AcousticBeamData { bool operator==(const AcousticBeamData& rhs) const; }; } // namespace dis - -#endif // LIBSERSI_DISTRIBUTED_EMISSIONS_ACOUSTICBEAMDATA_H_ diff --git a/src/libsersi/distributed_emissions/AcousticBeamFundamentalParameter.h b/include/common/data_types/AcousticBeamFundamentalParameter.h similarity index 90% rename from src/libsersi/distributed_emissions/AcousticBeamFundamentalParameter.h rename to include/common/data_types/AcousticBeamFundamentalParameter.h index 43739e5..fef5c33 100644 --- a/src/libsersi/distributed_emissions/AcousticBeamFundamentalParameter.h +++ b/include/common/data_types/AcousticBeamFundamentalParameter.h @@ -3,7 +3,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Used in UaPdu @@ -32,8 +32,8 @@ class AcousticBeamFundamentalParameter { AcousticBeamFundamentalParameter(); ~AcousticBeamFundamentalParameter() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetActiveEmissionParameterIndex() const; void SetActiveEmissionParameterIndex(uint16_t value); diff --git a/src/libsersi/distributed_emissions/AcousticEmitter.h b/include/common/data_types/AcousticEmitter.h similarity index 86% rename from src/libsersi/distributed_emissions/AcousticEmitter.h rename to include/common/data_types/AcousticEmitter.h index a6063d4..dfbf172 100644 --- a/src/libsersi/distributed_emissions/AcousticEmitter.h +++ b/include/common/data_types/AcousticEmitter.h @@ -3,7 +3,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.35. information about a specific UA emmtter @@ -23,8 +23,8 @@ class AcousticEmitter { AcousticEmitter(); ~AcousticEmitter() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetAcousticName() const; void SetAcousticName(uint16_t value); diff --git a/src/libsersi/distributed_emissions/AcousticEmitterSystem.h b/include/common/data_types/AcousticEmitterSystem.h similarity index 89% rename from src/libsersi/distributed_emissions/AcousticEmitterSystem.h rename to include/common/data_types/AcousticEmitterSystem.h index 53f6eae..c81b086 100644 --- a/src/libsersi/distributed_emissions/AcousticEmitterSystem.h +++ b/include/common/data_types/AcousticEmitterSystem.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.3.35: Information about a particular UA emitter shall be represented using @@ -29,8 +29,8 @@ class AcousticEmitterSystem { AcousticEmitterSystem(); ~AcousticEmitterSystem() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetAcousticName() const; void SetAcousticName(uint16_t value); diff --git a/src/libsersi/distributed_emissions/AcousticEmitterSystemData.h b/include/common/data_types/AcousticEmitterSystemData.h similarity index 86% rename from src/libsersi/distributed_emissions/AcousticEmitterSystemData.h rename to include/common/data_types/AcousticEmitterSystemData.h index 495217f..be8bfe6 100644 --- a/src/libsersi/distributed_emissions/AcousticEmitterSystemData.h +++ b/include/common/data_types/AcousticEmitterSystemData.h @@ -3,10 +3,10 @@ #include #include -#include "libsersi/common/Vector3Float.h" -#include "libsersi/distributed_emissions/AcousticBeamData.h" -#include "libsersi/distributed_emissions/AcousticEmitterSystem.h" -#include "libsersi/utils/DataStream.h" +#include common/Vector3Float.h" +#include distributed_emissions/AcousticBeamData.h" +#include distributed_emissions/AcousticEmitterSystem.h" +#include utils/ByteBuffer.hpp" namespace dis { // Used in the UA pdu; ties together an emmitter and a location. This requires @@ -38,8 +38,8 @@ class AcousticEmitterSystemData { AcousticEmitterSystemData(); ~AcousticEmitterSystemData(); - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetEmitterSystemDataLength() const; void SetEmitterSystemDataLength(uint8_t value); diff --git a/src/libsersi/distributed_emissions/ApaData.h b/include/common/data_types/ApaData.h similarity index 79% rename from src/libsersi/distributed_emissions/ApaData.h rename to include/common/data_types/ApaData.h index 3b80e89..b73d32f 100644 --- a/src/libsersi/distributed_emissions/ApaData.h +++ b/include/common/data_types/ApaData.h @@ -3,7 +3,7 @@ #include #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Used in UA PDU @@ -20,8 +20,8 @@ class ApaData { ApaData(); ~ApaData() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetParameterIndex() const; void SetParameterIndex(uint16_t value); diff --git a/src/libsersi/common/ArticulationParameter.h b/include/common/data_types/ArticulationParameter.hpp similarity index 80% rename from src/libsersi/common/ArticulationParameter.h rename to include/common/data_types/ArticulationParameter.hpp index 8443c86..2912822 100644 --- a/src/libsersi/common/ArticulationParameter.h +++ b/include/common/data_types/ArticulationParameter.hpp @@ -1,9 +1,9 @@ -#ifndef LIBSERSI_COMMON_ARTICULATIONPARAMETER_H_ -#define LIBSERSI_COMMON_ARTICULATIONPARAMETER_H_ +#pragma once #include -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.2.5. Articulation parameters for movable parts and attached parts @@ -27,8 +27,8 @@ class ArticulationParameter { ArticulationParameter(); ~ArticulationParameter() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetParameterTypeDesignator() const; void SetParameterTypeDesignator(uint8_t value); @@ -51,6 +51,3 @@ class ArticulationParameter { }; } // namespace dis - -#endif // LIBSERSI_COMMON_ARTICULATIONPARAMETER_H_ - diff --git a/src/libsersi/distributed_emissions/BeamData.h b/include/common/data_types/BeamData.h similarity index 90% rename from src/libsersi/distributed_emissions/BeamData.h rename to include/common/data_types/BeamData.h index d04d36c..40ecd3c 100644 --- a/src/libsersi/distributed_emissions/BeamData.h +++ b/include/common/data_types/BeamData.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.39. Specification of the data necessary to describe the scan @@ -30,8 +30,8 @@ class BeamData { BeamData(); ~BeamData() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] float GetBeamAzimuthCenter() const; void SetBeamAzimuthCenter(float value); diff --git a/src/libsersi/common/ClockTime.h b/include/common/data_types/ClockTime.hpp similarity index 73% rename from src/libsersi/common/ClockTime.h rename to include/common/data_types/ClockTime.hpp index ab35e31..59d02a2 100644 --- a/src/libsersi/common/ClockTime.h +++ b/include/common/data_types/ClockTime.hpp @@ -1,6 +1,7 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include "common/Result.hpp" +#include "utils/ByteBuffer.hpp" namespace dis { // Section 5.2.8. Time measurements that exceed one hour. Hours is the number of @@ -16,10 +17,10 @@ class ClockTime { public: ClockTime(); - virtual ~ClockTime(); + ~ClockTime() = default; - virtual void Marshal(DataStream& data_stream) const; - virtual void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] int GetHour() const; void SetHour(int value); @@ -32,4 +33,3 @@ class ClockTime { bool operator==(const ClockTime& rhs) const; }; } // namespace dis - diff --git a/src/libsersi/distributed_emissions/ElectromagneticEmissionBeamData.h b/include/common/data_types/ElectromagneticEmissionBeamData.h similarity index 91% rename from src/libsersi/distributed_emissions/ElectromagneticEmissionBeamData.h rename to include/common/data_types/ElectromagneticEmissionBeamData.h index b6a8927..20c99f4 100644 --- a/src/libsersi/distributed_emissions/ElectromagneticEmissionBeamData.h +++ b/include/common/data_types/ElectromagneticEmissionBeamData.h @@ -2,9 +2,9 @@ #include -#include "libsersi/distributed_emissions/FundamentalParameterData.h" -#include "libsersi/distributed_emissions/TrackJamTarget.h" -#include "libsersi/utils/DataStream.h" +#include distributed_emissions/FundamentalParameterData.h" +#include distributed_emissions/TrackJamTarget.h" +#include utils/ByteBuffer.hpp" namespace dis { // Description of one electronic emission beam @@ -51,8 +51,8 @@ class ElectromagneticEmissionBeamData { ElectromagneticEmissionBeamData(); ~ElectromagneticEmissionBeamData(); - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetBeamDataLength() const; void SetBeamDataLength(uint8_t value); diff --git a/src/libsersi/distributed_emissions/ElectromagneticEmissionSystemData.h b/include/common/data_types/ElectromagneticEmissionSystemData.h similarity index 86% rename from src/libsersi/distributed_emissions/ElectromagneticEmissionSystemData.h rename to include/common/data_types/ElectromagneticEmissionSystemData.h index aff47c8..7fbaa8a 100644 --- a/src/libsersi/distributed_emissions/ElectromagneticEmissionSystemData.h +++ b/include/common/data_types/ElectromagneticEmissionSystemData.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/Vector3Float.h" -#include "libsersi/distributed_emissions/ElectromagneticEmissionBeamData.h" -#include "libsersi/distributed_emissions/EmitterSystem.h" -#include "libsersi/utils/DataStream.h" +#include common/Vector3Float.h" +#include distributed_emissions/ElectromagneticEmissionBeamData.h" +#include distributed_emissions/EmitterSystem.h" +#include utils/ByteBuffer.hpp" namespace dis { // Data about one electronic system @@ -37,8 +37,8 @@ class ElectromagneticEmissionSystemData { ElectromagneticEmissionSystemData(); ~ElectromagneticEmissionSystemData(); - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetSystemDataLength() const; void SetSystemDataLength(uint8_t value); diff --git a/src/libsersi/distributed_emissions/EmitterSystem.h b/include/common/data_types/EmitterSystem.h similarity index 83% rename from src/libsersi/distributed_emissions/EmitterSystem.h rename to include/common/data_types/EmitterSystem.h index c59b3fd..8e98aaf 100644 --- a/src/libsersi/distributed_emissions/EmitterSystem.h +++ b/include/common/data_types/EmitterSystem.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.11. This field shall specify information about a particular @@ -23,8 +23,8 @@ class EmitterSystem { EmitterSystem(); ~EmitterSystem() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetEmitterName() const; void SetEmitterName(uint16_t value); diff --git a/src/libsersi/common/EntityID.h b/include/common/data_types/EntityID.hpp similarity index 88% rename from src/libsersi/common/EntityID.h rename to include/common/data_types/EntityID.hpp index f3cda0d..6806267 100644 --- a/src/libsersi/common/EntityID.h +++ b/include/common/data_types/EntityID.hpp @@ -1,6 +1,7 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Each entity in a given DIS simulation application shall be given an entity @@ -33,8 +34,8 @@ class EntityID { EntityID(); virtual ~EntityID(); - virtual void Marshal(DataStream& data_stream) const; - virtual void Unmarshal(DataStream& data_stream); + virtual Result Marshal(ByteBuffer& byte_buffer) const; + virtual Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetSite() const; void SetSite(uint16_t value); @@ -50,4 +51,3 @@ class EntityID { bool operator==(const EntityID& rhs) const; }; } // namespace dis - diff --git a/src/libsersi/common/EntityType.h b/include/common/data_types/EntityType.hpp similarity index 87% rename from src/libsersi/common/EntityType.h rename to include/common/data_types/EntityType.hpp index 11dc08c..59c9ba9 100644 --- a/src/libsersi/common/EntityType.h +++ b/include/common/data_types/EntityType.hpp @@ -2,7 +2,8 @@ #include -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.2.16. Identifies the type of entity, including kind of entity, @@ -34,8 +35,8 @@ class EntityType { EntityType(); ~EntityType() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetEntityKind() const; void SetEntityKind(uint8_t value); diff --git a/src/libsersi/common/EventID.h b/include/common/data_types/EventID.hpp similarity index 78% rename from src/libsersi/common/EventID.h rename to include/common/data_types/EventID.hpp index 1c7966f..4bbca9a 100644 --- a/src/libsersi/common/EventID.h +++ b/include/common/data_types/EventID.hpp @@ -2,7 +2,8 @@ #include -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.2.18. Identifies a unique event in a simulation via the combination @@ -23,8 +24,8 @@ class EventID { EventID(); ~EventID() = default; - void Marshal(dis::DataStream& data_stream) const; - void Unmarshal(dis::DataStream& data_stream); + Result Marshal(dis::ByteBuffer& byte_buffer) const; + Result Unmarshal(dis::ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetSite() const; void SetSite(uint16_t value); diff --git a/src/libsersi/common/FixedDatum.h b/include/common/data_types/FixedDatum.hpp similarity index 74% rename from src/libsersi/common/FixedDatum.h rename to include/common/data_types/FixedDatum.hpp index 2019049..4297e5e 100644 --- a/src/libsersi/common/FixedDatum.h +++ b/include/common/data_types/FixedDatum.hpp @@ -1,6 +1,7 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.2.18. Fixed Datum Record @@ -17,8 +18,8 @@ class FixedDatum { FixedDatum(); ~FixedDatum() = default; - void Marshal(dis::DataStream& data_stream) const; - void Unmarshal(dis::DataStream& data_stream); + Result Marshal(dis::ByteBuffer& byte_buffer) const; + Result Unmarshal(dis::ByteBuffer& byte_buffer); [[nodiscard]] uint32_t GetFixedDatumId() const; void SetFixedDatumId(uint32_t value); diff --git a/src/libsersi/distributed_emissions/FundamentalParameterData.h b/include/common/data_types/FundamentalParameterData.h similarity index 94% rename from src/libsersi/distributed_emissions/FundamentalParameterData.h rename to include/common/data_types/FundamentalParameterData.h index a054936..72d2cd3 100644 --- a/src/libsersi/distributed_emissions/FundamentalParameterData.h +++ b/include/common/data_types/FundamentalParameterData.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.22. Contains electromagnetic emmision regineratin parameters that @@ -48,8 +48,8 @@ class FundamentalParameterData { FundamentalParameterData(); ~FundamentalParameterData() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] float GetFrequency() const; void SetFrequency(float value); diff --git a/src/libsersi/distributed_emissions/FundamentalParameterDataIff.h b/include/common/data_types/FundamentalParameterDataIff.h similarity index 88% rename from src/libsersi/distributed_emissions/FundamentalParameterDataIff.h rename to include/common/data_types/FundamentalParameterDataIff.h index eca6ea8..b23d399 100644 --- a/src/libsersi/distributed_emissions/FundamentalParameterDataIff.h +++ b/include/common/data_types/FundamentalParameterDataIff.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.45. Fundamental IFF atc data @@ -35,8 +35,8 @@ class FundamentalParameterDataIff { FundamentalParameterDataIff(); ~FundamentalParameterDataIff() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] float GetErp() const; void SetErp(float value); diff --git a/src/libsersi/distributed_emissions/IffAtcNavAidsLayer1Pdu.h b/include/common/data_types/IffAtcNavAidsLayer1Pdu.h similarity index 79% rename from src/libsersi/distributed_emissions/IffAtcNavAidsLayer1Pdu.h rename to include/common/data_types/IffAtcNavAidsLayer1Pdu.h index 07dc7d0..1d5e099 100644 --- a/src/libsersi/distributed_emissions/IffAtcNavAidsLayer1Pdu.h +++ b/include/common/data_types/IffAtcNavAidsLayer1Pdu.h @@ -1,12 +1,12 @@ #pragma once -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EventID.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h" -#include "libsersi/distributed_emissions/IffFundamentalData.h" -#include "libsersi/distributed_emissions/SystemID.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EventID.h" +#include common/Vector3Float.h" +#include distributed_emissions/DistributedEmissionsFamilyPdu.h" +#include distributed_emissions/IffFundamentalData.h" +#include distributed_emissions/SystemID.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.3.7.4.1: Navigational and IFF PDU. COMPLETE @@ -36,8 +36,8 @@ class IffAtcNavAidsLayer1Pdu : public DistributedEmissionsFamilyPdu { IffAtcNavAidsLayer1Pdu(); ~IffAtcNavAidsLayer1Pdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; EntityID& GetEmittingEntityId(); [[nodiscard]] const EntityID& GetEmittingEntityId() const; diff --git a/src/libsersi/distributed_emissions/IffAtcNavAidsLayer2Pdu.h b/include/common/data_types/IffAtcNavAidsLayer2Pdu.h similarity index 80% rename from src/libsersi/distributed_emissions/IffAtcNavAidsLayer2Pdu.h rename to include/common/data_types/IffAtcNavAidsLayer2Pdu.h index 6c7f078..c1b2c41 100644 --- a/src/libsersi/distributed_emissions/IffAtcNavAidsLayer2Pdu.h +++ b/include/common/data_types/IffAtcNavAidsLayer2Pdu.h @@ -2,11 +2,11 @@ #include -#include "libsersi/distributed_emissions/BeamData.h" -#include "libsersi/distributed_emissions/FundamentalParameterDataIff.h" -#include "libsersi/distributed_emissions/IffAtcNavAidsLayer1Pdu.h" -#include "libsersi/distributed_emissions/LayerHeader.h" -#include "libsersi/utils/DataStream.h" +#include distributed_emissions/BeamData.h" +#include distributed_emissions/FundamentalParameterDataIff.h" +#include distributed_emissions/IffAtcNavAidsLayer1Pdu.h" +#include distributed_emissions/LayerHeader.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.7.4.2 When present, layer 2 should follow layer 1 and have the @@ -30,8 +30,8 @@ class IffAtcNavAidsLayer2Pdu final : public IffAtcNavAidsLayer1Pdu { public: IffAtcNavAidsLayer2Pdu() = default; ~IffAtcNavAidsLayer2Pdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; LayerHeader& GetLayerHeader(); [[nodiscard]] const LayerHeader& GetLayerHeader() const; diff --git a/src/libsersi/distributed_emissions/IffFundamentalData.h b/include/common/data_types/IffFundamentalData.h similarity index 91% rename from src/libsersi/distributed_emissions/IffFundamentalData.h rename to include/common/data_types/IffFundamentalData.h index 49afd28..14a872e 100644 --- a/src/libsersi/distributed_emissions/IffFundamentalData.h +++ b/include/common/data_types/IffFundamentalData.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.42. Basic operational data ofr IFF ATC NAVAIDS @@ -41,8 +41,8 @@ class IffFundamentalData { IffFundamentalData(); ~IffFundamentalData() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetSystemStatus() const; void SetSystemStatus(uint8_t value); diff --git a/src/libsersi/distributed_emissions/LayerHeader.h b/include/common/data_types/LayerHeader.h similarity index 82% rename from src/libsersi/distributed_emissions/LayerHeader.h rename to include/common/data_types/LayerHeader.h index a1794ba..1db63e2 100644 --- a/src/libsersi/distributed_emissions/LayerHeader.h +++ b/include/common/data_types/LayerHeader.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.47. Layer header. @@ -22,8 +22,8 @@ class LayerHeader { LayerHeader(); ~LayerHeader() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetLayerNumber() const; void SetLayerNumber(uint8_t value); diff --git a/src/libsersi/common/Orientation.h b/include/common/data_types/Orientation.hpp similarity index 77% rename from src/libsersi/common/Orientation.h rename to include/common/data_types/Orientation.hpp index 0c12957..66bbb51 100644 --- a/src/libsersi/common/Orientation.h +++ b/include/common/data_types/Orientation.hpp @@ -2,7 +2,8 @@ #include -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.2.17. Three floating point values representing an orientation, psi, @@ -20,8 +21,8 @@ class Orientation { Orientation(); ~Orientation() = default; - void Marshal(dis::DataStream& data_stream) const; - void Unmarshal(dis::DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] float GetPsi() const; void SetPsi(float value); diff --git a/src/libsersi/distributed_emissions/PropulsionSystemData.h b/include/common/data_types/PropulsionSystemData.h similarity index 78% rename from src/libsersi/distributed_emissions/PropulsionSystemData.h rename to include/common/data_types/PropulsionSystemData.h index a716dce..179d177 100644 --- a/src/libsersi/distributed_emissions/PropulsionSystemData.h +++ b/include/common/data_types/PropulsionSystemData.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Data about a propulsion system @@ -19,8 +19,8 @@ class PropulsionSystemData { PropulsionSystemData(); ~PropulsionSystemData() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] float GetPowerSetting() const; void SetPowerSetting(float value); diff --git a/src/libsersi/distributed_emissions/ShaftRPMs.h b/include/common/data_types/ShaftRPMs.h similarity index 83% rename from src/libsersi/distributed_emissions/ShaftRPMs.h rename to include/common/data_types/ShaftRPMs.h index 79ebe37..3d95ffc 100644 --- a/src/libsersi/distributed_emissions/ShaftRPMs.h +++ b/include/common/data_types/ShaftRPMs.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Shaft RPMs, used in underwater acoustic clacluations. @@ -22,8 +22,8 @@ class ShaftRPMs { ShaftRPMs(); ~ShaftRPMs() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] int16_t GetCurrentShaftRPMs() const; void SetCurrentShaftRPMs(int16_t value); diff --git a/src/libsersi/common/SimulationAddress.h b/include/common/data_types/SimulationAddress.hpp similarity index 77% rename from src/libsersi/common/SimulationAddress.h rename to include/common/data_types/SimulationAddress.hpp index 0ba8a0a..f714446 100644 --- a/src/libsersi/common/SimulationAddress.h +++ b/include/common/data_types/SimulationAddress.hpp @@ -2,7 +2,8 @@ #include -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.2.14.1. A Simulation Address record shall consist of the Site @@ -20,8 +21,8 @@ class SimulationAddress { SimulationAddress(); ~SimulationAddress() = default; - void Marshal(dis::DataStream& data_stream) const; - void Unmarshal(dis::DataStream& data_stream); + Result Marshal(dis::ByteBuffer& byte_buffer) const; + Result Unmarshal(dis::ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetSite() const; void SetSite(uint16_t value); diff --git a/src/libsersi/distributed_emissions/SystemID.h b/include/common/data_types/SystemID.h similarity index 83% rename from src/libsersi/distributed_emissions/SystemID.h rename to include/common/data_types/SystemID.h index 173c7d0..024aa43 100644 --- a/src/libsersi/distributed_emissions/SystemID.h +++ b/include/common/data_types/SystemID.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.58. Used in IFF ATC PDU @@ -25,8 +25,8 @@ class SystemID { SystemID(); ~SystemID() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetSystemType() const; void SetSystemType(uint16_t value); diff --git a/src/libsersi/distributed_emissions/TrackJamTarget.h b/include/common/data_types/TrackJamTarget.h similarity index 79% rename from src/libsersi/distributed_emissions/TrackJamTarget.h rename to include/common/data_types/TrackJamTarget.h index 0036d37..5d89c69 100644 --- a/src/libsersi/distributed_emissions/TrackJamTarget.h +++ b/include/common/data_types/TrackJamTarget.h @@ -2,8 +2,8 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include utils/ByteBuffer.hpp" namespace dis { // One track/jam target @@ -23,8 +23,8 @@ class TrackJamTarget { TrackJamTarget(); ~TrackJamTarget() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); EntityID& GetTrackJam(); [[nodiscard]] const EntityID& GetTrackJam() const; diff --git a/src/libsersi/common/VariableDatum.h b/include/common/data_types/VariableDatum.hpp similarity index 81% rename from src/libsersi/common/VariableDatum.h rename to include/common/data_types/VariableDatum.hpp index b936a25..03fc22b 100644 --- a/src/libsersi/common/VariableDatum.h +++ b/include/common/data_types/VariableDatum.hpp @@ -2,8 +2,11 @@ #include #include +#include +#include -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" // length in bytes for the variable data. This should be a dynamically allocated // array. @@ -28,8 +31,8 @@ class VariableDatum { VariableDatum(); ~VariableDatum(); - void Marshal(dis::DataStream& data_stream) const; - void Unmarshal(dis::DataStream& data_stream); + Result Marshal(dis::ByteBuffer& byte_buffer) const; + Result Unmarshal(dis::ByteBuffer& byte_buffer); [[nodiscard]] uint32_t GetVariableDatumId() const; void SetVariableDatumId(uint32_t value); diff --git a/src/libsersi/common/Vector3Double.h b/include/common/data_types/Vector3Double.h similarity index 71% rename from src/libsersi/common/Vector3Double.h rename to include/common/data_types/Vector3Double.h index bca0b2a..d46f4b6 100644 --- a/src/libsersi/common/Vector3Double.h +++ b/include/common/data_types/Vector3Double.h @@ -1,7 +1,7 @@ -#ifndef LIBSERSI_COMMON_VECTOR3DOUBLE_H_ -#define LIBSERSI_COMMON_VECTOR3DOUBLE_H_ +#pragma once -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.3.34. Three double precision floating point values, x, y, and z @@ -21,8 +21,8 @@ class Vector3Double { Vector3Double(); ~Vector3Double() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] double GetX() const; void SetX(double value); @@ -38,6 +38,3 @@ class Vector3Double { bool operator==(const Vector3Double& rhs) const; }; } // namespace dis - -#endif // LIBSERSI_COMMON_VECTOR3DOUBLE_H_ - diff --git a/src/libsersi/common/Vector3Float.h b/include/common/data_types/Vector3Float.h similarity index 75% rename from src/libsersi/common/Vector3Float.h rename to include/common/data_types/Vector3Float.h index b7b24d9..3f97760 100644 --- a/src/libsersi/common/Vector3Float.h +++ b/include/common/data_types/Vector3Float.h @@ -1,6 +1,7 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include "utils/ByteBuffer.hpp" +#include "common/Result.hpp" namespace dis { // Section 5.2.33. Three floating point values, x, y, and z @@ -20,8 +21,8 @@ class Vector3Float { Vector3Float(); ~Vector3Float() = default; - void Marshal(dis::DataStream& data_stream) const; - void Unmarshal(dis::DataStream& data_stream); + Result Marshal(dis::ByteBuffer& byte_buffer) const; + Result Unmarshal(dis::ByteBuffer& byte_buffer); [[nodiscard]] float GetX() const; void SetX(float value); @@ -37,4 +38,3 @@ class Vector3Float { bool operator==(const Vector3Float& rhs) const; }; } // namespace dis - diff --git a/src/libsersi/distributed_emissions/VectoringNozzleSystemData.h b/include/common/data_types/VectoringNozzleSystemData.h similarity index 81% rename from src/libsersi/distributed_emissions/VectoringNozzleSystemData.h rename to include/common/data_types/VectoringNozzleSystemData.h index f891b8d..e1e69bd 100644 --- a/src/libsersi/distributed_emissions/VectoringNozzleSystemData.h +++ b/include/common/data_types/VectoringNozzleSystemData.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Data about a vectoring nozzle system @@ -19,8 +19,8 @@ class VectoringNozzleSystemData { VectoringNozzleSystemData(); ~VectoringNozzleSystemData() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] float GetHorizontalDeflectionAngle() const; void SetHorizontalDeflectionAngle(float value); diff --git a/include/common/enums.hpp b/include/common/enums.hpp new file mode 100644 index 0000000..752da82 --- /dev/null +++ b/include/common/enums.hpp @@ -0,0 +1,110 @@ +#pragma once + +#include + +/// SISO-REF-010-2023 Protocol Version [UID 3] +enum class ProtocolVersion : uint8_t { + Other = 0, + DIS_PDUv1 = 1, + IEEE1278_1993 = 2, + DIS_PDUv2_Third_Draft = 3, + DIS_PDUv2_Fourth_Draft_Revised = 4, + IEEE1278_1_1995 = 5, + IEEE1278_1A_1998 = 6, + IEEE1278_1_2012 = 7, +}; + +/// SISO-REF-010-2023 PDU Type [UID 4] +enum class PduType : uint8_t { + Other = 0, + EntityState = 1, + Fire = 2, + Detonation = 3, + Collision = 4, + ServiceRequest = 5, + ResupplyOffer = 6, + ResupplyReceived = 7, + ResupplyCancel = 8, + RepairComplete = 9, + RepairResponse = 10, + CreateEntity = 11, + RemoveEntity = 12, + StartResume = 13, + StopFreeze = 14, + Acknowledge = 15, + ActionRequest = 16, + ActionResponse = 17, + DataQuery = 18, + SetData = 19, + Data = 20, + EventReport = 21, + Comment = 22, + ElectromagneticEmission = 23, + Designator = 24, + Transmitter = 25, + Signal = 26, + Receiver = 27, + IFF = 28, + UnderwaterAcoustic = 29, + SupplementalEmission = 30, + IntercomSignal = 31, + IntercomControl = 32, + AggregateState = 33, + IsGroupOf = 34, + TransferOwnership = 35, + IsPartOf = 36, + MinefieldState = 37, + MinefieldQuery = 38, + MinefieldData = 39, + MinefieldResponseNack = 40, + EnvironmentalProcess = 41, + GriddedData = 42, + PointObjectState = 43, + LinearObjectState = 44, + ArealObjectState = 45, + TimeSpacePositionInformation = 46, + Appearance = 47, + ArticulatedParts = 48, + LiveEntityFire = 49, + LiveEntityDetonation = 50, + CreateEntityReliable = 51, + RemoveEntityReliable = 52, + StartResumeReliable = 53, + StopFreezeReliable = 54, + AcknowledgeReliable = 55, + ActionRequestReliable = 56, + ActionResponseReliable = 57, + DataQueryReliable = 58, + SetDataReliable = 59, + DataReliable = 60, + EventReportReliable = 61, + CommentReliable = 62, + RecordReliable = 63, + SetRecordReliable = 64, + RecordQueryReliable = 65, + CollisionElastic = 66, + EntityStateUpdate = 67, + DirectedEnergyFire = 68, + EntityDamageStatus = 69, + InformationOperationsAction = 70, + InformationOperationsReport = 71, + Attribute = 72, +}; + +/// SISO-REF-010-2023 Protocol Family [UID 5] +enum class ProtocolFamily : uint8_t { + Other = 0, + EntityInformation = 1, + Warfare = 2, + Logistics = 3, + RadioCommunications = 4, + SimulationManagement = 5, + DistributedEmissionRegeneration = 6, + EntityManagement = 7, + Minefield = 8, + SyntheticEnvironment = 9, + SimulationManagementWithReliability = 10, + LiveEntityInformationInteraction = 11, + NonRealTime = 12, + InformationOperations = 13, +}; diff --git a/src/libsersi/utils/DataStream.h b/include/utils/ByteBuffer.hpp similarity index 68% rename from src/libsersi/utils/DataStream.h rename to include/utils/ByteBuffer.hpp index 7a80115..4271352 100644 --- a/src/libsersi/utils/DataStream.h +++ b/include/utils/ByteBuffer.hpp @@ -1,31 +1,30 @@ -#ifndef LIBSERSI_UTILS_DATASTREAM_H_ -#define LIBSERSI_UTILS_DATASTREAM_H_ +#pragma once +#include #include #include // for std::size_t and NULL definition #include // for memcpy -#include // for typedef, member #include // for typedef, member -#include "libsersi/utils/Endian.h" // for enum +#include "utils/Endian.hpp" // for enum namespace dis { /// a class to support managing a network buffer. /// the clients are responsible for managing the char buffer memory. /// this class explicitly defines operators for expected types. -class DataStream { +class ByteBuffer { public: /// Setup the internal buffer's Endian type. /// @param stream the Endian type to use for the internal buffer, /// which will be used for network socket writes. - explicit DataStream(Endian stream); + explicit ByteBuffer(Endian stream); /// Setup the internal buffer. /// @param buffer the data to copy and manage. /// @param length the number of bytes in the buffer. /// @param stream the Endian type to use for the internal buffer, - DataStream(const char* buffer, std::size_t length, Endian stream); - ~DataStream() = default; + ByteBuffer(const char* buffer, std::size_t length, Endian stream); + ~ByteBuffer() = default; /// a method for reading the stored buffer data. /// @param offset the index distance with respect to the current read point. @@ -35,30 +34,30 @@ class DataStream { void SetStream(const char* buffer, std::size_t length, Endian order); // write operations - DataStream& operator<<(bool b); - DataStream& operator<<(char c); - DataStream& operator<<(uint8_t c); - DataStream& operator<<(float f); - DataStream& operator<<(double d); - DataStream& operator<<(int d); - DataStream& operator<<(uint32_t d); - DataStream& operator<<(int64_t d); - DataStream& operator<<(uint64_t d); - DataStream& operator<<(uint16_t d); - DataStream& operator<<(int16_t d); + ByteBuffer& operator<<(bool b); + ByteBuffer& operator<<(char c); + ByteBuffer& operator<<(uint8_t c); + ByteBuffer& operator<<(float f); + ByteBuffer& operator<<(double d); + ByteBuffer& operator<<(int d); + ByteBuffer& operator<<(uint32_t d); + ByteBuffer& operator<<(int64_t d); + ByteBuffer& operator<<(uint64_t d); + ByteBuffer& operator<<(uint16_t d); + ByteBuffer& operator<<(int16_t d); // read operations - DataStream& operator>>(bool& b); - DataStream& operator>>(char& c); - DataStream& operator>>(uint8_t& c); - DataStream& operator>>(float& f); - DataStream& operator>>(double& d); - DataStream& operator>>(int& d); - DataStream& operator>>(uint32_t& d); - DataStream& operator>>(int64_t& d); - DataStream& operator>>(uint64_t& d); - DataStream& operator>>(uint16_t& d); - DataStream& operator>>(int16_t& d); + ByteBuffer& operator>>(bool& b); + ByteBuffer& operator>>(char& c); + ByteBuffer& operator>>(uint8_t& c); + ByteBuffer& operator>>(float& f); + ByteBuffer& operator>>(double& d); + ByteBuffer& operator>>(int& d); + ByteBuffer& operator>>(uint32_t& d); + ByteBuffer& operator>>(int64_t& d); + ByteBuffer& operator>>(uint64_t& d); + ByteBuffer& operator>>(uint16_t& d); + ByteBuffer& operator>>(int16_t& d); [[nodiscard]] Endian GetStreamEndian() const; [[nodiscard]] Endian GetMachineEndian() const; @@ -97,10 +96,10 @@ class DataStream { /// because the class size takes into account the virtual function table. template void ReadAlgorithm(T& t) { - char ch[sizeof(T)]; - DoRead(ch, sizeof(T)); - DoFlip(ch, sizeof(T)); - memcpy(&t, ch, sizeof(t)); + std::array ch; + DoRead(ch.data(), sizeof(T)); + DoFlip(ch.data(), sizeof(T)); + memcpy(&t, ch.data(), sizeof(t)); IncrementPointer(read_pos_); } @@ -127,5 +126,3 @@ class DataStream { Endian machine_endian_; }; } // namespace dis - -#endif // LIBSERSI_UTILS_DATASTREAM_H_ diff --git a/src/libsersi/utils/Conversion.h b/include/utils/Conversion.hpp similarity index 100% rename from src/libsersi/utils/Conversion.h rename to include/utils/Conversion.hpp diff --git a/include/utils/Endian.hpp b/include/utils/Endian.hpp new file mode 100644 index 0000000..3b39ccc --- /dev/null +++ b/include/utils/Endian.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include + +namespace dis { +/// the order of bytes that are on the left +enum class Endian : uint8_t { + kLittle = 1, + kBig = 0, +}; + +} // namespace dis diff --git a/src/libsersi/utils/IBufferProcessor.h b/include/utils/IBufferProcessor.hpp similarity index 91% rename from src/libsersi/utils/IBufferProcessor.h rename to include/utils/IBufferProcessor.hpp index a1d0463..64b0261 100644 --- a/src/libsersi/utils/IBufferProcessor.h +++ b/include/utils/IBufferProcessor.hpp @@ -3,7 +3,7 @@ #include -#include "libsersi/utils/Endian.h" +#include utils/Endian.h" namespace dis { /// the interface class for handling read operations. diff --git a/src/libsersi/utils/IPacketProcessor.h b/include/utils/IPacketProcessor.hpp similarity index 100% rename from src/libsersi/utils/IPacketProcessor.h rename to include/utils/IPacketProcessor.hpp diff --git a/src/libsersi/utils/IPduBank.h b/include/utils/IPduBank.hpp similarity index 74% rename from src/libsersi/utils/IPduBank.h rename to include/utils/IPduBank.hpp index 39bdb95..f003c2d 100644 --- a/src/libsersi/utils/IPduBank.h +++ b/include/utils/IPduBank.hpp @@ -1,7 +1,7 @@ #pragma once -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { /// houses instances for the set of known PDU classes to be returned @@ -13,6 +13,6 @@ class IPduBank { /// finds the PDU instance corresponding to the identifier /// @param pdu_type the 8-bit PDU type identifier /// @return NULL when the pdu_type is unknown. - virtual Pdu* GetStaticPDU(uint8_t pdu_type, DataStream& ds) = 0; + virtual Pdu* GetStaticPDU(uint8_t pdu_type, ByteBuffer& ds) = 0; }; } // namespace dis diff --git a/src/libsersi/utils/IncomingMessage.h b/include/utils/IncomingMessage.hpp similarity index 89% rename from src/libsersi/utils/IncomingMessage.h rename to include/utils/IncomingMessage.hpp index 416d428..4777def 100644 --- a/src/libsersi/utils/IncomingMessage.h +++ b/include/utils/IncomingMessage.hpp @@ -3,15 +3,15 @@ #include // for member -#include "libsersi/utils/Endian.h" // for internal type -#include "libsersi/utils/IBufferProcessor.h" // for base class -#include "libsersi/utils/IPduBank.h" -#include "libsersi/utils/PduType.h" +#include utils/ByteBuffer.hpp" +#include utils/Endian.h" // for internal type +#include utils/IBufferProcessor.h" // for base class +#include utils/IPduBank.h" namespace dis { class Pdu; class IPacketProcessor; -class DataStream; +class ByteBuffer; /// A framework for routing the packet to the correct processor. class IncomingMessage : public IBufferProcessor { @@ -25,7 +25,7 @@ class IncomingMessage : public IBufferProcessor { IncomingMessage(); ~IncomingMessage() override; - void Process(const char* buf, uint32_t size, Endian e); + void Process(const char* buf, uint32_t size, Endian e) override; /// registers the ipp instance to process packets with the id /// @return 'true' if the pair of parameters were not found in the container @@ -64,7 +64,7 @@ class IncomingMessage : public IBufferProcessor { std::pair; PduBankContainer pdu_banks_; - void SwitchOnType(PduType pdu_type, DataStream& ds); + void SwitchOnType(PduType pdu_type, ByteBuffer& ds); /// Searches the proccesor container multimap for a matching container and /// returns the iterator diff --git a/src/libsersi/utils/Masks.h b/include/utils/Masks.hpp similarity index 100% rename from src/libsersi/utils/Masks.h rename to include/utils/Masks.hpp diff --git a/src/libsersi/utils/PacketFactory.h b/include/utils/PacketFactory.hpp similarity index 95% rename from src/libsersi/utils/PacketFactory.h rename to include/utils/PacketFactory.hpp index 9a19852..293f0f8 100644 --- a/src/libsersi/utils/PacketFactory.h +++ b/include/utils/PacketFactory.hpp @@ -1,5 +1,4 @@ -#ifndef _dcl_dis_packet_factory_h_ -#define _dcl_dis_packet_factory_h_ +#pragma once #include #include // for member @@ -62,5 +61,3 @@ class PacketFactory { FunctionMap f_map_; }; } // namespace dis - -#endif // _dcl_dis_packet_factory_h_ diff --git a/src/libsersi/utils/PduBank.h b/include/utils/PduBank.hpp similarity index 75% rename from src/libsersi/utils/PduBank.h rename to include/utils/PduBank.hpp index cab0d8c..fb5bf7d 100644 --- a/src/libsersi/utils/PduBank.h +++ b/include/utils/PduBank.hpp @@ -1,7 +1,7 @@ #pragma once -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/PduType.h" +#include common/Pdu.hpp" +#include common/enums.hpp" namespace dis { /// houses instances for the set of known PDU classes to be returned @@ -11,6 +11,6 @@ class PduBank { /// finds the PDU instance corresponding to the identifier /// @param pdu_type the 8-bit PDU type identifier /// @return NULL when the pdu_type is unknown. - static Pdu* GetStaticPDU(dis::PduType pdu_type); + static Pdu* GetStaticPDU(PduType pdu_type); }; } // namespace dis diff --git a/src/libsersi/CMakeLists.txt b/src/libsersi/CMakeLists.txt index f1a1746..71b8894 100644 --- a/src/libsersi/CMakeLists.txt +++ b/src/libsersi/CMakeLists.txt @@ -1,12 +1,25 @@ +add_library(${PROJECT_NAME} "") + +target_include_directories(${PROJECT_NAME} + PUBLIC $ + $ + $ + $ + $ +) + add_subdirectory(common) add_subdirectory(utils) -add_subdirectory(distributed_emissions) -add_subdirectory(entity_information) -add_subdirectory(entity_management) -add_subdirectory(logistics) -add_subdirectory(minefield) -add_subdirectory(radio_communications) -add_subdirectory(simulation_management) -add_subdirectory(simulation_management_reliable) -add_subdirectory(synthetic_environment) -add_subdirectory(warfare) + +# Create list of all source files +set(protocol_srcs + Warfare.cpp +) + +target_sources(${PROJECT_NAME} PRIVATE ${protocol_srcs}) + +set_target_properties(${PROJECT_NAME} + PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} +) diff --git a/src/libsersi/DistributedEmissions.cpp b/src/libsersi/DistributedEmissions.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/EntityInformation.cpp b/src/libsersi/EntityInformation.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/EntityManagement.cpp b/src/libsersi/EntityManagement.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/InformationOperations.cpp b/src/libsersi/InformationOperations.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/Logistics.cpp b/src/libsersi/Logistics.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/Minefield.cpp b/src/libsersi/Minefield.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/RadioCommunications.cpp b/src/libsersi/RadioCommunications.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/SimulationManagement.cpp b/src/libsersi/SimulationManagement.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/SimulationManagementWithReliability.cpp b/src/libsersi/SimulationManagementWithReliability.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/SyntheticEnvironment.cpp b/src/libsersi/SyntheticEnvironment.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/libsersi/Warfare.cpp b/src/libsersi/Warfare.cpp new file mode 100644 index 0000000..fdd02b4 --- /dev/null +++ b/src/libsersi/Warfare.cpp @@ -0,0 +1,196 @@ +#include "Warfare.hpp" + +#include common/Result.hpp" + +namespace dis { +Result FirePdu::Marshal(ByteBuffer& byte_buffer) const { + TRY(header_.Marshal(byte_buffer)); + TRY(firing_entity_id_.Marshal(byte_buffer)); + TRY(target_entity_id_.Marshal(byte_buffer)); + TRY(munition_id_.Marshal(byte_buffer)); + TRY(event_id_.Marshal(byte_buffer)); + byte_buffer << fire_mission_index_; + TRY(location_in_world_coordinates_.Marshal(byte_buffer)); + TRY(burst_descriptor_.Marshal(byte_buffer)); + TRY(velocity_.Marshal(byte_buffer)); + byte_buffer << range_; + + return Result::Ok(); +} + +Result FirePdu::Unmarshal(ByteBuffer& byte_buffer) { + TRY(header_.Unmarshal(byte_buffer)); + TRY(firing_entity_id_.Unmarshal(byte_buffer)); + TRY(target_entity_id_.Unmarshal(byte_buffer)); + TRY(munition_id_.Unmarshal(byte_buffer)); + TRY(event_id_.Unmarshal(byte_buffer)); + byte_buffer >> fire_mission_index_; + TRY(location_in_world_coordinates_.Unmarshal(byte_buffer)); + TRY(burst_descriptor_.Unmarshal(byte_buffer)); + TRY(velocity_.Unmarshal(byte_buffer)); + byte_buffer >> range_; + + return Result::Ok(); +} + +std::size_t FirePdu::GetMarshalledSize() const { + std::size_t size = 0; + return size; +} + +Result DetonationPdu::Marshal(ByteBuffer& byte_buffer) const { + if (number_of_articulation_parameters_ != articulation_parameters_.size()) { + return Result::Err( + "number_of_articulation_parameters_ != " + "articulation_parameters_.size()"); + } + + TRY(header_.Marshal(byte_buffer)); + TRY(firing_entity_id_.Marshal(byte_buffer)); + TRY(target_entity_id_.Marshal(byte_buffer)); + TRY(munition_id_.Marshal(byte_buffer)); + TRY(event_id_.Marshal(byte_buffer)); + TRY(velocity_.Marshal(byte_buffer)); + TRY(location_in_entity_coordinates_.Marshal(byte_buffer)); + TRY(burst_descriptor_.Marshal(byte_buffer)); + TRY(location_in_entity_coordinates_.Marshal(byte_buffer)); + byte_buffer << detonation_result_; + byte_buffer << number_of_articulation_parameters_; + byte_buffer << padding_; + + for (std::size_t i = 0; i < number_of_articulation_parameters_; ++i) { + TRY(articulation_parameters_[i].Marshal(byte_buffer)); + } + + return Result::Ok(); +} + +Result DetonationPdu::Unmarshal(ByteBuffer& byte_buffer) { + TRY(header_.Unmarshal(byte_buffer)); + TRY(firing_entity_id_.Unmarshal(byte_buffer)); + TRY(target_entity_id_.Unmarshal(byte_buffer)); + TRY(munition_id_.Unmarshal(byte_buffer)); + TRY(event_id_.Unmarshal(byte_buffer)); + TRY(velocity_.Unmarshal(byte_buffer)); + TRY(location_in_entity_coordinates_.Unmarshal(byte_buffer)); + TRY(burst_descriptor_.Unmarshal(byte_buffer)); + TRY(location_in_entity_coordinates_.Unmarshal(byte_buffer)); + byte_buffer >> detonation_result_; + byte_buffer >> number_of_articulation_parameters_; + byte_buffer >> padding_; + + articulation_parameters_.clear(); + + for (std::size_t idx = 0; idx < number_of_articulation_parameters_; idx++) { + ArticulationParameter x; + TRY(x.Unmarshal(byte_buffer)); + articulation_parameters_.push_back(x); + } + + return Result::Ok(); +} + +std::size_t DetonationPdu::GetMarshalledSize() const { + std::size_t size = 0; + return size; +} + +Result DirectedEnergyFirePdu::Marshal(ByteBuffer& byte_buffer) const { + TRY(header_.Marshal(byte_buffer)); + TRY(firing_entity_id_.Marshal(byte_buffer)); + TRY(event_id_.Marshal(byte_buffer)); + TRY(munition_type_.Marshal(byte_buffer)); + TRY(shot_start_time_.Marshal(byte_buffer)); + byte_buffer << cumulative_shot_time_; + TRY(aperture_emitter_location_.Marshal(byte_buffer)); + byte_buffer << aperture_diameter_; + byte_buffer << wavelength_; + byte_buffer << padding_; + byte_buffer << pulse_repetition_frequency_; + byte_buffer << pulse_width_; + byte_buffer << flags_; + TRY(pulse_shape_.Marshal(byte_buffer)); + byte_buffer << padding2_; + byte_buffer << padding3_; + byte_buffer << padding4_; + byte_buffer << number_of_de_records_; + for (const auto x : damage_descriptions_) { + TRY(x.Marshal(byte_buffer)); + } + + return Result::Ok(); +} + +Result DirectedEnergyFirePdu::Unmarshal(ByteBuffer& byte_buffer) { + TRY(header_.Unmarshal(byte_buffer)); + TRY(firing_entity_id_.Unmarshal(byte_buffer)); + TRY(event_id_.Unmarshal(byte_buffer)); + TRY(munition_type_.Unmarshal(byte_buffer)); + TRY(shot_start_time_.Unmarshal(byte_buffer)); + byte_buffer >> cumulative_shot_time_; + TRY(aperture_emitter_location_.Unmarshal(byte_buffer)); + byte_buffer >> aperture_diameter_; + byte_buffer >> wavelength_; + byte_buffer >> padding_; + byte_buffer >> pulse_repetition_frequency_; + byte_buffer >> pulse_width_; + byte_buffer >> flags_; + TRY(pulse_shape_.Unmarshal(byte_buffer)); + byte_buffer >> padding2_; + byte_buffer >> padding3_; + byte_buffer >> padding4_; + byte_buffer >> number_of_de_records_; + + damage_descriptions_.clear(); + + for (std::size_t idx = 0; idx < number_of_de_records_; idx++) { + ArticulationParameter x; + TRY(x.Unmarshal(byte_buffer)); + damage_descriptions_.push_back(x); + } + + return Result::Ok(); +} + +std::size_t DirectedEnergyFirePdu::GetMarshalledSize() const { + std::size_t size = 0; + return size; +} + +Result EntityDamageStatusPdu::Marshal(ByteBuffer& byte_buffer) const { + TRY(header_.Marshal(byte_buffer)); + TRY(damaged_entity_id_.Marshal(byte_buffer)); + byte_buffer << padding_; + byte_buffer << padding2_; + byte_buffer << number_of_damage_descriptions_; + for (const auto x : damage_descriptions_) { + TRY(x.Marshal(byte_buffer)); + } + + return Result::Ok(); +} + +Result EntityDamageStatusPdu::Unmarshal(ByteBuffer& byte_buffer) { + TRY(header_.Unmarshal(byte_buffer)); + TRY(damaged_entity_id_.Marshal(byte_buffer)); + byte_buffer << padding_; + byte_buffer << padding2_; + byte_buffer << number_of_damage_descriptions_; + + damage_descriptions_.clear(); + + for (std::size_t idx = 0; idx < number_of_damage_descriptions_; idx++) { + ArticulationParameter x; + TRY(x.Unmarshal(byte_buffer)); + damage_descriptions_.push_back(x); + } + + return Result::Ok(); +} + +std::size_t EntityDamageStatusPdu::GetMarshalledSize() const { + std::size_t size = 0; + return size; +} + +} // namespace dis diff --git a/src/libsersi/common/ArticulationParameter.cpp b/src/libsersi/common/ArticulationParameter.cpp index 445618e..f338063 100644 --- a/src/libsersi/common/ArticulationParameter.cpp +++ b/src/libsersi/common/ArticulationParameter.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/ArticulationParameter.h" +#include "common/ArticulationParameter.h" namespace dis { @@ -9,56 +9,44 @@ ArticulationParameter::ArticulationParameter() parameter_type_(0), parameter_value_(0.0) {} -uint8_t ArticulationParameter::GetParameterTypeDesignator() const { - return parameter_type_designator_; -} +uint8_t ArticulationParameter::GetParameterTypeDesignator() const { return parameter_type_designator_; } -void ArticulationParameter::SetParameterTypeDesignator(uint8_t value) { - parameter_type_designator_ = value; -} +void ArticulationParameter::SetParameterTypeDesignator(uint8_t value) { parameter_type_designator_ = value; } -uint8_t ArticulationParameter::GetChangeIndicator() const { - return change_indicator_; -} +uint8_t ArticulationParameter::GetChangeIndicator() const { return change_indicator_; } -void ArticulationParameter::SetChangeIndicator(uint8_t value) { - change_indicator_ = value; -} +void ArticulationParameter::SetChangeIndicator(uint8_t value) { change_indicator_ = value; } -uint16_t ArticulationParameter::GetPartAttachedTo() const { - return part_attached_to_; -} +uint16_t ArticulationParameter::GetPartAttachedTo() const { return part_attached_to_; } -void ArticulationParameter::SetPartAttachedTo(uint16_t value) { - part_attached_to_ = value; -} +void ArticulationParameter::SetPartAttachedTo(uint16_t value) { part_attached_to_ = value; } int ArticulationParameter::GetParameterType() const { return parameter_type_; } void ArticulationParameter::SetParameterType(int value) { parameter_type_ = value; } -double ArticulationParameter::GetParameterValue() const { - return parameter_value_; -} +double ArticulationParameter::GetParameterValue() const { return parameter_value_; } -void ArticulationParameter::SetParameterValue(double value) { - parameter_value_ = value; -} +void ArticulationParameter::SetParameterValue(double value) { parameter_value_ = value; } -void ArticulationParameter::Marshal(DataStream& data_stream) const { - data_stream << parameter_type_designator_; - data_stream << change_indicator_; - data_stream << part_attached_to_; - data_stream << parameter_type_; - data_stream << parameter_value_; +Result ArticulationParameter::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << parameter_type_designator_; + byte_buffer << change_indicator_; + byte_buffer << part_attached_to_; + byte_buffer << parameter_type_; + byte_buffer << parameter_value_; + + return Result::Ok(); } -void ArticulationParameter::Unmarshal(DataStream& data_stream) { - data_stream >> parameter_type_designator_; - data_stream >> change_indicator_; - data_stream >> part_attached_to_; - data_stream >> parameter_type_; - data_stream >> parameter_value_; +Result ArticulationParameter::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> parameter_type_designator_; + byte_buffer >> change_indicator_; + byte_buffer >> part_attached_to_; + byte_buffer >> parameter_type_; + byte_buffer >> parameter_value_; + + return Result::Ok(); } bool ArticulationParameter::operator==(const ArticulationParameter& rhs) const { @@ -84,9 +72,8 @@ bool ArticulationParameter::operator==(const ArticulationParameter& rhs) const { } std::size_t ArticulationParameter::GetMarshalledSize() const { - std::size_t marshal_size = sizeof(parameter_type_designator_) + - sizeof(change_indicator_) + sizeof(part_attached_to_) + - sizeof(parameter_type_) + sizeof(parameter_value_); + std::size_t marshal_size = sizeof(parameter_type_designator_) + sizeof(change_indicator_) + + sizeof(part_attached_to_) + sizeof(parameter_type_) + sizeof(parameter_value_); return marshal_size; } diff --git a/src/libsersi/warfare/BurstDescriptor.cpp b/src/libsersi/common/BurstDescriptor.cpp similarity index 56% rename from src/libsersi/warfare/BurstDescriptor.cpp rename to src/libsersi/common/BurstDescriptor.cpp index 7983567..337a1f9 100644 --- a/src/libsersi/warfare/BurstDescriptor.cpp +++ b/src/libsersi/common/BurstDescriptor.cpp @@ -1,14 +1,11 @@ -#include "libsersi/warfare/BurstDescriptor.h" +#include "common/BurstDescriptor.h" namespace dis { -BurstDescriptor::BurstDescriptor() - : warhead_(0), fuse_(0), quantity_(0), rate_(0) {} +BurstDescriptor::BurstDescriptor() : warhead_(0), fuse_(0), quantity_(0), rate_(0) {} dis::EntityType& BurstDescriptor::GetMunition() { return munition_; } -const dis::EntityType& BurstDescriptor::GetMunition() const { - return munition_; -} +const dis::EntityType& BurstDescriptor::GetMunition() const { return munition_; } void BurstDescriptor::SetMunition(const dis::EntityType& value) { munition_ = value; } @@ -28,20 +25,30 @@ uint16_t BurstDescriptor::GetRate() const { return rate_; } void BurstDescriptor::SetRate(uint16_t value) { rate_ = value; } -void BurstDescriptor::Marshal(DataStream& data_stream) const { - munition_.Marshal(data_stream); - data_stream << warhead_; - data_stream << fuse_; - data_stream << quantity_; - data_stream << rate_; +Result BurstDescriptor::Marshal(ByteBuffer& byte_buffer) const { + auto rv = munition_.Marshal(byte_buffer); + if (rv.is_err()) { + return rv; + } + byte_buffer << warhead_; + byte_buffer << fuse_; + byte_buffer << quantity_; + byte_buffer << rate_; + + return Result::Ok(); } -void BurstDescriptor::Unmarshal(DataStream& data_stream) { - munition_.Unmarshal(data_stream); - data_stream >> warhead_; - data_stream >> fuse_; - data_stream >> quantity_; - data_stream >> rate_; +Result BurstDescriptor::Unmarshal(ByteBuffer& byte_buffer) { + auto rv = munition_.Unmarshal(byte_buffer); + if (rv.is_err()) { + return rv; + } + byte_buffer >> warhead_; + byte_buffer >> fuse_; + byte_buffer >> quantity_; + byte_buffer >> rate_; + + return Result::Ok(); } bool BurstDescriptor::operator==(const BurstDescriptor& rhs) const { @@ -67,8 +74,8 @@ bool BurstDescriptor::operator==(const BurstDescriptor& rhs) const { } std::size_t BurstDescriptor::GetMarshalledSize() const { - std::size_t marshal_size = munition_.GetMarshalledSize() + sizeof(warhead_) + - sizeof(fuse_) + sizeof(quantity_) + sizeof(rate_); + std::size_t marshal_size = + munition_.GetMarshalledSize() + sizeof(warhead_) + sizeof(fuse_) + sizeof(quantity_) + sizeof(rate_); return marshal_size; } diff --git a/src/libsersi/common/CMakeLists.txt b/src/libsersi/common/CMakeLists.txt index 060124e..4f8b900 100644 --- a/src/libsersi/common/CMakeLists.txt +++ b/src/libsersi/common/CMakeLists.txt @@ -1,37 +1,16 @@ +add_subdirectory(data_types) + set(common_src ArticulationParameter.cpp - ClockTime.cpp + BurstDescriptor.cpp EntityID.cpp EntityType.cpp EventID.cpp FixedDatum.cpp Orientation.cpp - Pdu.cpp RecordSet.cpp SimulationAddress.cpp VariableDatum.cpp - Vector3Double.cpp - Vector3Float.cpp -) - -set(common_hdr - ArticulationParameter.h - ClockTime.h - EntityID.h - EntityType.h - EventID.h - FixedDatum.h - Orientation.h - Pdu.h - RecordSet.h - SimulationAddress.h - VariableDatum.h - Vector3Double.h - Vector3Float.h ) -target_sources(sersi PRIVATE ${common_src}) - -install(FILES ${common_hdr} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/common -) +target_sources(${PROJECT_NAME} PRIVATE ${common_src}) diff --git a/src/libsersi/common/EntityID.cpp b/src/libsersi/common/EntityID.cpp index 5f5c8fa..f64bee3 100644 --- a/src/libsersi/common/EntityID.cpp +++ b/src/libsersi/common/EntityID.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/EntityID.h" +#include common/EntityID.h" namespace dis { EntityID::EntityID() : site_(0), application_(0), entity_(0) {} @@ -17,16 +17,20 @@ uint16_t EntityID::GetEntity() const { return entity_; } void EntityID::SetEntity(uint16_t value) { entity_ = value; } -void EntityID::Marshal(DataStream& data_stream) const { - data_stream << site_; - data_stream << application_; - data_stream << entity_; +Result EntityID::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << site_; + byte_buffer << application_; + byte_buffer << entity_; + + return Result::Ok(); } -void EntityID::Unmarshal(DataStream& data_stream) { - data_stream >> site_; - data_stream >> application_; - data_stream >> entity_; +Result EntityID::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> site_; + byte_buffer >> application_; + byte_buffer >> entity_; + + return Result::Ok(); } bool EntityID::operator==(const EntityID& rhs) const { @@ -55,4 +59,3 @@ int EntityID::GetMarshalledSize() const { } } // namespace dis - diff --git a/src/libsersi/common/EntityType.cpp b/src/libsersi/common/EntityType.cpp index 71ef329..d9433d7 100644 --- a/src/libsersi/common/EntityType.cpp +++ b/src/libsersi/common/EntityType.cpp @@ -1,14 +1,8 @@ -#include "libsersi/common/EntityType.h" +#include common/EntityType.h" namespace dis { EntityType::EntityType() - : entity_kind_(0), - domain_(0), - country_(0), - category_(0), - subcategory_(0), - specific_(0), - extra_(0) {} + : entity_kind_(0), domain_(0), country_(0), category_(0), subcategory_(0), specific_(0), extra_(0) {} uint8_t EntityType::GetEntityKind() const { return entity_kind_; } @@ -38,24 +32,28 @@ uint8_t EntityType::GetExtra() const { return extra_; } void EntityType::SetExtra(uint8_t value) { extra_ = value; } -void EntityType::Marshal(DataStream& data_stream) const { - data_stream << entity_kind_; - data_stream << domain_; - data_stream << country_; - data_stream << category_; - data_stream << subcategory_; - data_stream << specific_; - data_stream << extra_; +Result EntityType::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << entity_kind_; + byte_buffer << domain_; + byte_buffer << country_; + byte_buffer << category_; + byte_buffer << subcategory_; + byte_buffer << specific_; + byte_buffer << extra_; + + return Result::Ok(); } -void EntityType::Unmarshal(DataStream& data_stream) { - data_stream >> entity_kind_; - data_stream >> domain_; - data_stream >> country_; - data_stream >> category_; - data_stream >> subcategory_; - data_stream >> specific_; - data_stream >> extra_; +Result EntityType::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> entity_kind_; + byte_buffer >> domain_; + byte_buffer >> country_; + byte_buffer >> category_; + byte_buffer >> subcategory_; + byte_buffer >> specific_; + byte_buffer >> extra_; + + return Result::Ok(); } bool EntityType::operator==(const EntityType& rhs) const { @@ -87,10 +85,8 @@ bool EntityType::operator==(const EntityType& rhs) const { } std::size_t EntityType::GetMarshalledSize() const { - std::size_t marshal_size = sizeof(entity_kind_) + sizeof(domain_) + - sizeof(country_) + sizeof(category_) + - sizeof(subcategory_) + sizeof(specific_) + - sizeof(extra_); + std::size_t marshal_size = sizeof(entity_kind_) + sizeof(domain_) + sizeof(country_) + sizeof(category_) + + sizeof(subcategory_) + sizeof(specific_) + sizeof(extra_); return marshal_size; } diff --git a/src/libsersi/common/EventID.cpp b/src/libsersi/common/EventID.cpp index 99f5330..1f923bc 100644 --- a/src/libsersi/common/EventID.cpp +++ b/src/libsersi/common/EventID.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/EventID.h" +#include common/EventID.h" namespace dis { EventID::EventID() : site_(0), application_(0), event_number_(0) {} @@ -15,16 +15,20 @@ uint16_t EventID::GetEventNumber() const { return event_number_; } void EventID::SetEventNumber(uint16_t value) { event_number_ = value; } -void EventID::Marshal(DataStream& data_stream) const { - data_stream << site_; - data_stream << application_; - data_stream << event_number_; +Result EventID::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << site_; + byte_buffer << application_; + byte_buffer << event_number_; + + return Result::Ok(); } -void EventID::Unmarshal(DataStream& data_stream) { - data_stream >> site_; - data_stream >> application_; - data_stream >> event_number_; +Result EventID::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> site_; + byte_buffer >> application_; + byte_buffer >> event_number_; + + return Result::Ok(); } bool EventID::operator==(const EventID& rhs) const { @@ -44,8 +48,7 @@ bool EventID::operator==(const EventID& rhs) const { } std::size_t EventID::GetMarshalledSize() const { - std::size_t marshal_size = - sizeof(site_) + sizeof(application_) + sizeof(event_number_); + std::size_t marshal_size = sizeof(site_) + sizeof(application_) + sizeof(event_number_); return marshal_size; } diff --git a/src/libsersi/common/FixedDatum.cpp b/src/libsersi/common/FixedDatum.cpp index 51b5f23..a3a7dea 100644 --- a/src/libsersi/common/FixedDatum.cpp +++ b/src/libsersi/common/FixedDatum.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/FixedDatum.h" +#include common/FixedDatum.h" namespace dis { FixedDatum::FixedDatum() : fixed_datum_id_(0), fixed_datum_value_(0) {} @@ -9,18 +9,20 @@ void FixedDatum::SetFixedDatumId(uint32_t value) { fixed_datum_id_ = value; } uint32_t FixedDatum::GetFixedDatumValue() const { return fixed_datum_value_; } -void FixedDatum::SetFixedDatumValue(uint32_t value) { - fixed_datum_value_ = value; -} +void FixedDatum::SetFixedDatumValue(uint32_t value) { fixed_datum_value_ = value; } + +Result FixedDatum::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << fixed_datum_id_; + byte_buffer << fixed_datum_value_; -void FixedDatum::Marshal(DataStream& data_stream) const { - data_stream << fixed_datum_id_; - data_stream << fixed_datum_value_; + return Result::Ok(); } -void FixedDatum::Unmarshal(DataStream& data_stream) { - data_stream >> fixed_datum_id_; - data_stream >> fixed_datum_value_; +Result FixedDatum::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> fixed_datum_id_; + byte_buffer >> fixed_datum_value_; + + return Result::Ok(); } bool FixedDatum::operator==(const FixedDatum& rhs) const { @@ -37,8 +39,7 @@ bool FixedDatum::operator==(const FixedDatum& rhs) const { } std::size_t FixedDatum::GetMarshalledSize() const { - std::size_t marshal_size = - sizeof(fixed_datum_id_) + sizeof(fixed_datum_value_); + std::size_t marshal_size = sizeof(fixed_datum_id_) + sizeof(fixed_datum_value_); return marshal_size; } diff --git a/src/libsersi/common/Orientation.cpp b/src/libsersi/common/Orientation.cpp index ced8aaa..efce3d6 100644 --- a/src/libsersi/common/Orientation.cpp +++ b/src/libsersi/common/Orientation.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/Orientation.h" +#include common/Orientation.h" namespace dis { Orientation::Orientation() : psi_(0.0), theta_(0.0), phi_(0.0) {} @@ -15,16 +15,20 @@ float Orientation::GetPhi() const { return phi_; } void Orientation::SetPhi(float value) { phi_ = value; } -void Orientation::Marshal(DataStream& data_stream) const { - data_stream << psi_; - data_stream << theta_; - data_stream << phi_; +Result Orientation::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << psi_; + byte_buffer << theta_; + byte_buffer << phi_; + + return Result::Ok(); } -void Orientation::Unmarshal(DataStream& data_stream) { - data_stream >> psi_; - data_stream >> theta_; - data_stream >> phi_; +Result Orientation::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> psi_; + byte_buffer >> theta_; + byte_buffer >> phi_; + + return Result::Ok(); } bool Orientation::operator==(const Orientation& rhs) const { diff --git a/src/libsersi/common/Pdu.cpp b/src/libsersi/common/Pdu.cpp deleted file mode 100644 index eae1404..0000000 --- a/src/libsersi/common/Pdu.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include "libsersi/common/Pdu.h" - -namespace dis { -Pdu::Pdu() - : protocol_version_(6), - exercise_id_(0), - pdu_type_(0), - protocol_family_(0), - timestamp_(0), - length_(0), - padding_(0) {} - -Pdu::~Pdu() = default; - -uint8_t Pdu::GetProtocolVersion() const { return protocol_version_; } - -void Pdu::SetProtocolVersion(uint8_t value) { protocol_version_ = value; } - -uint8_t Pdu::GetExerciseId() const { return exercise_id_; } - -void Pdu::SetExerciseId(uint8_t value) { exercise_id_ = value; } - -uint8_t Pdu::GetPduType() const { return pdu_type_; } - -void Pdu::SetPduType(uint8_t value) { pdu_type_ = value; } - -uint8_t Pdu::GetProtocolFamily() const { return protocol_family_; } - -void Pdu::SetProtocolFamily(uint8_t value) { protocol_family_ = value; } - -uint32_t Pdu::GetTimestamp() const { return timestamp_; } - -void Pdu::SetTimestamp(uint32_t value) { timestamp_ = value; } - -uint16_t Pdu::GetLength() const { return this->GetMarshalledSize(); } - -void Pdu::SetLength(uint16_t value) { length_ = value; } - -int16_t Pdu::GetPadding() const { return padding_; } - -void Pdu::SetPadding(int16_t value) { padding_ = value; } - -void Pdu::Marshal(DataStream& data_stream) const { - data_stream << protocol_version_; - data_stream << exercise_id_; - data_stream << pdu_type_; - data_stream << protocol_family_; - data_stream << timestamp_; - data_stream << length_; - data_stream << padding_; -} - -void Pdu::Unmarshal(DataStream& data_stream) { - data_stream >> protocol_version_; - data_stream >> exercise_id_; - data_stream >> pdu_type_; - data_stream >> protocol_family_; - data_stream >> timestamp_; - data_stream >> length_; - data_stream >> padding_; -} - -bool Pdu::operator==(const Pdu& rhs) const { - bool ivars_equal = true; - - if (!(protocol_version_ == rhs.protocol_version_)) { - ivars_equal = false; - } - if (!(exercise_id_ == rhs.exercise_id_)) { - ivars_equal = false; - } - if (!(pdu_type_ == rhs.pdu_type_)) { - ivars_equal = false; - } - if (!(protocol_family_ == rhs.protocol_family_)) { - ivars_equal = false; - } - if (!(timestamp_ == rhs.timestamp_)) { - ivars_equal = false; - } - if (!(length_ == rhs.length_)) { - ivars_equal = false; - } - if (!(padding_ == rhs.padding_)) { - ivars_equal = false; - } - - return ivars_equal; -} - -std::size_t Pdu::GetMarshalledSize() const { - std::size_t marshal_size = sizeof(protocol_version_) + sizeof(exercise_id_) + - sizeof(pdu_type_) + sizeof(protocol_family_) + - sizeof(timestamp_) + sizeof(length_) + sizeof(padding_); - return marshal_size; -} - -} // namespace dis diff --git a/src/libsersi/common/Pdu.h b/src/libsersi/common/Pdu.h deleted file mode 100644 index 22ca67f..0000000 --- a/src/libsersi/common/Pdu.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - -#include - -#include "libsersi/utils/DataStream.h" - -namespace dis { -// The superclass for all PDUs. This incorporates the PduHeader record, -// section 5.2.29. - -class Pdu { - private: - /** The version of the protocol. 5=DIS-1995, 6=DIS-1998. */ - uint8_t protocol_version_; - - /** Exercise ID */ - uint8_t exercise_id_; - - /** Type of pdu, unique for each PDU class */ - uint8_t pdu_type_; - - /** value that refers to the protocol family, eg SimulationManagement, et */ - uint8_t protocol_family_; - - /** Timestamp value */ - uint32_t timestamp_; - - /** Length, in bytes, of the PDU */ - uint16_t length_; - - /** zero-filled array of padding */ - int16_t padding_; - - public: - Pdu(); - virtual ~Pdu(); - - virtual void Marshal(DataStream& data_stream) const; - virtual void Unmarshal(DataStream& data_stream); - - [[nodiscard]] uint8_t GetProtocolVersion() const; - void SetProtocolVersion(uint8_t value); - - [[nodiscard]] uint8_t GetExerciseId() const; - void SetExerciseId(uint8_t value); - - [[nodiscard]] uint8_t GetPduType() const; - void SetPduType(uint8_t value); - - [[nodiscard]] uint8_t GetProtocolFamily() const; - void SetProtocolFamily(uint8_t value); - - [[nodiscard]] uint32_t GetTimestamp() const; - void SetTimestamp(uint32_t value); - - [[nodiscard]] uint16_t GetLength() const; - void SetLength(uint16_t value); - - [[nodiscard]] int16_t GetPadding() const; - void SetPadding(int16_t value); - - [[nodiscard]] virtual std::size_t GetMarshalledSize() const; - - bool operator==(const Pdu& rhs) const; -}; -} // namespace dis diff --git a/src/libsersi/common/PduHeader.cpp b/src/libsersi/common/PduHeader.cpp new file mode 100644 index 0000000..c03cd27 --- /dev/null +++ b/src/libsersi/common/PduHeader.cpp @@ -0,0 +1,7 @@ +#include common/PduHeader.hpp" + +namespace dis { +uint32_t PduHeader::CalculateDISTimestamp() { + return 0; +} +} // namespace dis diff --git a/src/libsersi/common/RecordSet.cpp b/src/libsersi/common/RecordSet.cpp index 1511e9c..f404ff9 100644 --- a/src/libsersi/common/RecordSet.cpp +++ b/src/libsersi/common/RecordSet.cpp @@ -1,25 +1,16 @@ -#include "libsersi/common/RecordSet.h" +#include "common/RecordSet.hpp" namespace dis { RecordSet::RecordSet() - : record_id_(0), - record_set_serial_number_(0), - record_length_(0), - record_count_(0), - record_values_(0), - pad4_(0) {} + : record_id_(0), record_set_serial_number_(0), record_length_(0), record_count_(0), record_values_(0), pad4_(0) {} uint32_t RecordSet::GetRecordId() const { return record_id_; } void RecordSet::SetRecordId(uint32_t value) { record_id_ = value; } -uint32_t RecordSet::GetRecordSetSerialNumber() const { - return record_set_serial_number_; -} +uint32_t RecordSet::GetRecordSetSerialNumber() const { return record_set_serial_number_; } -void RecordSet::SetRecordSetSerialNumber(uint32_t value) { - record_set_serial_number_ = value; -} +void RecordSet::SetRecordSetSerialNumber(uint32_t value) { record_set_serial_number_ = value; } uint16_t RecordSet::GetRecordLength() const { return record_length_; } @@ -37,22 +28,26 @@ uint8_t RecordSet::GetPad4() const { return pad4_; } void RecordSet::SetPad4(uint8_t value) { pad4_ = value; } -void RecordSet::Marshal(DataStream& data_stream) const { - data_stream << record_id_; - data_stream << record_set_serial_number_; - data_stream << record_length_; - data_stream << record_count_; - data_stream << record_values_; - data_stream << pad4_; +Result RecordSet::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << record_id_; + byte_buffer << record_set_serial_number_; + byte_buffer << record_length_; + byte_buffer << record_count_; + byte_buffer << record_values_; + byte_buffer << pad4_; + + return Result::Ok(); } -void RecordSet::Unmarshal(DataStream& data_stream) { - data_stream >> record_id_; - data_stream >> record_set_serial_number_; - data_stream >> record_length_; - data_stream >> record_count_; - data_stream >> record_values_; - data_stream >> pad4_; +Result RecordSet::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> record_id_; + byte_buffer >> record_set_serial_number_; + byte_buffer >> record_length_; + byte_buffer >> record_count_; + byte_buffer >> record_values_; + byte_buffer >> pad4_; + + return Result::Ok(); } bool RecordSet::operator==(const RecordSet& rhs) const { @@ -81,10 +76,8 @@ bool RecordSet::operator==(const RecordSet& rhs) const { } std::size_t RecordSet::GetMarshalledSize() const { - std::size_t marshal_size = sizeof(record_id_) + - sizeof(record_set_serial_number_) + - sizeof(record_length_) + sizeof(record_count_) + - sizeof(record_values_) + sizeof(pad4_); + std::size_t marshal_size = sizeof(record_id_) + sizeof(record_set_serial_number_) + sizeof(record_length_) + + sizeof(record_count_) + sizeof(record_values_) + sizeof(pad4_); return marshal_size; } diff --git a/src/libsersi/common/SimulationAddress.cpp b/src/libsersi/common/SimulationAddress.cpp index 4faef8f..55c8a8c 100644 --- a/src/libsersi/common/SimulationAddress.cpp +++ b/src/libsersi/common/SimulationAddress.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/SimulationAddress.h" +#include "common/SimulationAddress.hpp" namespace dis { SimulationAddress::SimulationAddress() : site_(0), application_(0) {} @@ -11,14 +11,18 @@ uint16_t SimulationAddress::GetApplication() const { return application_; } void SimulationAddress::SetApplication(uint16_t value) { application_ = value; } -void SimulationAddress::Marshal(DataStream& data_stream) const { - data_stream << site_; - data_stream << application_; +Result SimulationAddress::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << site_; + byte_buffer << application_; + + return Result::Ok(); } -void SimulationAddress::Unmarshal(DataStream& data_stream) { - data_stream >> site_; - data_stream >> application_; +Result SimulationAddress::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> site_; + byte_buffer >> application_; + + return Result::Ok(); } bool SimulationAddress::operator==(const SimulationAddress& rhs) const { diff --git a/src/libsersi/common/VariableDatum.cpp b/src/libsersi/common/VariableDatum.cpp index 54daacf..38c7724 100644 --- a/src/libsersi/common/VariableDatum.cpp +++ b/src/libsersi/common/VariableDatum.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/VariableDatum.h" +#include "common/VariableDatum.hpp" #include #include @@ -15,30 +15,19 @@ VariableDatum::VariableDatum() VariableDatum::~VariableDatum() { variable_datums_.clear(); } -uint32_t VariableDatum::GetVariableDatumId() const { - return variable_datum_id_; -} +uint32_t VariableDatum::GetVariableDatumId() const { return variable_datum_id_; } -void VariableDatum::SetVariableDatumId(uint32_t value) { - variable_datum_id_ = value; -} +void VariableDatum::SetVariableDatumId(uint32_t value) { variable_datum_id_ = value; } -uint32_t VariableDatum::GetVariableDatumLength() const { - return variable_datum_length_; -} +uint32_t VariableDatum::GetVariableDatumLength() const { return variable_datum_length_; } -void VariableDatum::SetVariableDatumLength(uint32_t value) { - variable_datum_length_ = value; -} +void VariableDatum::SetVariableDatumLength(uint32_t value) { variable_datum_length_ = value; } char* VariableDatum::GetVariableDatums() { return variable_datums_.data(); } -const char* VariableDatum::GetVariableDatums() const { - return variable_datums_.data(); -} +const char* VariableDatum::GetVariableDatums() const { return variable_datums_.data(); } -void VariableDatum::SetVariableDatums(const char* value, - const uint32_t length) { +void VariableDatum::SetVariableDatums(const char* value, const uint32_t length) { variable_datum_length_ = length * kBits; uint32_t chunks = length / kBits; @@ -52,31 +41,33 @@ void VariableDatum::SetVariableDatums(const char* value, try { variable_datums_.resize(length); } catch (const std::exception& e) { - std::cerr << e.what() << std::endl; + std::cerr << e.what() << '\n'; return; } } - for (auto i = 0; i < length; ++i) { + for (uint32_t i = 0; i < length; ++i) { variable_datums_[i] = value[i]; } - for (auto i = length; i < variable_datums_.size(); ++i) { + for (uint32_t i = length; i < variable_datums_.size(); ++i) { variable_datums_[i] = 0; } } -void VariableDatum::Marshal(DataStream& data_stream) const { - data_stream << variable_datum_id_; - data_stream << variable_datum_length_; +Result VariableDatum::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << variable_datum_id_; + byte_buffer << variable_datum_length_; - for (auto i = 0; i < array_length_; ++i) { - data_stream << variable_datums_[i]; + for (uint32_t i = 0; i < array_length_; ++i) { + byte_buffer << variable_datums_[i]; } + + return Result::Ok(); } -void VariableDatum::Unmarshal(DataStream& data_stream) { - data_stream >> variable_datum_id_; - data_stream >> variable_datum_length_; +Result VariableDatum::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> variable_datum_id_; + byte_buffer >> variable_datum_length_; const auto byte_length = variable_datum_length_ / kBits; auto chunks = byte_length / kBits; @@ -89,17 +80,18 @@ void VariableDatum::Unmarshal(DataStream& data_stream) { try { variable_datums_.resize(array_length_); } catch (const std::exception& e) { - std::cerr << e.what() << std::endl; - return; + return Result::Err(e.what()); } } for (uint32_t idx = 0; idx < array_length_; idx++) { - data_stream >> variable_datums_[idx]; + byte_buffer >> variable_datums_[idx]; } for (uint64_t idx = array_length_; idx < variable_datums_.size(); idx++) { variable_datums_[idx] = 0; } + + return Result::Ok(); } bool VariableDatum::operator==(const VariableDatum& rhs) const { @@ -126,8 +118,7 @@ bool VariableDatum::operator==(const VariableDatum& rhs) const { } std::size_t VariableDatum::GetMarshalledSize() const { - std::size_t marshal_size = sizeof(variable_datum_id_) + - sizeof(variable_datum_length_) + array_length_; + std::size_t marshal_size = sizeof(variable_datum_id_) + sizeof(variable_datum_length_) + array_length_; return marshal_size; } diff --git a/src/libsersi/distributed_emissions/AcousticBeamData.cpp b/src/libsersi/common/data_types/AcousticBeamData.cpp similarity index 78% rename from src/libsersi/distributed_emissions/AcousticBeamData.cpp rename to src/libsersi/common/data_types/AcousticBeamData.cpp index 67a2fa9..a970ce9 100644 --- a/src/libsersi/distributed_emissions/AcousticBeamData.cpp +++ b/src/libsersi/common/data_types/AcousticBeamData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/AcousticBeamData.h" +#include distributed_emissions/AcousticBeamData.h" namespace dis { @@ -36,18 +36,18 @@ void AcousticBeamData::SetFundamentalDataParameters( fundamental_data_parameters_ = value; } -void AcousticBeamData::Marshal(DataStream& data_stream) const { - data_stream << beam_data_length_; - data_stream << beam_id_number_; - data_stream << pad2_; - fundamental_data_parameters_.Marshal(data_stream); +void AcousticBeamData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << beam_data_length_; + byte_buffer << beam_id_number_; + byte_buffer << pad2_; + fundamental_data_parameters_.Marshal(byte_buffer); } -void AcousticBeamData::Unmarshal(DataStream& data_stream) { - data_stream >> beam_data_length_; - data_stream >> beam_id_number_; - data_stream >> pad2_; - fundamental_data_parameters_.Unmarshal(data_stream); +void AcousticBeamData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> beam_data_length_; + byte_buffer >> beam_id_number_; + byte_buffer >> pad2_; + fundamental_data_parameters_.Unmarshal(byte_buffer); } bool AcousticBeamData::operator==(const AcousticBeamData& rhs) const { diff --git a/src/libsersi/distributed_emissions/AcousticBeamFundamentalParameter.cpp b/src/libsersi/common/data_types/AcousticBeamFundamentalParameter.cpp similarity index 79% rename from src/libsersi/distributed_emissions/AcousticBeamFundamentalParameter.cpp rename to src/libsersi/common/data_types/AcousticBeamFundamentalParameter.cpp index 83d93fa..42f5d9e 100644 --- a/src/libsersi/distributed_emissions/AcousticBeamFundamentalParameter.cpp +++ b/src/libsersi/common/data_types/AcousticBeamFundamentalParameter.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/AcousticBeamFundamentalParameter.h" +#include distributed_emissions/AcousticBeamFundamentalParameter.h" namespace dis { @@ -60,22 +60,22 @@ void AcousticBeamFundamentalParameter::SetDeBeamwidth(float value) { de_beamwidth_ = value; } -void AcousticBeamFundamentalParameter::Marshal(DataStream& data_stream) const { - data_stream << active_emission_parameter_index_; - data_stream << scan_pattern_; - data_stream << beam_center_azimuth_; - data_stream << azimuthal_beamwidth_; - data_stream << beam_center_de_; - data_stream << de_beamwidth_; +void AcousticBeamFundamentalParameter::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << active_emission_parameter_index_; + byte_buffer << scan_pattern_; + byte_buffer << beam_center_azimuth_; + byte_buffer << azimuthal_beamwidth_; + byte_buffer << beam_center_de_; + byte_buffer << de_beamwidth_; } -void AcousticBeamFundamentalParameter::Unmarshal(DataStream& data_stream) { - data_stream >> active_emission_parameter_index_; - data_stream >> scan_pattern_; - data_stream >> beam_center_azimuth_; - data_stream >> azimuthal_beamwidth_; - data_stream >> beam_center_de_; - data_stream >> de_beamwidth_; +void AcousticBeamFundamentalParameter::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> active_emission_parameter_index_; + byte_buffer >> scan_pattern_; + byte_buffer >> beam_center_azimuth_; + byte_buffer >> azimuthal_beamwidth_; + byte_buffer >> beam_center_de_; + byte_buffer >> de_beamwidth_; } bool AcousticBeamFundamentalParameter::operator==( diff --git a/src/libsersi/distributed_emissions/AcousticEmitter.cpp b/src/libsersi/common/data_types/AcousticEmitter.cpp similarity index 75% rename from src/libsersi/distributed_emissions/AcousticEmitter.cpp rename to src/libsersi/common/data_types/AcousticEmitter.cpp index 528e59d..e01c084 100644 --- a/src/libsersi/distributed_emissions/AcousticEmitter.cpp +++ b/src/libsersi/common/data_types/AcousticEmitter.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/AcousticEmitter.h" +#include distributed_emissions/AcousticEmitter.h" namespace dis { AcousticEmitter::AcousticEmitter() @@ -20,16 +20,16 @@ void AcousticEmitter::SetAcousticIdNumber(uint8_t value) { acoustic_id_number_ = value; } -void AcousticEmitter::Marshal(DataStream& data_stream) const { - data_stream << acoustic_name_; - data_stream << function_; - data_stream << acoustic_id_number_; +void AcousticEmitter::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << acoustic_name_; + byte_buffer << function_; + byte_buffer << acoustic_id_number_; } -void AcousticEmitter::Unmarshal(DataStream& data_stream) { - data_stream >> acoustic_name_; - data_stream >> function_; - data_stream >> acoustic_id_number_; +void AcousticEmitter::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> acoustic_name_; + byte_buffer >> function_; + byte_buffer >> acoustic_id_number_; } bool AcousticEmitter::operator==(const AcousticEmitter& rhs) const { diff --git a/src/libsersi/distributed_emissions/AcousticEmitterSystem.cpp b/src/libsersi/common/data_types/AcousticEmitterSystem.cpp similarity index 76% rename from src/libsersi/distributed_emissions/AcousticEmitterSystem.cpp rename to src/libsersi/common/data_types/AcousticEmitterSystem.cpp index 2a8711e..79d9120 100644 --- a/src/libsersi/distributed_emissions/AcousticEmitterSystem.cpp +++ b/src/libsersi/common/data_types/AcousticEmitterSystem.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/AcousticEmitterSystem.h" +#include distributed_emissions/AcousticEmitterSystem.h" namespace dis { AcousticEmitterSystem::AcousticEmitterSystem() @@ -26,16 +26,16 @@ void AcousticEmitterSystem::SetAcousticId(uint8_t value) { acoustic_id_ = value; } -void AcousticEmitterSystem::Marshal(DataStream& data_stream) const { - data_stream << acoustic_name_; - data_stream << acoustic_function_; - data_stream << acoustic_id_; +void AcousticEmitterSystem::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << acoustic_name_; + byte_buffer << acoustic_function_; + byte_buffer << acoustic_id_; } -void AcousticEmitterSystem::Unmarshal(DataStream& data_stream) { - data_stream >> acoustic_name_; - data_stream >> acoustic_function_; - data_stream >> acoustic_id_; +void AcousticEmitterSystem::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> acoustic_name_; + byte_buffer >> acoustic_function_; + byte_buffer >> acoustic_id_; } bool AcousticEmitterSystem::operator==(const AcousticEmitterSystem& rhs) const { diff --git a/src/libsersi/distributed_emissions/AcousticEmitterSystemData.cpp b/src/libsersi/common/data_types/AcousticEmitterSystemData.cpp similarity index 80% rename from src/libsersi/distributed_emissions/AcousticEmitterSystemData.cpp rename to src/libsersi/common/data_types/AcousticEmitterSystemData.cpp index 26842cb..479bdcf 100644 --- a/src/libsersi/distributed_emissions/AcousticEmitterSystemData.cpp +++ b/src/libsersi/common/data_types/AcousticEmitterSystemData.cpp @@ -1,6 +1,6 @@ -#include "libsersi/distributed_emissions/AcousticEmitterSystemData.h" +#include distributed_emissions/AcousticEmitterSystemData.h" -#include "libsersi/distributed_emissions/AcousticEmitterSystem.h" +#include distributed_emissions/AcousticEmitterSystem.h" namespace dis { AcousticEmitterSystemData::AcousticEmitterSystemData() @@ -66,29 +66,29 @@ void AcousticEmitterSystemData::SetBeamRecords( beam_records_ = value; } -void AcousticEmitterSystemData::Marshal(DataStream& data_stream) const { - data_stream << emitter_system_data_length_; - data_stream << static_cast(beam_records_.size()); - data_stream << pad2_; - acoustic_emitter_system_.Marshal(data_stream); - emitter_location_.Marshal(data_stream); +void AcousticEmitterSystemData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << emitter_system_data_length_; + byte_buffer << static_cast(beam_records_.size()); + byte_buffer << pad2_; + acoustic_emitter_system_.Marshal(byte_buffer); + emitter_location_.Marshal(byte_buffer); for (const auto& x : beam_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void AcousticEmitterSystemData::Unmarshal(DataStream& data_stream) { - data_stream >> emitter_system_data_length_; - data_stream >> number_of_beams_; - data_stream >> pad2_; - acoustic_emitter_system_.Unmarshal(data_stream); - emitter_location_.Unmarshal(data_stream); +void AcousticEmitterSystemData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> emitter_system_data_length_; + byte_buffer >> number_of_beams_; + byte_buffer >> pad2_; + acoustic_emitter_system_.Unmarshal(byte_buffer); + emitter_location_.Unmarshal(byte_buffer); beam_records_.clear(); for (std::size_t idx = 0; idx < number_of_beams_; idx++) { AcousticBeamData x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); beam_records_.push_back(x); } } diff --git a/src/libsersi/distributed_emissions/ApaData.cpp b/src/libsersi/common/data_types/ApaData.cpp similarity index 74% rename from src/libsersi/distributed_emissions/ApaData.cpp rename to src/libsersi/common/data_types/ApaData.cpp index 9c3f95c..dd38e46 100644 --- a/src/libsersi/distributed_emissions/ApaData.cpp +++ b/src/libsersi/common/data_types/ApaData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/ApaData.h" +#include distributed_emissions/ApaData.h" #include @@ -13,14 +13,14 @@ int16_t ApaData::GetParameterValue() const { return parameter_value_; } void ApaData::SetParameterValue(int16_t value) { parameter_value_ = value; } -void ApaData::Marshal(DataStream& data_stream) const { - data_stream << parameter_index_; - data_stream << parameter_value_; +void ApaData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << parameter_index_; + byte_buffer << parameter_value_; } -void ApaData::Unmarshal(DataStream& data_stream) { - data_stream >> parameter_index_; - data_stream >> parameter_value_; +void ApaData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> parameter_index_; + byte_buffer >> parameter_value_; } bool ApaData::operator==(const ApaData& rhs) const { diff --git a/src/libsersi/distributed_emissions/BeamData.cpp b/src/libsersi/common/data_types/BeamData.cpp similarity index 77% rename from src/libsersi/distributed_emissions/BeamData.cpp rename to src/libsersi/common/data_types/BeamData.cpp index 6c23d4b..bcc754b 100644 --- a/src/libsersi/distributed_emissions/BeamData.cpp +++ b/src/libsersi/common/data_types/BeamData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/BeamData.h" +#include distributed_emissions/BeamData.h" namespace dis { BeamData::BeamData() @@ -36,20 +36,20 @@ float BeamData::GetBeamSweepSync() const { return beam_sweep_sync_; } void BeamData::SetBeamSweepSync(float value) { beam_sweep_sync_ = value; } -void BeamData::Marshal(DataStream& data_stream) const { - data_stream << beam_azimuth_center_; - data_stream << beam_azimuth_sweep_; - data_stream << beam_elevation_center_; - data_stream << beam_elevation_sweep_; - data_stream << beam_sweep_sync_; +void BeamData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << beam_azimuth_center_; + byte_buffer << beam_azimuth_sweep_; + byte_buffer << beam_elevation_center_; + byte_buffer << beam_elevation_sweep_; + byte_buffer << beam_sweep_sync_; } -void BeamData::Unmarshal(DataStream& data_stream) { - data_stream >> beam_azimuth_center_; - data_stream >> beam_azimuth_sweep_; - data_stream >> beam_elevation_center_; - data_stream >> beam_elevation_sweep_; - data_stream >> beam_sweep_sync_; +void BeamData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> beam_azimuth_center_; + byte_buffer >> beam_azimuth_sweep_; + byte_buffer >> beam_elevation_center_; + byte_buffer >> beam_elevation_sweep_; + byte_buffer >> beam_sweep_sync_; } bool BeamData::operator==(const BeamData& rhs) const { diff --git a/src/libsersi/common/data_types/CMakeLists.txt b/src/libsersi/common/data_types/CMakeLists.txt new file mode 100644 index 0000000..8a9a299 --- /dev/null +++ b/src/libsersi/common/data_types/CMakeLists.txt @@ -0,0 +1,7 @@ +set(data_types_srcs + ClockTime.cpp + Vector3Double.cpp + Vector3Float.cpp +) + +target_sources(${PROJECT_NAME} PRIVATE ${data_types_srcs}) diff --git a/src/libsersi/common/ClockTime.cpp b/src/libsersi/common/data_types/ClockTime.cpp similarity index 66% rename from src/libsersi/common/ClockTime.cpp rename to src/libsersi/common/data_types/ClockTime.cpp index 4d5df52..6d25c0a 100644 --- a/src/libsersi/common/ClockTime.cpp +++ b/src/libsersi/common/data_types/ClockTime.cpp @@ -1,10 +1,8 @@ -#include "libsersi/common/ClockTime.h" +#include "common/data_types/ClockTime.hpp" namespace dis { ClockTime::ClockTime() : hour_(0), time_past_hour_(0) {} -ClockTime::~ClockTime() = default; - int ClockTime::GetHour() const { return hour_; } void ClockTime::SetHour(int value) { hour_ = value; } @@ -13,14 +11,18 @@ uint32_t ClockTime::GetTimePastHour() const { return time_past_hour_; } void ClockTime::SetTimePastHour(uint32_t value) { time_past_hour_ = value; } -void ClockTime::Marshal(DataStream& data_stream) const { - data_stream << hour_; - data_stream << time_past_hour_; +Result ClockTime::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << hour_; + byte_buffer << time_past_hour_; + + return Result::Ok(); } -void ClockTime::Unmarshal(DataStream& data_stream) { - data_stream >> hour_; - data_stream >> time_past_hour_; +Result ClockTime::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> hour_; + byte_buffer >> time_past_hour_; + + return Result::Ok(); } bool ClockTime::operator==(const ClockTime& rhs) const { diff --git a/src/libsersi/distributed_emissions/ElectromagneticEmissionBeamData.cpp b/src/libsersi/common/data_types/ElectromagneticEmissionBeamData.cpp similarity index 82% rename from src/libsersi/distributed_emissions/ElectromagneticEmissionBeamData.cpp rename to src/libsersi/common/data_types/ElectromagneticEmissionBeamData.cpp index feb88f9..a44a05f 100644 --- a/src/libsersi/distributed_emissions/ElectromagneticEmissionBeamData.cpp +++ b/src/libsersi/common/data_types/ElectromagneticEmissionBeamData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/ElectromagneticEmissionBeamData.h" +#include distributed_emissions/ElectromagneticEmissionBeamData.h" namespace dis { ElectromagneticEmissionBeamData::ElectromagneticEmissionBeamData() @@ -101,37 +101,37 @@ void ElectromagneticEmissionBeamData::SetTrackJamTargets( track_jam_targets_ = value; } -void ElectromagneticEmissionBeamData::Marshal(DataStream& data_stream) const { - data_stream << beam_data_length_; - data_stream << beam_id_number_; - data_stream << beam_parameter_index_; - fundamental_parameter_data_.Marshal(data_stream); - data_stream << beam_function_; - data_stream << static_cast(track_jam_targets_.size()); - data_stream << high_density_track_jam_; - data_stream << pad4_; - data_stream << jamming_mode_sequence_; +void ElectromagneticEmissionBeamData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << beam_data_length_; + byte_buffer << beam_id_number_; + byte_buffer << beam_parameter_index_; + fundamental_parameter_data_.Marshal(byte_buffer); + byte_buffer << beam_function_; + byte_buffer << static_cast(track_jam_targets_.size()); + byte_buffer << high_density_track_jam_; + byte_buffer << pad4_; + byte_buffer << jamming_mode_sequence_; for (const auto& x : track_jam_targets_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ElectromagneticEmissionBeamData::Unmarshal(DataStream& data_stream) { - data_stream >> beam_data_length_; - data_stream >> beam_id_number_; - data_stream >> beam_parameter_index_; - fundamental_parameter_data_.Unmarshal(data_stream); - data_stream >> beam_function_; - data_stream >> number_of_track_jam_targets_; - data_stream >> high_density_track_jam_; - data_stream >> pad4_; - data_stream >> jamming_mode_sequence_; +void ElectromagneticEmissionBeamData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> beam_data_length_; + byte_buffer >> beam_id_number_; + byte_buffer >> beam_parameter_index_; + fundamental_parameter_data_.Unmarshal(byte_buffer); + byte_buffer >> beam_function_; + byte_buffer >> number_of_track_jam_targets_; + byte_buffer >> high_density_track_jam_; + byte_buffer >> pad4_; + byte_buffer >> jamming_mode_sequence_; track_jam_targets_.clear(); for (std::size_t idx = 0; idx < number_of_track_jam_targets_; idx++) { TrackJamTarget x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); track_jam_targets_.push_back(x); } } diff --git a/src/libsersi/distributed_emissions/ElectromagneticEmissionSystemData.cpp b/src/libsersi/common/data_types/ElectromagneticEmissionSystemData.cpp similarity index 82% rename from src/libsersi/distributed_emissions/ElectromagneticEmissionSystemData.cpp rename to src/libsersi/common/data_types/ElectromagneticEmissionSystemData.cpp index 5da44f1..df7c28d 100644 --- a/src/libsersi/distributed_emissions/ElectromagneticEmissionSystemData.cpp +++ b/src/libsersi/common/data_types/ElectromagneticEmissionSystemData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/ElectromagneticEmissionSystemData.h" +#include distributed_emissions/ElectromagneticEmissionSystemData.h" namespace dis { ElectromagneticEmissionSystemData::ElectromagneticEmissionSystemData() @@ -69,29 +69,29 @@ void ElectromagneticEmissionSystemData::SetBeamDataRecords( beam_data_records_ = value; } -void ElectromagneticEmissionSystemData::Marshal(DataStream& data_stream) const { - data_stream << system_data_length_; - data_stream << static_cast(beam_data_records_.size()); - data_stream << emissions_padding2_; - emitter_system_.Marshal(data_stream); - location_.Marshal(data_stream); +void ElectromagneticEmissionSystemData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << system_data_length_; + byte_buffer << static_cast(beam_data_records_.size()); + byte_buffer << emissions_padding2_; + emitter_system_.Marshal(byte_buffer); + location_.Marshal(byte_buffer); for (const auto& x : beam_data_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ElectromagneticEmissionSystemData::Unmarshal(DataStream& data_stream) { - data_stream >> system_data_length_; - data_stream >> number_of_beams_; - data_stream >> emissions_padding2_; - emitter_system_.Unmarshal(data_stream); - location_.Unmarshal(data_stream); +void ElectromagneticEmissionSystemData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> system_data_length_; + byte_buffer >> number_of_beams_; + byte_buffer >> emissions_padding2_; + emitter_system_.Unmarshal(byte_buffer); + location_.Unmarshal(byte_buffer); beam_data_records_.clear(); for (std::size_t idx = 0; idx < number_of_beams_; idx++) { ElectromagneticEmissionBeamData x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); beam_data_records_.push_back(x); } } diff --git a/src/libsersi/distributed_emissions/EmitterSystem.cpp b/src/libsersi/common/data_types/EmitterSystem.cpp similarity index 75% rename from src/libsersi/distributed_emissions/EmitterSystem.cpp rename to src/libsersi/common/data_types/EmitterSystem.cpp index e4fda10..b81d16c 100644 --- a/src/libsersi/distributed_emissions/EmitterSystem.cpp +++ b/src/libsersi/common/data_types/EmitterSystem.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/EmitterSystem.h" +#include distributed_emissions/EmitterSystem.h" namespace dis { @@ -19,16 +19,16 @@ void EmitterSystem::SetEmitterIdNumber(uint8_t value) { emitter_id_number_ = value; } -void EmitterSystem::Marshal(DataStream& data_stream) const { - data_stream << emitter_name_; - data_stream << function_; - data_stream << emitter_id_number_; +void EmitterSystem::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << emitter_name_; + byte_buffer << function_; + byte_buffer << emitter_id_number_; } -void EmitterSystem::Unmarshal(DataStream& data_stream) { - data_stream >> emitter_name_; - data_stream >> function_; - data_stream >> emitter_id_number_; +void EmitterSystem::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> emitter_name_; + byte_buffer >> function_; + byte_buffer >> emitter_id_number_; } bool EmitterSystem::operator==(const EmitterSystem& rhs) const { diff --git a/src/libsersi/distributed_emissions/FundamentalParameterData.cpp b/src/libsersi/common/data_types/FundamentalParameterData.cpp similarity index 80% rename from src/libsersi/distributed_emissions/FundamentalParameterData.cpp rename to src/libsersi/common/data_types/FundamentalParameterData.cpp index b2edb03..edb44be 100644 --- a/src/libsersi/distributed_emissions/FundamentalParameterData.cpp +++ b/src/libsersi/common/data_types/FundamentalParameterData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/FundamentalParameterData.h" +#include distributed_emissions/FundamentalParameterData.h" namespace dis { FundamentalParameterData::FundamentalParameterData() @@ -85,30 +85,30 @@ void FundamentalParameterData::SetBeamSweepSync(float value) { beam_sweep_sync_ = value; } -void FundamentalParameterData::Marshal(DataStream& data_stream) const { - data_stream << frequency_; - data_stream << frequency_range_; - data_stream << effective_radiated_power_; - data_stream << pulse_repetition_frequency_; - data_stream << pulse_width_; - data_stream << beam_azimuth_center_; - data_stream << beam_azimuth_sweep_; - data_stream << beam_elevation_center_; - data_stream << beam_elevation_sweep_; - data_stream << beam_sweep_sync_; -} - -void FundamentalParameterData::Unmarshal(DataStream& data_stream) { - data_stream >> frequency_; - data_stream >> frequency_range_; - data_stream >> effective_radiated_power_; - data_stream >> pulse_repetition_frequency_; - data_stream >> pulse_width_; - data_stream >> beam_azimuth_center_; - data_stream >> beam_azimuth_sweep_; - data_stream >> beam_elevation_center_; - data_stream >> beam_elevation_sweep_; - data_stream >> beam_sweep_sync_; +void FundamentalParameterData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << frequency_; + byte_buffer << frequency_range_; + byte_buffer << effective_radiated_power_; + byte_buffer << pulse_repetition_frequency_; + byte_buffer << pulse_width_; + byte_buffer << beam_azimuth_center_; + byte_buffer << beam_azimuth_sweep_; + byte_buffer << beam_elevation_center_; + byte_buffer << beam_elevation_sweep_; + byte_buffer << beam_sweep_sync_; +} + +void FundamentalParameterData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> frequency_; + byte_buffer >> frequency_range_; + byte_buffer >> effective_radiated_power_; + byte_buffer >> pulse_repetition_frequency_; + byte_buffer >> pulse_width_; + byte_buffer >> beam_azimuth_center_; + byte_buffer >> beam_azimuth_sweep_; + byte_buffer >> beam_elevation_center_; + byte_buffer >> beam_elevation_sweep_; + byte_buffer >> beam_sweep_sync_; } bool FundamentalParameterData::operator==( diff --git a/src/libsersi/distributed_emissions/FundamentalParameterDataIff.cpp b/src/libsersi/common/data_types/FundamentalParameterDataIff.cpp similarity index 79% rename from src/libsersi/distributed_emissions/FundamentalParameterDataIff.cpp rename to src/libsersi/common/data_types/FundamentalParameterDataIff.cpp index 8bbf0e8..de2b461 100644 --- a/src/libsersi/distributed_emissions/FundamentalParameterDataIff.cpp +++ b/src/libsersi/common/data_types/FundamentalParameterDataIff.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/FundamentalParameterDataIff.h" +#include distributed_emissions/FundamentalParameterDataIff.h" namespace dis { FundamentalParameterDataIff::FundamentalParameterDataIff() @@ -57,26 +57,26 @@ uint8_t FundamentalParameterDataIff::GetPad3() const { return pad3_; } void FundamentalParameterDataIff::SetPad3(uint8_t value) { pad3_ = value; } -void FundamentalParameterDataIff::Marshal(DataStream& data_stream) const { - data_stream << erp_; - data_stream << frequency_; - data_stream << pgrf_; - data_stream << pulse_width_; - data_stream << burst_length_; - data_stream << applicable_modes_; - data_stream << pad2_; - data_stream << pad3_; +void FundamentalParameterDataIff::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << erp_; + byte_buffer << frequency_; + byte_buffer << pgrf_; + byte_buffer << pulse_width_; + byte_buffer << burst_length_; + byte_buffer << applicable_modes_; + byte_buffer << pad2_; + byte_buffer << pad3_; } -void FundamentalParameterDataIff::Unmarshal(DataStream& data_stream) { - data_stream >> erp_; - data_stream >> frequency_; - data_stream >> pgrf_; - data_stream >> pulse_width_; - data_stream >> burst_length_; - data_stream >> applicable_modes_; - data_stream >> pad2_; - data_stream >> pad3_; +void FundamentalParameterDataIff::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> erp_; + byte_buffer >> frequency_; + byte_buffer >> pgrf_; + byte_buffer >> pulse_width_; + byte_buffer >> burst_length_; + byte_buffer >> applicable_modes_; + byte_buffer >> pad2_; + byte_buffer >> pad3_; } bool FundamentalParameterDataIff::operator==( diff --git a/src/libsersi/distributed_emissions/IffAtcNavAidsLayer1Pdu.cpp b/src/libsersi/common/data_types/IffAtcNavAidsLayer1Pdu.cpp similarity index 78% rename from src/libsersi/distributed_emissions/IffAtcNavAidsLayer1Pdu.cpp rename to src/libsersi/common/data_types/IffAtcNavAidsLayer1Pdu.cpp index 266635d..52cbac6 100644 --- a/src/libsersi/distributed_emissions/IffAtcNavAidsLayer1Pdu.cpp +++ b/src/libsersi/common/data_types/IffAtcNavAidsLayer1Pdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/IffAtcNavAidsLayer1Pdu.h" +#include distributed_emissions/IffAtcNavAidsLayer1Pdu.h" namespace dis { IffAtcNavAidsLayer1Pdu::IffAtcNavAidsLayer1Pdu() : pad2_(0) { SetPduType(28); } @@ -61,26 +61,26 @@ void IffAtcNavAidsLayer1Pdu::SetFundamentalParameters( fundamental_parameters_ = value; } -void IffAtcNavAidsLayer1Pdu::Marshal(DataStream& data_stream) const { +void IffAtcNavAidsLayer1Pdu::Marshal(ByteBuffer& byte_buffer) const { DistributedEmissionsFamilyPdu::Marshal( - data_stream); // Marshal information in superclass first - emitting_entity_id_.Marshal(data_stream); - event_id_.Marshal(data_stream); - location_.Marshal(data_stream); - system_id_.Marshal(data_stream); - data_stream << pad2_; - fundamental_parameters_.Marshal(data_stream); + byte_buffer); // Marshal information in superclass first + emitting_entity_id_.Marshal(byte_buffer); + event_id_.Marshal(byte_buffer); + location_.Marshal(byte_buffer); + system_id_.Marshal(byte_buffer); + byte_buffer << pad2_; + fundamental_parameters_.Marshal(byte_buffer); } -void IffAtcNavAidsLayer1Pdu::Unmarshal(DataStream& data_stream) { +void IffAtcNavAidsLayer1Pdu::Unmarshal(ByteBuffer& byte_buffer) { DistributedEmissionsFamilyPdu::Unmarshal( - data_stream); // unmarshal information in superclass first - emitting_entity_id_.Unmarshal(data_stream); - event_id_.Unmarshal(data_stream); - location_.Unmarshal(data_stream); - system_id_.Unmarshal(data_stream); - data_stream >> pad2_; - fundamental_parameters_.Unmarshal(data_stream); + byte_buffer); // unmarshal information in superclass first + emitting_entity_id_.Unmarshal(byte_buffer); + event_id_.Unmarshal(byte_buffer); + location_.Unmarshal(byte_buffer); + system_id_.Unmarshal(byte_buffer); + byte_buffer >> pad2_; + fundamental_parameters_.Unmarshal(byte_buffer); } bool IffAtcNavAidsLayer1Pdu::operator==( diff --git a/src/libsersi/distributed_emissions/IffAtcNavAidsLayer2Pdu.cpp b/src/libsersi/common/data_types/IffAtcNavAidsLayer2Pdu.cpp similarity index 82% rename from src/libsersi/distributed_emissions/IffAtcNavAidsLayer2Pdu.cpp rename to src/libsersi/common/data_types/IffAtcNavAidsLayer2Pdu.cpp index 8e8b76c..c523d7d 100644 --- a/src/libsersi/distributed_emissions/IffAtcNavAidsLayer2Pdu.cpp +++ b/src/libsersi/common/data_types/IffAtcNavAidsLayer2Pdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/IffAtcNavAidsLayer2Pdu.h" +#include distributed_emissions/IffAtcNavAidsLayer2Pdu.h" namespace dis { IffAtcNavAidsLayer2Pdu::~IffAtcNavAidsLayer2Pdu() { @@ -53,27 +53,27 @@ void IffAtcNavAidsLayer2Pdu::SetFundamentalIffParameters( fundamental_iff_parameters_ = value; } -void IffAtcNavAidsLayer2Pdu::Marshal(DataStream& data_stream) const { - IffAtcNavAidsLayer1Pdu::Marshal(data_stream); - layer_header_.Marshal(data_stream); - beam_data_.Marshal(data_stream); - secondary_operational_data_.Marshal(data_stream); +void IffAtcNavAidsLayer2Pdu::Marshal(ByteBuffer& byte_buffer) const { + IffAtcNavAidsLayer1Pdu::Marshal(byte_buffer); + layer_header_.Marshal(byte_buffer); + beam_data_.Marshal(byte_buffer); + secondary_operational_data_.Marshal(byte_buffer); for (auto x : fundamental_iff_parameters_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void IffAtcNavAidsLayer2Pdu::Unmarshal(DataStream& data_stream) { - IffAtcNavAidsLayer1Pdu::Unmarshal(data_stream); - layer_header_.Unmarshal(data_stream); - beam_data_.Unmarshal(data_stream); - secondary_operational_data_.Unmarshal(data_stream); +void IffAtcNavAidsLayer2Pdu::Unmarshal(ByteBuffer& byte_buffer) { + IffAtcNavAidsLayer1Pdu::Unmarshal(byte_buffer); + layer_header_.Unmarshal(byte_buffer); + beam_data_.Unmarshal(byte_buffer); + secondary_operational_data_.Unmarshal(byte_buffer); fundamental_iff_parameters_.clear(); for (std::size_t idx = 0; idx < pad2_; idx++) { FundamentalParameterDataIff x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fundamental_iff_parameters_.push_back(x); } } diff --git a/src/libsersi/distributed_emissions/IffFundamentalData.cpp b/src/libsersi/common/data_types/IffFundamentalData.cpp similarity index 79% rename from src/libsersi/distributed_emissions/IffFundamentalData.cpp rename to src/libsersi/common/data_types/IffFundamentalData.cpp index a7b765a..628235c 100644 --- a/src/libsersi/distributed_emissions/IffFundamentalData.cpp +++ b/src/libsersi/common/data_types/IffFundamentalData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/IffFundamentalData.h" +#include distributed_emissions/IffFundamentalData.h" namespace dis { IffFundamentalData::IffFundamentalData() @@ -63,30 +63,30 @@ uint16_t IffFundamentalData::GetParameter6() const { return parameter6_; } void IffFundamentalData::SetParameter6(uint16_t value) { parameter6_ = value; } -void IffFundamentalData::Marshal(DataStream& data_stream) const { - data_stream << system_status_; - data_stream << alternate_parameter4_; - data_stream << information_layers_; - data_stream << modifier_; - data_stream << parameter1_; - data_stream << parameter2_; - data_stream << parameter3_; - data_stream << parameter4_; - data_stream << parameter5_; - data_stream << parameter6_; +void IffFundamentalData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << system_status_; + byte_buffer << alternate_parameter4_; + byte_buffer << information_layers_; + byte_buffer << modifier_; + byte_buffer << parameter1_; + byte_buffer << parameter2_; + byte_buffer << parameter3_; + byte_buffer << parameter4_; + byte_buffer << parameter5_; + byte_buffer << parameter6_; } -void IffFundamentalData::Unmarshal(DataStream& data_stream) { - data_stream >> system_status_; - data_stream >> alternate_parameter4_; - data_stream >> information_layers_; - data_stream >> modifier_; - data_stream >> parameter1_; - data_stream >> parameter2_; - data_stream >> parameter3_; - data_stream >> parameter4_; - data_stream >> parameter5_; - data_stream >> parameter6_; +void IffFundamentalData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> system_status_; + byte_buffer >> alternate_parameter4_; + byte_buffer >> information_layers_; + byte_buffer >> modifier_; + byte_buffer >> parameter1_; + byte_buffer >> parameter2_; + byte_buffer >> parameter3_; + byte_buffer >> parameter4_; + byte_buffer >> parameter5_; + byte_buffer >> parameter6_; } bool IffFundamentalData::operator==(const IffFundamentalData& rhs) const { diff --git a/src/libsersi/distributed_emissions/LayerHeader.cpp b/src/libsersi/common/data_types/LayerHeader.cpp similarity index 76% rename from src/libsersi/distributed_emissions/LayerHeader.cpp rename to src/libsersi/common/data_types/LayerHeader.cpp index 9fa18a6..c038a9c 100644 --- a/src/libsersi/distributed_emissions/LayerHeader.cpp +++ b/src/libsersi/common/data_types/LayerHeader.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/LayerHeader.h" +#include distributed_emissions/LayerHeader.h" namespace dis { LayerHeader::LayerHeader() @@ -20,16 +20,16 @@ uint16_t LayerHeader::GetLength() const { return length_; } void LayerHeader::SetLength(uint16_t value) { length_ = value; } -void LayerHeader::Marshal(DataStream& data_stream) const { - data_stream << layer_number_; - data_stream << layer_specific_information_; - data_stream << length_; +void LayerHeader::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << layer_number_; + byte_buffer << layer_specific_information_; + byte_buffer << length_; } -void LayerHeader::Unmarshal(DataStream& data_stream) { - data_stream >> layer_number_; - data_stream >> layer_specific_information_; - data_stream >> length_; +void LayerHeader::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> layer_number_; + byte_buffer >> layer_specific_information_; + byte_buffer >> length_; } bool LayerHeader::operator==(const LayerHeader& rhs) const { diff --git a/src/libsersi/synthetic_environment/LinearSegmentParameter.cpp b/src/libsersi/common/data_types/LinearSegmentParameter.cpp similarity index 80% rename from src/libsersi/synthetic_environment/LinearSegmentParameter.cpp rename to src/libsersi/common/data_types/LinearSegmentParameter.cpp index 5db33ff..d12aab4 100644 --- a/src/libsersi/synthetic_environment/LinearSegmentParameter.cpp +++ b/src/libsersi/common/data_types/LinearSegmentParameter.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/LinearSegmentParameter.h" +#include synthetic_environment/LinearSegmentParameter.h" #include @@ -91,30 +91,30 @@ uint32_t LinearSegmentParameter::GetPad1() const { return pad1_; } void LinearSegmentParameter::SetPad1(uint32_t value) { pad1_ = value; } -void LinearSegmentParameter::Marshal(DataStream& data_stream) const { - data_stream << segment_number_; - data_stream << general_segment_appearance_; - data_stream << specific_segment_appearance_; - location_.Marshal(data_stream); - orientation_.Marshal(data_stream); - data_stream << segment_length_; - data_stream << segment_width_; - data_stream << segment_height_; - data_stream << segment_depth_; - data_stream << pad1_; -} - -void LinearSegmentParameter::Unmarshal(DataStream& data_stream) { - data_stream >> segment_number_; - data_stream >> general_segment_appearance_; - data_stream >> specific_segment_appearance_; - location_.Unmarshal(data_stream); - orientation_.Unmarshal(data_stream); - data_stream >> segment_length_; - data_stream >> segment_width_; - data_stream >> segment_height_; - data_stream >> segment_depth_; - data_stream >> pad1_; +void LinearSegmentParameter::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << segment_number_; + byte_buffer << general_segment_appearance_; + byte_buffer << specific_segment_appearance_; + location_.Marshal(byte_buffer); + orientation_.Marshal(byte_buffer); + byte_buffer << segment_length_; + byte_buffer << segment_width_; + byte_buffer << segment_height_; + byte_buffer << segment_depth_; + byte_buffer << pad1_; +} + +void LinearSegmentParameter::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> segment_number_; + byte_buffer >> general_segment_appearance_; + byte_buffer >> specific_segment_appearance_; + location_.Unmarshal(byte_buffer); + orientation_.Unmarshal(byte_buffer); + byte_buffer >> segment_length_; + byte_buffer >> segment_width_; + byte_buffer >> segment_height_; + byte_buffer >> segment_depth_; + byte_buffer >> pad1_; } bool LinearSegmentParameter::operator==( diff --git a/src/libsersi/synthetic_environment/ObjectType.cpp b/src/libsersi/common/data_types/ObjectType.cpp similarity index 77% rename from src/libsersi/synthetic_environment/ObjectType.cpp rename to src/libsersi/common/data_types/ObjectType.cpp index b356980..01d451d 100644 --- a/src/libsersi/synthetic_environment/ObjectType.cpp +++ b/src/libsersi/common/data_types/ObjectType.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/ObjectType.h" +#include synthetic_environment/ObjectType.h" namespace dis { ObjectType::ObjectType() @@ -24,20 +24,20 @@ uint8_t ObjectType::GetSubcategory() const { return subcategory_; } void ObjectType::SetSubcategory(uint8_t value) { subcategory_ = value; } -void ObjectType::Marshal(DataStream& data_stream) const { - data_stream << entity_kind_; - data_stream << domain_; - data_stream << country_; - data_stream << category_; - data_stream << subcategory_; +void ObjectType::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << entity_kind_; + byte_buffer << domain_; + byte_buffer << country_; + byte_buffer << category_; + byte_buffer << subcategory_; } -void ObjectType::Unmarshal(DataStream& data_stream) { - data_stream >> entity_kind_; - data_stream >> domain_; - data_stream >> country_; - data_stream >> category_; - data_stream >> subcategory_; +void ObjectType::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> entity_kind_; + byte_buffer >> domain_; + byte_buffer >> country_; + byte_buffer >> category_; + byte_buffer >> subcategory_; } bool ObjectType::operator==(const ObjectType& rhs) const { diff --git a/src/libsersi/distributed_emissions/PropulsionSystemData.cpp b/src/libsersi/common/data_types/PropulsionSystemData.cpp similarity index 74% rename from src/libsersi/distributed_emissions/PropulsionSystemData.cpp rename to src/libsersi/common/data_types/PropulsionSystemData.cpp index 4a86956..295c77a 100644 --- a/src/libsersi/distributed_emissions/PropulsionSystemData.cpp +++ b/src/libsersi/common/data_types/PropulsionSystemData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/PropulsionSystemData.h" +#include distributed_emissions/PropulsionSystemData.h" #include @@ -16,14 +16,14 @@ float PropulsionSystemData::GetEngineRpm() const { return engine_rpm_; } void PropulsionSystemData::SetEngineRpm(float value) { engine_rpm_ = value; } -void PropulsionSystemData::Marshal(DataStream& data_stream) const { - data_stream << power_setting_; - data_stream << engine_rpm_; +void PropulsionSystemData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << power_setting_; + byte_buffer << engine_rpm_; } -void PropulsionSystemData::Unmarshal(DataStream& data_stream) { - data_stream >> power_setting_; - data_stream >> engine_rpm_; +void PropulsionSystemData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> power_setting_; + byte_buffer >> engine_rpm_; } bool PropulsionSystemData::operator==(const PropulsionSystemData& rhs) const { diff --git a/src/libsersi/distributed_emissions/ShaftRPMs.cpp b/src/libsersi/common/data_types/ShaftRPMs.cpp similarity index 76% rename from src/libsersi/distributed_emissions/ShaftRPMs.cpp rename to src/libsersi/common/data_types/ShaftRPMs.cpp index 00e43e1..b4bbdb8 100644 --- a/src/libsersi/distributed_emissions/ShaftRPMs.cpp +++ b/src/libsersi/common/data_types/ShaftRPMs.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/ShaftRPMs.h" +#include distributed_emissions/ShaftRPMs.h" namespace dis { ShaftRPMs::ShaftRPMs() @@ -26,16 +26,16 @@ void ShaftRPMs::SetShaftRPMRateOfChange(float value) { shaft_rpm_rate_of_change_ = value; } -void ShaftRPMs::Marshal(DataStream& data_stream) const { - data_stream << current_shaft_rpms_; - data_stream << ordered_shaft_rpms_; - data_stream << shaft_rpm_rate_of_change_; +void ShaftRPMs::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << current_shaft_rpms_; + byte_buffer << ordered_shaft_rpms_; + byte_buffer << shaft_rpm_rate_of_change_; } -void ShaftRPMs::Unmarshal(DataStream& data_stream) { - data_stream >> current_shaft_rpms_; - data_stream >> ordered_shaft_rpms_; - data_stream >> shaft_rpm_rate_of_change_; +void ShaftRPMs::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> current_shaft_rpms_; + byte_buffer >> ordered_shaft_rpms_; + byte_buffer >> shaft_rpm_rate_of_change_; } bool ShaftRPMs::operator==(const ShaftRPMs& rhs) const { diff --git a/src/libsersi/distributed_emissions/SystemID.cpp b/src/libsersi/common/data_types/SystemID.cpp similarity index 76% rename from src/libsersi/distributed_emissions/SystemID.cpp rename to src/libsersi/common/data_types/SystemID.cpp index f2cc4dc..475692c 100644 --- a/src/libsersi/distributed_emissions/SystemID.cpp +++ b/src/libsersi/common/data_types/SystemID.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/SystemID.h" +#include distributed_emissions/SystemID.h" namespace dis { SystemID::SystemID() @@ -20,18 +20,18 @@ uint8_t SystemID::GetChangeOptions() const { return change_options_; } void SystemID::SetChangeOptions(uint8_t value) { change_options_ = value; } -void SystemID::Marshal(DataStream& data_stream) const { - data_stream << system_type_; - data_stream << system_name_; - data_stream << system_mode_; - data_stream << change_options_; +void SystemID::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << system_type_; + byte_buffer << system_name_; + byte_buffer << system_mode_; + byte_buffer << change_options_; } -void SystemID::Unmarshal(DataStream& data_stream) { - data_stream >> system_type_; - data_stream >> system_name_; - data_stream >> system_mode_; - data_stream >> change_options_; +void SystemID::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> system_type_; + byte_buffer >> system_name_; + byte_buffer >> system_mode_; + byte_buffer >> change_options_; } bool SystemID::operator==(const SystemID& rhs) const { diff --git a/src/libsersi/distributed_emissions/TrackJamTarget.cpp b/src/libsersi/common/data_types/TrackJamTarget.cpp similarity index 75% rename from src/libsersi/distributed_emissions/TrackJamTarget.cpp rename to src/libsersi/common/data_types/TrackJamTarget.cpp index ad347ab..1d0ef01 100644 --- a/src/libsersi/distributed_emissions/TrackJamTarget.cpp +++ b/src/libsersi/common/data_types/TrackJamTarget.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/TrackJamTarget.h" +#include distributed_emissions/TrackJamTarget.h" namespace dis { @@ -18,16 +18,16 @@ uint8_t TrackJamTarget::GetBeamId() const { return beam_id_; } void TrackJamTarget::SetBeamId(uint8_t value) { beam_id_ = value; } -void TrackJamTarget::Marshal(DataStream& data_stream) const { - track_jam_.Marshal(data_stream); - data_stream << emitter_id_; - data_stream << beam_id_; +void TrackJamTarget::Marshal(ByteBuffer& byte_buffer) const { + track_jam_.Marshal(byte_buffer); + byte_buffer << emitter_id_; + byte_buffer << beam_id_; } -void TrackJamTarget::Unmarshal(DataStream& data_stream) { - track_jam_.Unmarshal(data_stream); - data_stream >> emitter_id_; - data_stream >> beam_id_; +void TrackJamTarget::Unmarshal(ByteBuffer& byte_buffer) { + track_jam_.Unmarshal(byte_buffer); + byte_buffer >> emitter_id_; + byte_buffer >> beam_id_; } bool TrackJamTarget::operator==(const TrackJamTarget& rhs) const { diff --git a/src/libsersi/common/Vector3Double.cpp b/src/libsersi/common/data_types/Vector3Double.cpp similarity index 67% rename from src/libsersi/common/Vector3Double.cpp rename to src/libsersi/common/data_types/Vector3Double.cpp index a258a0d..3928df8 100644 --- a/src/libsersi/common/Vector3Double.cpp +++ b/src/libsersi/common/data_types/Vector3Double.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/Vector3Double.h" +#include "common/data_types/Vector3Double.hpp" namespace dis { Vector3Double::Vector3Double() : x_(0.0), y_(0.0), z_(0.0) {} @@ -15,16 +15,20 @@ double Vector3Double::GetZ() const { return z_; } void Vector3Double::SetZ(double value) { z_ = value; } -void Vector3Double::Marshal(DataStream& data_stream) const { - data_stream << x_; - data_stream << y_; - data_stream << z_; +Result Vector3Double::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << x_; + byte_buffer << y_; + byte_buffer << z_; + + return Result::Ok(); } -void Vector3Double::Unmarshal(DataStream& data_stream) { - data_stream >> x_; - data_stream >> y_; - data_stream >> z_; +Result Vector3Double::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> x_; + byte_buffer >> y_; + byte_buffer >> z_; + + return Result::Ok(); } bool Vector3Double::operator==(const Vector3Double& rhs) const { @@ -49,4 +53,3 @@ std::size_t Vector3Double::GetMarshalledSize() const { } } // namespace dis - diff --git a/src/libsersi/common/Vector3Float.cpp b/src/libsersi/common/data_types/Vector3Float.cpp similarity index 66% rename from src/libsersi/common/Vector3Float.cpp rename to src/libsersi/common/data_types/Vector3Float.cpp index 0d8a2de..a856a17 100644 --- a/src/libsersi/common/Vector3Float.cpp +++ b/src/libsersi/common/data_types/Vector3Float.cpp @@ -1,4 +1,4 @@ -#include "libsersi/common/Vector3Float.h" +#include "common/data_types/Vector3Float.hpp" namespace dis { Vector3Float::Vector3Float() : x_(0.0), y_(0.0), z_(0.0) {} @@ -15,16 +15,20 @@ float Vector3Float::GetZ() const { return z_; } void Vector3Float::SetZ(float value) { z_ = value; } -void Vector3Float::Marshal(DataStream& data_stream) const { - data_stream << x_; - data_stream << y_; - data_stream << z_; +Result Vector3Float::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << x_; + byte_buffer << y_; + byte_buffer << z_; + + return Result::Ok(); } -void Vector3Float::Unmarshal(DataStream& data_stream) { - data_stream >> x_; - data_stream >> y_; - data_stream >> z_; +Result Vector3Float::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> x_; + byte_buffer >> y_; + byte_buffer >> z_; + + return Result::Ok(); } bool Vector3Float::operator==(const Vector3Float& rhs) const { @@ -49,4 +53,3 @@ std::size_t Vector3Float::GetMarshalledSize() const { } } // namespace dis - diff --git a/src/libsersi/distributed_emissions/VectoringNozzleSystemData.cpp b/src/libsersi/common/data_types/VectoringNozzleSystemData.cpp similarity index 75% rename from src/libsersi/distributed_emissions/VectoringNozzleSystemData.cpp rename to src/libsersi/common/data_types/VectoringNozzleSystemData.cpp index 1e74492..0295b7d 100644 --- a/src/libsersi/distributed_emissions/VectoringNozzleSystemData.cpp +++ b/src/libsersi/common/data_types/VectoringNozzleSystemData.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/VectoringNozzleSystemData.h" +#include distributed_emissions/VectoringNozzleSystemData.h" namespace dis { VectoringNozzleSystemData::VectoringNozzleSystemData() @@ -20,14 +20,14 @@ void VectoringNozzleSystemData::SetVerticalDeflectionAngle(float value) { vertical_deflection_angle_ = value; } -void VectoringNozzleSystemData::Marshal(DataStream& data_stream) const { - data_stream << horizontal_deflection_angle_; - data_stream << vertical_deflection_angle_; +void VectoringNozzleSystemData::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << horizontal_deflection_angle_; + byte_buffer << vertical_deflection_angle_; } -void VectoringNozzleSystemData::Unmarshal(DataStream& data_stream) { - data_stream >> horizontal_deflection_angle_; - data_stream >> vertical_deflection_angle_; +void VectoringNozzleSystemData::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> horizontal_deflection_angle_; + byte_buffer >> vertical_deflection_angle_; } bool VectoringNozzleSystemData::operator==( diff --git a/src/libsersi/distributed_emissions/CMakeLists.txt b/src/libsersi/distributed_emissions/CMakeLists.txt deleted file mode 100644 index f1917d0..0000000 --- a/src/libsersi/distributed_emissions/CMakeLists.txt +++ /dev/null @@ -1,63 +0,0 @@ -set(distributed_emissions_hdr - AcousticBeamData.h - AcousticBeamFundamentalParameter.h - AcousticEmitter.h - AcousticEmitterSystem.h - AcousticEmitterSystemData.h - ApaData.h - BeamData.h - DesignatorPdu.h - DistributedEmissionsFamilyPdu.h - ElectromagneticEmissionBeamData.h - ElectromagneticEmissionsPdu.h - ElectromagneticEmissionSystemData.h - EmitterSystem.h - FundamentalParameterData.h - FundamentalParameterDataIff.h - IffAtcNavAidsLayer1Pdu.h - IffAtcNavAidsLayer2Pdu.h - IffFundamentalData.h - LayerHeader.h - PropulsionSystemData.h - SeesPdu.h - ShaftRPMs.h - SystemID.h - TrackJamTarget.h - UnderwaterAcousticsPdu.h - VectoringNozzleSystemData.h -) - -set(distributed_emissions_src - AcousticBeamData.cpp - AcousticBeamFundamentalParameter.cpp - AcousticEmitter.cpp - AcousticEmitterSystem.cpp - AcousticEmitterSystemData.cpp - ApaData.cpp - BeamData.cpp - DesignatorPdu.cpp - DistributedEmissionsFamilyPdu.cpp - ElectromagneticEmissionBeamData.cpp - ElectromagneticEmissionsPdu.cpp - ElectromagneticEmissionSystemData.cpp - EmitterSystem.cpp - FundamentalParameterData.cpp - FundamentalParameterDataIff.cpp - IffAtcNavAidsLayer1Pdu.cpp - IffAtcNavAidsLayer2Pdu.cpp - IffFundamentalData.cpp - LayerHeader.cpp - PropulsionSystemData.cpp - SeesPdu.cpp - ShaftRPMs.cpp - SystemID.cpp - TrackJamTarget.cpp - UnderwaterAcousticsPdu.cpp - VectoringNozzleSystemData.cpp -) - -target_sources(sersi PRIVATE ${distributed_emissions_src}) - -install(FILES ${distributed_emissions_hdr} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/distributed_emissions -) diff --git a/src/libsersi/distributed_emissions/DesignatorPdu.cpp b/src/libsersi/distributed_emissions/DesignatorPdu.cpp index 27b5f02..fdfb609 100644 --- a/src/libsersi/distributed_emissions/DesignatorPdu.cpp +++ b/src/libsersi/distributed_emissions/DesignatorPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/DesignatorPdu.h" +#include distributed_emissions/DesignatorPdu.h" namespace dis { DesignatorPdu::DesignatorPdu() @@ -90,36 +90,36 @@ void DesignatorPdu::SetEntityLinearAcceleration(const Vector3Float& value) { entity_linear_acceleration_ = value; } -void DesignatorPdu::Marshal(DataStream& data_stream) const { - DistributedEmissionsFamilyPdu::Marshal(data_stream); - designating_entity_id_.Marshal(data_stream); - data_stream << code_name_; - designated_entity_id_.Marshal(data_stream); - data_stream << designator_code_; - data_stream << designator_power_; - data_stream << designator_wavelength_; - designator_spot_wrt_designated_.Marshal(data_stream); - designator_spot_location_.Marshal(data_stream); - data_stream << dead_reckoning_algorithm_; - data_stream << padding1_; - data_stream << padding2_; - entity_linear_acceleration_.Marshal(data_stream); -} - -void DesignatorPdu::Unmarshal(DataStream& data_stream) { - DistributedEmissionsFamilyPdu::Unmarshal(data_stream); - designating_entity_id_.Unmarshal(data_stream); - data_stream >> code_name_; - designated_entity_id_.Unmarshal(data_stream); - data_stream >> designator_code_; - data_stream >> designator_power_; - data_stream >> designator_wavelength_; - designator_spot_wrt_designated_.Unmarshal(data_stream); - designator_spot_location_.Unmarshal(data_stream); - data_stream >> dead_reckoning_algorithm_; - data_stream >> padding1_; - data_stream >> padding2_; - entity_linear_acceleration_.Unmarshal(data_stream); +void DesignatorPdu::Marshal(ByteBuffer& byte_buffer) const { + DistributedEmissionsFamilyPdu::Marshal(byte_buffer); + designating_entity_id_.Marshal(byte_buffer); + byte_buffer << code_name_; + designated_entity_id_.Marshal(byte_buffer); + byte_buffer << designator_code_; + byte_buffer << designator_power_; + byte_buffer << designator_wavelength_; + designator_spot_wrt_designated_.Marshal(byte_buffer); + designator_spot_location_.Marshal(byte_buffer); + byte_buffer << dead_reckoning_algorithm_; + byte_buffer << padding1_; + byte_buffer << padding2_; + entity_linear_acceleration_.Marshal(byte_buffer); +} + +void DesignatorPdu::Unmarshal(ByteBuffer& byte_buffer) { + DistributedEmissionsFamilyPdu::Unmarshal(byte_buffer); + designating_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> code_name_; + designated_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> designator_code_; + byte_buffer >> designator_power_; + byte_buffer >> designator_wavelength_; + designator_spot_wrt_designated_.Unmarshal(byte_buffer); + designator_spot_location_.Unmarshal(byte_buffer); + byte_buffer >> dead_reckoning_algorithm_; + byte_buffer >> padding1_; + byte_buffer >> padding2_; + entity_linear_acceleration_.Unmarshal(byte_buffer); } bool DesignatorPdu::operator==(const DesignatorPdu& rhs) const { diff --git a/src/libsersi/distributed_emissions/DesignatorPdu.h b/src/libsersi/distributed_emissions/DesignatorPdu.h index 25ec19f..63b4f9c 100644 --- a/src/libsersi/distributed_emissions/DesignatorPdu.h +++ b/src/libsersi/distributed_emissions/DesignatorPdu.h @@ -2,11 +2,11 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/Vector3Double.h" +#include common/Vector3Float.h" +#include distributed_emissions/DistributedEmissionsFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.7.2. Handles designating operations. COMPLETE @@ -56,8 +56,8 @@ class DesignatorPdu final : public DistributedEmissionsFamilyPdu { DesignatorPdu(); ~DesignatorPdu() final; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; [[nodiscard]] const EntityID& GetDesignatingEntityId() const; void SetDesignatingEntityId(const EntityID& value); diff --git a/src/libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.cpp b/src/libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.cpp deleted file mode 100644 index 76d5a09..0000000 --- a/src/libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h" - -namespace dis { -DistributedEmissionsFamilyPdu::DistributedEmissionsFamilyPdu() { - SetProtocolFamily(6); -} - -void DistributedEmissionsFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); -} - -void DistributedEmissionsFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); -} - -bool DistributedEmissionsFamilyPdu::operator==( - const DistributedEmissionsFamilyPdu& rhs) const { - bool ivars_equal = true; - - ivars_equal = Pdu::operator==(rhs); - - return ivars_equal; -} - -std::size_t DistributedEmissionsFamilyPdu::GetMarshalledSize() const { - std::size_t marshal_size = 0; - - marshal_size = Pdu::GetMarshalledSize(); - return marshal_size; -} - -} // namespace dis diff --git a/src/libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h b/src/libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h deleted file mode 100644 index 194a848..0000000 --- a/src/libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" - -namespace dis { -// Section 5.3.7. Electromagnetic Emissions. Abstract superclass for distirubted -// emissions PDU - -class DistributedEmissionsFamilyPdu : public Pdu { - private: - public: - DistributedEmissionsFamilyPdu(); - ~DistributedEmissionsFamilyPdu() override = default; - - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; - - [[nodiscard]] std::size_t GetMarshalledSize() const override; - - bool operator==(const DistributedEmissionsFamilyPdu& rhs) const; -}; -} // namespace dis diff --git a/src/libsersi/distributed_emissions/ElectromagneticEmissionsPdu.cpp b/src/libsersi/distributed_emissions/ElectromagneticEmissionsPdu.cpp index 8ebd70e..2eff09d 100644 --- a/src/libsersi/distributed_emissions/ElectromagneticEmissionsPdu.cpp +++ b/src/libsersi/distributed_emissions/ElectromagneticEmissionsPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/ElectromagneticEmissionsPdu.h" +#include distributed_emissions/ElectromagneticEmissionsPdu.h" #include @@ -73,32 +73,32 @@ void ElectromagneticEmissionsPdu::SetSystems( systems_ = value; } -void ElectromagneticEmissionsPdu::Marshal(DataStream& data_stream) const { - DistributedEmissionsFamilyPdu::Marshal(data_stream); - emitting_entity_id_.Marshal(data_stream); - event_id_.Marshal(data_stream); - data_stream << state_update_indicator_; - data_stream << static_cast(systems_.size()); - data_stream << padding_for_emissions_pdu_; +void ElectromagneticEmissionsPdu::Marshal(ByteBuffer& byte_buffer) const { + DistributedEmissionsFamilyPdu::Marshal(byte_buffer); + emitting_entity_id_.Marshal(byte_buffer); + event_id_.Marshal(byte_buffer); + byte_buffer << state_update_indicator_; + byte_buffer << static_cast(systems_.size()); + byte_buffer << padding_for_emissions_pdu_; for (const auto& x : systems_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ElectromagneticEmissionsPdu::Unmarshal(DataStream& data_stream) { +void ElectromagneticEmissionsPdu::Unmarshal(ByteBuffer& byte_buffer) { DistributedEmissionsFamilyPdu::Unmarshal( - data_stream); // unmarshal information in superclass first - emitting_entity_id_.Unmarshal(data_stream); - event_id_.Unmarshal(data_stream); - data_stream >> state_update_indicator_; - data_stream >> number_of_systems_; - data_stream >> padding_for_emissions_pdu_; + byte_buffer); // unmarshal information in superclass first + emitting_entity_id_.Unmarshal(byte_buffer); + event_id_.Unmarshal(byte_buffer); + byte_buffer >> state_update_indicator_; + byte_buffer >> number_of_systems_; + byte_buffer >> padding_for_emissions_pdu_; systems_.clear(); for (std::size_t idx = 0; idx < number_of_systems_; idx++) { ElectromagneticEmissionSystemData x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); systems_.push_back(x); } } diff --git a/src/libsersi/distributed_emissions/ElectromagneticEmissionsPdu.h b/src/libsersi/distributed_emissions/ElectromagneticEmissionsPdu.h index 5bbb57e..32fcb55 100644 --- a/src/libsersi/distributed_emissions/ElectromagneticEmissionsPdu.h +++ b/src/libsersi/distributed_emissions/ElectromagneticEmissionsPdu.h @@ -2,71 +2,35 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EventID.h" -#include "libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h" -#include "libsersi/distributed_emissions/ElectromagneticEmissionSystemData.h" -#include "libsersi/utils/DataStream.h" +#include "common/Pdu.hpp" +#include "common/data_types/EntityID.h" +#include "common/data_types/EventID.h" +#include "utils/ByteBuffer.hpp" namespace dis { -// Section 5.3.7.1. Information about active electronic warfare (EW) emissions -// and active EW countermeasures shall be communicated using an Electromagnetic -// Emission PDU. COMPLETE (I think) - -class ElectromagneticEmissionsPdu : public DistributedEmissionsFamilyPdu { - private: - /** ID of the entity emitting */ - EntityID emitting_entity_id_; - - /** ID of event */ - EventID event_id_; - - /** This field shall be used to indicate if the data in the PDU represents a - * state update or just data that has changed since issuance of the last - * Electromagnetic Emission PDU [relative to the identified entity and - * emission system(s)]. */ - uint8_t state_update_indicator_; - - /** This field shall specify the number of emission systems being described in - * the current PDU. */ - uint8_t number_of_systems_; - - /** padding */ - uint16_t padding_for_emissions_pdu_; - - /** Electromagnetic emmissions systems */ - std::vector systems_; +/// Implemented according to IEEE 1278.1-2012 §7.6.2 +class ElectromagneticEmissionsPdu final : public Pdu { + FIELD(EntityID, emitting_entity_id) + FIELD(EventID, event_id) + FIELD(EEAttributeStateIndicator, state_update_indicator) + FIELD(uint8_t, number_of_systems) + FIELD(uint16_t, padding) + FIELD(std::vector, systems) public: ElectromagneticEmissionsPdu(); - ~ElectromagneticEmissionsPdu() override; - - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; - - EntityID& GetEmittingEntityId(); - [[nodiscard]] const EntityID& GetEmittingEntityId() const; - void SetEmittingEntityId(const EntityID& value); - - EventID& GetEventId(); - [[nodiscard]] const EventID& GetEventId() const; - void SetEventId(const EventID& value); - - [[nodiscard]] uint8_t GetStateUpdateIndicator() const; - void SetStateUpdateIndicator(uint8_t value); - - [[nodiscard]] uint8_t GetNumberOfSystems() const; - - [[nodiscard]] uint16_t GetPaddingForEmissionsPdu() const; - void SetPaddingForEmissionsPdu(uint16_t value); + ~ElectromagneticEmissionsPdu() final; - std::vector& GetSystems(); - [[nodiscard]] const std::vector& - GetSystems() const; - void SetSystems(const std::vector& value); + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; - [[nodiscard]] std::size_t GetMarshalledSize() const override; + [[nodiscard]] std::size_t GetMarshalledSize() const final; - bool operator==(const ElectromagneticEmissionsPdu& rhs) const; + friend bool operator==(const ElectromagneticEmissionsPdu& lhs, const ElectromagneticEmissionsPdu& rhs) { + return lhs.emitting_entity_id_ == rhs.emitting_entity_id_ && lhs.event_id_ == rhs.event_id_ && + lhs.state_update_indicator_ == rhs.state_update_indicator_ && + lhs.number_of_systems_ == rhs.number_of_systems_ && lhs.padding_ == rhs.padding_ && + lhs.systems_ == rhs.systems_; + } }; } // namespace dis diff --git a/src/libsersi/distributed_emissions/SeesPdu.cpp b/src/libsersi/distributed_emissions/SeesPdu.cpp index 06b3dec..4733012 100644 --- a/src/libsersi/distributed_emissions/SeesPdu.cpp +++ b/src/libsersi/distributed_emissions/SeesPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/SeesPdu.h" +#include distributed_emissions/SeesPdu.h" namespace dis { SeesPdu::SeesPdu() @@ -85,44 +85,44 @@ void SeesPdu::SetVectoringSystemData( vectoring_system_data_ = value; } -void SeesPdu::Marshal(DataStream& data_stream) const { - DistributedEmissionsFamilyPdu::Marshal(data_stream); - originating_entity_id_.Marshal(data_stream); - data_stream << infrared_signature_representation_index_; - data_stream << acoustic_signature_representation_index_; - data_stream << radar_cross_section_signature_representation_index_; - data_stream << static_cast(propulsion_system_data_.size()); - data_stream << static_cast(vectoring_system_data_.size()); +void SeesPdu::Marshal(ByteBuffer& byte_buffer) const { + DistributedEmissionsFamilyPdu::Marshal(byte_buffer); + originating_entity_id_.Marshal(byte_buffer); + byte_buffer << infrared_signature_representation_index_; + byte_buffer << acoustic_signature_representation_index_; + byte_buffer << radar_cross_section_signature_representation_index_; + byte_buffer << static_cast(propulsion_system_data_.size()); + byte_buffer << static_cast(vectoring_system_data_.size()); for (const auto& x : propulsion_system_data_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : vectoring_system_data_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void SeesPdu::Unmarshal(DataStream& data_stream) { - DistributedEmissionsFamilyPdu::Unmarshal(data_stream); - originating_entity_id_.Unmarshal(data_stream); - data_stream >> infrared_signature_representation_index_; - data_stream >> acoustic_signature_representation_index_; - data_stream >> radar_cross_section_signature_representation_index_; - data_stream >> number_of_propulsion_systems_; - data_stream >> number_of_vectoring_nozzle_systems_; +void SeesPdu::Unmarshal(ByteBuffer& byte_buffer) { + DistributedEmissionsFamilyPdu::Unmarshal(byte_buffer); + originating_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> infrared_signature_representation_index_; + byte_buffer >> acoustic_signature_representation_index_; + byte_buffer >> radar_cross_section_signature_representation_index_; + byte_buffer >> number_of_propulsion_systems_; + byte_buffer >> number_of_vectoring_nozzle_systems_; propulsion_system_data_.clear(); for (std::size_t idx = 0; idx < number_of_propulsion_systems_; idx++) { PropulsionSystemData x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); propulsion_system_data_.push_back(x); } vectoring_system_data_.clear(); for (std::size_t idx = 0; idx < number_of_vectoring_nozzle_systems_; idx++) { VectoringNozzleSystemData x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); vectoring_system_data_.push_back(x); } } diff --git a/src/libsersi/distributed_emissions/SeesPdu.h b/src/libsersi/distributed_emissions/SeesPdu.h index 5235d7f..9173b73 100644 --- a/src/libsersi/distributed_emissions/SeesPdu.h +++ b/src/libsersi/distributed_emissions/SeesPdu.h @@ -3,11 +3,11 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h" -#include "libsersi/distributed_emissions/PropulsionSystemData.h" -#include "libsersi/distributed_emissions/VectoringNozzleSystemData.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include distributed_emissions/DistributedEmissionsFamilyPdu.h" +#include distributed_emissions/PropulsionSystemData.h" +#include distributed_emissions/VectoringNozzleSystemData.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.7.5. SEES PDU, supplemental emissions entity state information. @@ -43,8 +43,8 @@ class SeesPdu final : public DistributedEmissionsFamilyPdu { SeesPdu(); ~SeesPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetOriginatingEntityId(); [[nodiscard]] const EntityID& GetOriginatingEntityId() const; diff --git a/src/libsersi/distributed_emissions/UnderwaterAcousticsPdu.cpp b/src/libsersi/distributed_emissions/UnderwaterAcousticsPdu.cpp index 588727a..ad22401 100644 --- a/src/libsersi/distributed_emissions/UnderwaterAcousticsPdu.cpp +++ b/src/libsersi/distributed_emissions/UnderwaterAcousticsPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/distributed_emissions/UnderwaterAcousticsPdu.h" +#include distributed_emissions/UnderwaterAcousticsPdu.h" namespace dis { UnderwaterAcousticsPdu::UnderwaterAcousticsPdu() @@ -115,61 +115,61 @@ void UnderwaterAcousticsPdu::SetEmitterSystems( emitter_systems_ = value; } -void UnderwaterAcousticsPdu::Marshal(DataStream& data_stream) const { - DistributedEmissionsFamilyPdu::Marshal(data_stream); - emitting_entity_id_.Marshal(data_stream); - event_id_.Marshal(data_stream); - data_stream << state_change_indicator_; - data_stream << pad_; - data_stream << passive_parameter_index_; - data_stream << propulsion_plant_configuration_; - data_stream << static_cast(shaft_rpms_.size()); - data_stream << static_cast(apa_data_.size()); - data_stream << static_cast(emitter_systems_.size()); +void UnderwaterAcousticsPdu::Marshal(ByteBuffer& byte_buffer) const { + DistributedEmissionsFamilyPdu::Marshal(byte_buffer); + emitting_entity_id_.Marshal(byte_buffer); + event_id_.Marshal(byte_buffer); + byte_buffer << state_change_indicator_; + byte_buffer << pad_; + byte_buffer << passive_parameter_index_; + byte_buffer << propulsion_plant_configuration_; + byte_buffer << static_cast(shaft_rpms_.size()); + byte_buffer << static_cast(apa_data_.size()); + byte_buffer << static_cast(emitter_systems_.size()); for (const auto& x : shaft_rpms_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : apa_data_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : emitter_systems_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void UnderwaterAcousticsPdu::Unmarshal(DataStream& data_stream) { - DistributedEmissionsFamilyPdu::Unmarshal(data_stream); - emitting_entity_id_.Unmarshal(data_stream); - event_id_.Unmarshal(data_stream); - data_stream >> state_change_indicator_; - data_stream >> pad_; - data_stream >> passive_parameter_index_; - data_stream >> propulsion_plant_configuration_; - data_stream >> number_of_shafts_; - data_stream >> number_of_apas_; - data_stream >> number_of_ua_emitter_systems_; +void UnderwaterAcousticsPdu::Unmarshal(ByteBuffer& byte_buffer) { + DistributedEmissionsFamilyPdu::Unmarshal(byte_buffer); + emitting_entity_id_.Unmarshal(byte_buffer); + event_id_.Unmarshal(byte_buffer); + byte_buffer >> state_change_indicator_; + byte_buffer >> pad_; + byte_buffer >> passive_parameter_index_; + byte_buffer >> propulsion_plant_configuration_; + byte_buffer >> number_of_shafts_; + byte_buffer >> number_of_apas_; + byte_buffer >> number_of_ua_emitter_systems_; shaft_rpms_.clear(); for (std::size_t idx = 0; idx < number_of_shafts_; idx++) { ShaftRPMs x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); shaft_rpms_.push_back(x); } apa_data_.clear(); for (std::size_t idx = 0; idx < number_of_apas_; idx++) { ApaData x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); apa_data_.push_back(x); } emitter_systems_.clear(); for (std::size_t idx = 0; idx < number_of_ua_emitter_systems_; idx++) { AcousticEmitterSystemData x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); emitter_systems_.push_back(x); } } diff --git a/src/libsersi/distributed_emissions/UnderwaterAcousticsPdu.h b/src/libsersi/distributed_emissions/UnderwaterAcousticsPdu.h index 94227d7..4f6888d 100644 --- a/src/libsersi/distributed_emissions/UnderwaterAcousticsPdu.h +++ b/src/libsersi/distributed_emissions/UnderwaterAcousticsPdu.h @@ -3,13 +3,13 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EventID.h" -#include "libsersi/distributed_emissions/AcousticEmitterSystemData.h" -#include "libsersi/distributed_emissions/ApaData.h" -#include "libsersi/distributed_emissions/DistributedEmissionsFamilyPdu.h" -#include "libsersi/distributed_emissions/ShaftRPMs.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EventID.h" +#include distributed_emissions/AcousticEmitterSystemData.h" +#include distributed_emissions/ApaData.h" +#include distributed_emissions/DistributedEmissionsFamilyPdu.h" +#include distributed_emissions/ShaftRPMs.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.7.3. Information about underwater acoustic emmissions. This @@ -67,8 +67,8 @@ class UnderwaterAcousticsPdu final : public DistributedEmissionsFamilyPdu { UnderwaterAcousticsPdu(); ~UnderwaterAcousticsPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetEmittingEntityId(); [[nodiscard]] const EntityID& GetEmittingEntityId() const; diff --git a/src/libsersi/entity_information/CMakeLists.txt b/src/libsersi/entity_information/CMakeLists.txt index 046af37..49104cd 100644 --- a/src/libsersi/entity_information/CMakeLists.txt +++ b/src/libsersi/entity_information/CMakeLists.txt @@ -18,7 +18,7 @@ set(entity_information_src Marking.cpp ) -target_sources(sersi PRIVATE ${entity_information_src}) +target_sources(${PROJECT_NAME} PRIVATE ${entity_information_src}) install(FILES ${entity_information_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/entity_information diff --git a/src/libsersi/entity_information/CollisionElasticPdu.cpp b/src/libsersi/entity_information/CollisionElasticPdu.cpp index f70d1cc..cdd2ea2 100644 --- a/src/libsersi/entity_information/CollisionElasticPdu.cpp +++ b/src/libsersi/entity_information/CollisionElasticPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_information/CollisionElasticPdu.h" +#include entity_information/CollisionElasticPdu.h" namespace dis { CollisionElasticPdu::CollisionElasticPdu() @@ -151,42 +151,42 @@ void CollisionElasticPdu::SetCoefficientOfRestitution(float value) { coefficient_of_restitution_ = value; } -void CollisionElasticPdu::Marshal(DataStream& data_stream) const { - EntityInformationFamilyPdu::Marshal(data_stream); - issuing_entity_id_.Marshal(data_stream); - colliding_entity_id_.Marshal(data_stream); - collision_event_id_.Marshal(data_stream); - data_stream << pad_; - contact_velocity_.Marshal(data_stream); - data_stream << mass_; - location_.Marshal(data_stream); - data_stream << collision_result_xx_; - data_stream << collision_result_xy_; - data_stream << collision_result_xz_; - data_stream << collision_result_yy_; - data_stream << collision_result_yz_; - data_stream << collision_result_zz_; - unit_surface_normal_.Marshal(data_stream); - data_stream << coefficient_of_restitution_; -} - -void CollisionElasticPdu::Unmarshal(DataStream& data_stream) { - EntityInformationFamilyPdu::Unmarshal(data_stream); - issuing_entity_id_.Unmarshal(data_stream); - colliding_entity_id_.Unmarshal(data_stream); - collision_event_id_.Unmarshal(data_stream); - data_stream >> pad_; - contact_velocity_.Unmarshal(data_stream); - data_stream >> mass_; - location_.Unmarshal(data_stream); - data_stream >> collision_result_xx_; - data_stream >> collision_result_xy_; - data_stream >> collision_result_xz_; - data_stream >> collision_result_yy_; - data_stream >> collision_result_yz_; - data_stream >> collision_result_zz_; - unit_surface_normal_.Unmarshal(data_stream); - data_stream >> coefficient_of_restitution_; +void CollisionElasticPdu::Marshal(ByteBuffer& byte_buffer) const { + EntityInformationFamilyPdu::Marshal(byte_buffer); + issuing_entity_id_.Marshal(byte_buffer); + colliding_entity_id_.Marshal(byte_buffer); + collision_event_id_.Marshal(byte_buffer); + byte_buffer << pad_; + contact_velocity_.Marshal(byte_buffer); + byte_buffer << mass_; + location_.Marshal(byte_buffer); + byte_buffer << collision_result_xx_; + byte_buffer << collision_result_xy_; + byte_buffer << collision_result_xz_; + byte_buffer << collision_result_yy_; + byte_buffer << collision_result_yz_; + byte_buffer << collision_result_zz_; + unit_surface_normal_.Marshal(byte_buffer); + byte_buffer << coefficient_of_restitution_; +} + +void CollisionElasticPdu::Unmarshal(ByteBuffer& byte_buffer) { + EntityInformationFamilyPdu::Unmarshal(byte_buffer); + issuing_entity_id_.Unmarshal(byte_buffer); + colliding_entity_id_.Unmarshal(byte_buffer); + collision_event_id_.Unmarshal(byte_buffer); + byte_buffer >> pad_; + contact_velocity_.Unmarshal(byte_buffer); + byte_buffer >> mass_; + location_.Unmarshal(byte_buffer); + byte_buffer >> collision_result_xx_; + byte_buffer >> collision_result_xy_; + byte_buffer >> collision_result_xz_; + byte_buffer >> collision_result_yy_; + byte_buffer >> collision_result_yz_; + byte_buffer >> collision_result_zz_; + unit_surface_normal_.Unmarshal(byte_buffer); + byte_buffer >> coefficient_of_restitution_; } bool CollisionElasticPdu::operator==(const CollisionElasticPdu& rhs) const { diff --git a/src/libsersi/entity_information/CollisionElasticPdu.h b/src/libsersi/entity_information/CollisionElasticPdu.h deleted file mode 100644 index 71a67c1..0000000 --- a/src/libsersi/entity_information/CollisionElasticPdu.h +++ /dev/null @@ -1,126 +0,0 @@ -#pragma once - -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EventID.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/entity_information/EntityInformationFamilyPdu.h" -#include "libsersi/utils/DataStream.h" - -namespace dis { -// 5.3.3.3. Information about elastic collisions in a DIS exercise shall be -// communicated using a Collision-Elastic PDU. COMPLETE - -class CollisionElasticPdu final : public EntityInformationFamilyPdu { - private: - /** ID of the entity that issued the collision PDU */ - EntityID issuing_entity_id_; - - /** ID of entity that has collided with the issuing entity ID */ - EntityID colliding_entity_id_; - - /** ID of event */ - EventID collision_event_id_; - - /** some padding */ - int16_t pad_; - - /** velocity at collision */ - Vector3Float contact_velocity_; - - /** mass of issuing entity */ - float mass_; - - /** Location with respect to entity the issuing entity collided with */ - Vector3Float location_; - - /** tensor values */ - float collision_result_xx_; - - /** tensor values */ - float collision_result_xy_; - - /** tensor values */ - float collision_result_xz_; - - /** tensor values */ - float collision_result_yy_; - - /** tensor values */ - float collision_result_yz_; - - /** tensor values */ - float collision_result_zz_; - - /** This record shall represent the normal vector to the surface at the point - * of collision detection. The surface normal shall be represented in world - * coordinates. */ - Vector3Float unit_surface_normal_; - - /** This field shall represent the degree to which energy is conserved in a - * collision */ - float coefficient_of_restitution_; - - public: - CollisionElasticPdu(); - ~CollisionElasticPdu() final; - - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; - - EntityID& GetIssuingEntityId(); - [[nodiscard]] const EntityID& GetIssuingEntityId() const; - void SetIssuingEntityId(const EntityID& value); - - EntityID& GetCollidingEntityId(); - [[nodiscard]] const EntityID& GetCollidingEntityId() const; - void SetCollidingEntityId(const EntityID& value); - - EventID& GetCollisionEventId(); - [[nodiscard]] const EventID& GetCollisionEventId() const; - void SetCollisionEventId(const EventID& value); - - [[nodiscard]] int16_t GetPad() const; - void SetPad(int16_t value); - - Vector3Float& GetContactVelocity(); - [[nodiscard]] const Vector3Float& GetContactVelocity() const; - void SetContactVelocity(const Vector3Float& value); - - [[nodiscard]] float GetMass() const; - void SetMass(float value); - - Vector3Float& GetLocation(); - [[nodiscard]] const Vector3Float& GetLocation() const; - void SetLocation(const Vector3Float& value); - - [[nodiscard]] float GetCollisionResultXX() const; - void SetCollisionResultXX(float value); - - [[nodiscard]] float GetCollisionResultXY() const; - void SetCollisionResultXY(float value); - - [[nodiscard]] float GetCollisionResultXZ() const; - void SetCollisionResultXZ(float value); - - [[nodiscard]] float GetCollisionResultYY() const; - void SetCollisionResultYY(float value); - - [[nodiscard]] float GetCollisionResultYZ() const; - void SetCollisionResultYZ(float value); - - [[nodiscard]] float GetCollisionResultZZ() const; - void SetCollisionResultZZ(float value); - - Vector3Float& GetUnitSurfaceNormal(); - [[nodiscard]] const Vector3Float& GetUnitSurfaceNormal() const; - void SetUnitSurfaceNormal(const Vector3Float& value); - - [[nodiscard]] float GetCoefficientOfRestitution() const; - void SetCoefficientOfRestitution(float value); - - [[nodiscard]] std::size_t GetMarshalledSize() const final; - - void extracted(const CollisionElasticPdu& rhs, bool& ivars_equal) const; - bool operator==(const CollisionElasticPdu& rhs) const; -}; -} // namespace dis diff --git a/src/libsersi/entity_information/CollisionPdu.cpp b/src/libsersi/entity_information/CollisionPdu.cpp index 804f2b1..eef92fa 100644 --- a/src/libsersi/entity_information/CollisionPdu.cpp +++ b/src/libsersi/entity_information/CollisionPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_information/CollisionPdu.h" +#include entity_information/CollisionPdu.h" namespace dis { CollisionPdu::CollisionPdu() : collision_type_(0), pad_(0), mass_(0.0) { @@ -58,28 +58,28 @@ const Vector3Float& CollisionPdu::GetLocation() const { return location_; } void CollisionPdu::SetLocation(const Vector3Float& value) { location_ = value; } -void CollisionPdu::Marshal(DataStream& data_stream) const { - EntityInformationFamilyPdu::Marshal(data_stream); - issuing_entity_id_.Marshal(data_stream); - colliding_entity_id_.Marshal(data_stream); - event_id_.Marshal(data_stream); - data_stream << collision_type_; - data_stream << pad_; - velocity_.Marshal(data_stream); - data_stream << mass_; - location_.Marshal(data_stream); +void CollisionPdu::Marshal(ByteBuffer& byte_buffer) const { + EntityInformationFamilyPdu::Marshal(byte_buffer); + issuing_entity_id_.Marshal(byte_buffer); + colliding_entity_id_.Marshal(byte_buffer); + event_id_.Marshal(byte_buffer); + byte_buffer << collision_type_; + byte_buffer << pad_; + velocity_.Marshal(byte_buffer); + byte_buffer << mass_; + location_.Marshal(byte_buffer); } -void CollisionPdu::Unmarshal(DataStream& data_stream) { - EntityInformationFamilyPdu::Unmarshal(data_stream); - issuing_entity_id_.Unmarshal(data_stream); - colliding_entity_id_.Unmarshal(data_stream); - event_id_.Unmarshal(data_stream); - data_stream >> collision_type_; - data_stream >> pad_; - velocity_.Unmarshal(data_stream); - data_stream >> mass_; - location_.Unmarshal(data_stream); +void CollisionPdu::Unmarshal(ByteBuffer& byte_buffer) { + EntityInformationFamilyPdu::Unmarshal(byte_buffer); + issuing_entity_id_.Unmarshal(byte_buffer); + colliding_entity_id_.Unmarshal(byte_buffer); + event_id_.Unmarshal(byte_buffer); + byte_buffer >> collision_type_; + byte_buffer >> pad_; + velocity_.Unmarshal(byte_buffer); + byte_buffer >> mass_; + location_.Unmarshal(byte_buffer); } bool CollisionPdu::operator==(const CollisionPdu& rhs) const { diff --git a/src/libsersi/entity_information/CollisionPdu.h b/src/libsersi/entity_information/CollisionPdu.h index 67d022c..bfa2026 100644 --- a/src/libsersi/entity_information/CollisionPdu.h +++ b/src/libsersi/entity_information/CollisionPdu.h @@ -1,10 +1,10 @@ #pragma once -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EventID.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/entity_information/EntityInformationFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EventID.h" +#include common/Vector3Float.h" +#include entity_information/EntityInformationFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.3.2. Information about a collision. COMPLETE @@ -39,8 +39,8 @@ class CollisionPdu final : public EntityInformationFamilyPdu { CollisionPdu(); ~CollisionPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetIssuingEntityId(); [[nodiscard]] const EntityID& GetIssuingEntityId() const; diff --git a/src/libsersi/entity_information/DeadReckoningParameter.cpp b/src/libsersi/entity_information/DeadReckoningParameter.cpp index 0bd1d59..d10da9e 100644 --- a/src/libsersi/entity_information/DeadReckoningParameter.cpp +++ b/src/libsersi/entity_information/DeadReckoningParameter.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_information/DeadReckoningParameter.h" +#include entity_information/DeadReckoningParameter.h" namespace dis { DeadReckoningParameter::DeadReckoningParameter() @@ -59,26 +59,26 @@ void DeadReckoningParameter::SetEntityAngularVelocity( entity_angular_velocity_ = value; } -void DeadReckoningParameter::Marshal(DataStream& data_stream) const { - data_stream << dead_reckoning_algorithm_; +void DeadReckoningParameter::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << dead_reckoning_algorithm_; for (std::size_t idx = 0; idx < kArraySize; idx++) { - data_stream << other_parameters_[idx]; + byte_buffer << other_parameters_[idx]; } - entity_linear_acceleration_.Marshal(data_stream); - entity_angular_velocity_.Marshal(data_stream); + entity_linear_acceleration_.Marshal(byte_buffer); + entity_angular_velocity_.Marshal(byte_buffer); } -void DeadReckoningParameter::Unmarshal(DataStream& data_stream) { - data_stream >> dead_reckoning_algorithm_; +void DeadReckoningParameter::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> dead_reckoning_algorithm_; for (std::size_t idx = 0; idx < kArraySize; idx++) { - data_stream >> other_parameters_[idx]; + byte_buffer >> other_parameters_[idx]; } - entity_linear_acceleration_.Unmarshal(data_stream); - entity_angular_velocity_.Unmarshal(data_stream); + entity_linear_acceleration_.Unmarshal(byte_buffer); + entity_angular_velocity_.Unmarshal(byte_buffer); } bool DeadReckoningParameter::operator==( diff --git a/src/libsersi/entity_information/DeadReckoningParameter.h b/src/libsersi/entity_information/DeadReckoningParameter.h index 6c9fe28..031cd16 100644 --- a/src/libsersi/entity_information/DeadReckoningParameter.h +++ b/src/libsersi/entity_information/DeadReckoningParameter.h @@ -3,8 +3,8 @@ #include #include -#include "libsersi/common/Vector3Float.h" -#include "libsersi/utils/DataStream.h" +#include common/Vector3Float.h" +#include utils/ByteBuffer.hpp" namespace dis { constexpr auto kArraySize = 15; @@ -28,8 +28,8 @@ class DeadReckoningParameter { DeadReckoningParameter(); ~DeadReckoningParameter() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetDeadReckoningAlgorithm() const; void SetDeadReckoningAlgorithm(uint8_t value); diff --git a/src/libsersi/entity_information/EntityInformationFamilyPdu.cpp b/src/libsersi/entity_information/EntityInformationFamilyPdu.cpp index e20f1b6..2af3e0d 100644 --- a/src/libsersi/entity_information/EntityInformationFamilyPdu.cpp +++ b/src/libsersi/entity_information/EntityInformationFamilyPdu.cpp @@ -1,16 +1,13 @@ -#include "libsersi/entity_information/EntityInformationFamilyPdu.h" +#include entity_information/EntityInformationFamilyPdu.h" namespace dis { -EntityInformationFamilyPdu::EntityInformationFamilyPdu() { - SetProtocolFamily(1); -} -void EntityInformationFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); // Marshal information in superclass first +void EntityInformationFamilyPdu::Marshal(ByteBuffer& byte_buffer) const { + Pdu::Marshal(byte_buffer); // Marshal information in superclass first } -void EntityInformationFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); // unmarshal information in superclass first +void EntityInformationFamilyPdu::Unmarshal(ByteBuffer& byte_buffer) { + Pdu::Unmarshal(byte_buffer); // unmarshal information in superclass first } bool EntityInformationFamilyPdu::operator==( diff --git a/src/libsersi/entity_information/EntityInformationFamilyPdu.h b/src/libsersi/entity_information/EntityInformationFamilyPdu.h index ef063be..eadaf71 100644 --- a/src/libsersi/entity_information/EntityInformationFamilyPdu.h +++ b/src/libsersi/entity_information/EntityInformationFamilyPdu.h @@ -2,8 +2,8 @@ #include -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.3. Common superclass for EntityState, Collision, @@ -12,11 +12,11 @@ namespace dis { class EntityInformationFamilyPdu : public Pdu { public: - EntityInformationFamilyPdu(); + EntityInformationFamilyPdu() = default; ~EntityInformationFamilyPdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; [[nodiscard]] std::size_t GetMarshalledSize() const override; diff --git a/src/libsersi/entity_information/EntityStatePdu.cpp b/src/libsersi/entity_information/EntityStatePdu.cpp index aace011..795eccf 100644 --- a/src/libsersi/entity_information/EntityStatePdu.cpp +++ b/src/libsersi/entity_information/EntityStatePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_information/EntityStatePdu.h" +#include entity_information/EntityStatePdu.h" namespace dis { EntityStatePdu::EntityStatePdu() @@ -6,7 +6,6 @@ EntityStatePdu::EntityStatePdu() number_of_articulation_parameters_(0), entity_appearance_(0), capabilities_(0) { - SetPduType(1); } EntityStatePdu::~EntityStatePdu() { articulation_parameters_.clear(); } @@ -124,47 +123,47 @@ void EntityStatePdu::SetArticulationParameters( articulation_parameters_ = value; } -void EntityStatePdu::Marshal(DataStream& data_stream) const { +void EntityStatePdu::Marshal(ByteBuffer& byte_buffer) const { EntityInformationFamilyPdu::Marshal( - data_stream); // Marshal information in superclass first - entity_id_.Marshal(data_stream); - data_stream << force_id_; - data_stream << static_cast(articulation_parameters_.size()); - entity_type_.Marshal(data_stream); - alternative_entity_type_.Marshal(data_stream); - entity_linear_velocity_.Marshal(data_stream); - entity_location_.Marshal(data_stream); - entity_orientation_.Marshal(data_stream); - data_stream << entity_appearance_; - dead_reckoning_parameters_.Marshal(data_stream); - marking_.Marshal(data_stream); - data_stream << capabilities_; + byte_buffer); // Marshal information in superclass first + entity_id_.Marshal(byte_buffer); + byte_buffer << force_id_; + byte_buffer << static_cast(articulation_parameters_.size()); + entity_type_.Marshal(byte_buffer); + alternative_entity_type_.Marshal(byte_buffer); + entity_linear_velocity_.Marshal(byte_buffer); + entity_location_.Marshal(byte_buffer); + entity_orientation_.Marshal(byte_buffer); + byte_buffer << entity_appearance_; + dead_reckoning_parameters_.Marshal(byte_buffer); + marking_.Marshal(byte_buffer); + byte_buffer << capabilities_; for (auto x : articulation_parameters_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void EntityStatePdu::Unmarshal(DataStream& data_stream) { +void EntityStatePdu::Unmarshal(ByteBuffer& byte_buffer) { EntityInformationFamilyPdu::Unmarshal( - data_stream); // Unmarshal information in superclass first - entity_id_.Unmarshal(data_stream); - data_stream >> force_id_; - data_stream >> number_of_articulation_parameters_; - entity_type_.Unmarshal(data_stream); - alternative_entity_type_.Unmarshal(data_stream); - entity_linear_velocity_.Unmarshal(data_stream); - entity_location_.Unmarshal(data_stream); - entity_orientation_.Unmarshal(data_stream); - data_stream >> entity_appearance_; - dead_reckoning_parameters_.Unmarshal(data_stream); - marking_.Unmarshal(data_stream); - data_stream >> capabilities_; + byte_buffer); // Unmarshal information in superclass first + entity_id_.Unmarshal(byte_buffer); + byte_buffer >> force_id_; + byte_buffer >> number_of_articulation_parameters_; + entity_type_.Unmarshal(byte_buffer); + alternative_entity_type_.Unmarshal(byte_buffer); + entity_linear_velocity_.Unmarshal(byte_buffer); + entity_location_.Unmarshal(byte_buffer); + entity_orientation_.Unmarshal(byte_buffer); + byte_buffer >> entity_appearance_; + dead_reckoning_parameters_.Unmarshal(byte_buffer); + marking_.Unmarshal(byte_buffer); + byte_buffer >> capabilities_; articulation_parameters_.clear(); for (char idx = 0; idx < number_of_articulation_parameters_; idx++) { ArticulationParameter x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); articulation_parameters_.push_back(x); } } diff --git a/src/libsersi/entity_information/EntityStatePdu.h b/src/libsersi/entity_information/EntityStatePdu.h index de991fa..07e860c 100644 --- a/src/libsersi/entity_information/EntityStatePdu.h +++ b/src/libsersi/entity_information/EntityStatePdu.h @@ -3,22 +3,21 @@ #include #include -#include "libsersi/common/ArticulationParameter.h" -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/common/Orientation.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/entity_information/DeadReckoningParameter.h" -#include "libsersi/entity_information/EntityInformationFamilyPdu.h" -#include "libsersi/entity_information/Marking.h" -#include "libsersi/utils/DataStream.h" +#include common/ArticulationParameter.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include common/Orientation.h" +#include common/Vector3Double.h" +#include common/Vector3Float.h" +#include entity_information/DeadReckoningParameter.h" +#include common/Pdu.hpp" +#include entity_information/Marking.h" namespace dis { // Section 5.3.3.1. Represents the postion and state of one entity in the world. // COMPLETE -class EntityStatePdu final : public EntityInformationFamilyPdu { +class EntityStatePdu final : public Pdu { private: /** Unique ID for an entity that is tied to this state information */ EntityID entity_id_; @@ -64,8 +63,8 @@ class EntityStatePdu final : public EntityInformationFamilyPdu { EntityStatePdu(); ~EntityStatePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetEntityId(); [[nodiscard]] const EntityID& GetEntityId() const; diff --git a/src/libsersi/entity_information/EntityStateUpdatePdu.cpp b/src/libsersi/entity_information/EntityStateUpdatePdu.cpp index 75002ea..4bd004f 100644 --- a/src/libsersi/entity_information/EntityStateUpdatePdu.cpp +++ b/src/libsersi/entity_information/EntityStateUpdatePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_information/EntityStateUpdatePdu.h" +#include entity_information/EntityStateUpdatePdu.h" namespace dis { EntityStateUpdatePdu::EntityStateUpdatePdu() @@ -88,35 +88,35 @@ void EntityStateUpdatePdu::SetArticulationParameters( articulation_parameters_ = value; } -void EntityStateUpdatePdu::Marshal(DataStream& data_stream) const { - EntityInformationFamilyPdu::Marshal(data_stream); - entity_id_.Marshal(data_stream); - data_stream << padding1_; - data_stream << static_cast(articulation_parameters_.size()); - entity_linear_velocity_.Marshal(data_stream); - entity_location_.Marshal(data_stream); - entity_orientation_.Marshal(data_stream); - data_stream << entity_appearance_; +void EntityStateUpdatePdu::Marshal(ByteBuffer& byte_buffer) const { + EntityInformationFamilyPdu::Marshal(byte_buffer); + entity_id_.Marshal(byte_buffer); + byte_buffer << padding1_; + byte_buffer << static_cast(articulation_parameters_.size()); + entity_linear_velocity_.Marshal(byte_buffer); + entity_location_.Marshal(byte_buffer); + entity_orientation_.Marshal(byte_buffer); + byte_buffer << entity_appearance_; for (auto x : articulation_parameters_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void EntityStateUpdatePdu::Unmarshal(DataStream& data_stream) { - EntityInformationFamilyPdu::Unmarshal(data_stream); - entity_id_.Unmarshal(data_stream); - data_stream >> padding1_; - data_stream >> number_of_articulation_parameters_; - entity_linear_velocity_.Unmarshal(data_stream); - entity_location_.Unmarshal(data_stream); - entity_orientation_.Unmarshal(data_stream); - data_stream >> entity_appearance_; +void EntityStateUpdatePdu::Unmarshal(ByteBuffer& byte_buffer) { + EntityInformationFamilyPdu::Unmarshal(byte_buffer); + entity_id_.Unmarshal(byte_buffer); + byte_buffer >> padding1_; + byte_buffer >> number_of_articulation_parameters_; + entity_linear_velocity_.Unmarshal(byte_buffer); + entity_location_.Unmarshal(byte_buffer); + entity_orientation_.Unmarshal(byte_buffer); + byte_buffer >> entity_appearance_; articulation_parameters_.clear(); for (std::size_t idx = 0; idx < number_of_articulation_parameters_; idx++) { ArticulationParameter x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); articulation_parameters_.push_back(x); } } diff --git a/src/libsersi/entity_information/EntityStateUpdatePdu.h b/src/libsersi/entity_information/EntityStateUpdatePdu.h index 3c1fe43..f7806ab 100644 --- a/src/libsersi/entity_information/EntityStateUpdatePdu.h +++ b/src/libsersi/entity_information/EntityStateUpdatePdu.h @@ -2,13 +2,13 @@ #include -#include "libsersi/common/ArticulationParameter.h" -#include "libsersi/common/EntityID.h" -#include "libsersi/common/Orientation.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/entity_information/EntityInformationFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/ArticulationParameter.h" +#include common/EntityID.h" +#include common/Orientation.h" +#include common/Vector3Double.h" +#include common/Vector3Float.h" +#include entity_information/EntityInformationFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.3.3.4. Nonstatic information about a particular entity may be communicated @@ -44,8 +44,8 @@ class EntityStateUpdatePdu final : public EntityInformationFamilyPdu { EntityStateUpdatePdu(); ~EntityStateUpdatePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetEntityId(); [[nodiscard]] const EntityID& GetEntityId() const; diff --git a/src/libsersi/entity_information/Marking.cpp b/src/libsersi/entity_information/Marking.cpp index 3bc9373..c274ee9 100644 --- a/src/libsersi/entity_information/Marking.cpp +++ b/src/libsersi/entity_information/Marking.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_information/Marking.h" +#include entity_information/Marking.h" #include @@ -21,7 +21,7 @@ const std::array& Marking::GetCharacters() const { } void Marking::SetCharacters(const char* value) { - for (auto i = 0; i < characters_.size(); ++i) { + for (uint32_t i = 0; i < characters_.size(); ++i) { characters_[i] = value[i]; } } @@ -33,19 +33,19 @@ void Marking::SetByStringCharacters(const char* value) { characters_[kCharacters - 1] = '\0'; } -void Marking::Marshal(DataStream& data_stream) const { - data_stream << character_set_; +void Marking::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << character_set_; for (std::size_t idx = 0; idx < kCharacters; idx++) { - data_stream << characters_[idx]; + byte_buffer << characters_[idx]; } } -void Marking::Unmarshal(DataStream& data_stream) { - data_stream >> character_set_; +void Marking::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> character_set_; for (std::size_t idx = 0; idx < kCharacters; idx++) { - data_stream >> characters_[idx]; + byte_buffer >> characters_[idx]; } } diff --git a/src/libsersi/entity_information/Marking.h b/src/libsersi/entity_information/Marking.h index 804f85c..5669ad6 100644 --- a/src/libsersi/entity_information/Marking.h +++ b/src/libsersi/entity_information/Marking.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.15. Specifies the character set used inthe first byte, followed @@ -22,8 +22,8 @@ class Marking { Marking(); ~Marking() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetCharacterSet() const; void SetCharacterSet(uint8_t value); diff --git a/src/libsersi/entity_management/AggregateID.cpp b/src/libsersi/entity_management/AggregateID.cpp index 46a51ad..ba294c4 100644 --- a/src/libsersi/entity_management/AggregateID.cpp +++ b/src/libsersi/entity_management/AggregateID.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/AggregateID.h" +#include entity_management/AggregateID.h" namespace dis { AggregateID::AggregateID() : site_(0), application_(0), aggregate_id_(0) {} @@ -15,16 +15,16 @@ uint16_t AggregateID::GetAggregateId() const { return aggregate_id_; } void AggregateID::SetAggregateId(uint16_t value) { aggregate_id_ = value; } -void AggregateID::Marshal(DataStream& data_stream) const { - data_stream << site_; - data_stream << application_; - data_stream << aggregate_id_; +void AggregateID::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << site_; + byte_buffer << application_; + byte_buffer << aggregate_id_; } -void AggregateID::Unmarshal(DataStream& data_stream) { - data_stream >> site_; - data_stream >> application_; - data_stream >> aggregate_id_; +void AggregateID::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> site_; + byte_buffer >> application_; + byte_buffer >> aggregate_id_; } bool AggregateID::operator==(const AggregateID& rhs) const { diff --git a/src/libsersi/entity_management/AggregateID.h b/src/libsersi/entity_management/AggregateID.h index 04dd1fe..36d8371 100644 --- a/src/libsersi/entity_management/AggregateID.h +++ b/src/libsersi/entity_management/AggregateID.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.36. Each agregate in a given simulation app is given an aggregate @@ -22,8 +22,8 @@ class AggregateID { AggregateID(); ~AggregateID() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetSite() const; void SetSite(uint16_t value); diff --git a/src/libsersi/entity_management/AggregateMarking.cpp b/src/libsersi/entity_management/AggregateMarking.cpp index 75643dc..1680314 100644 --- a/src/libsersi/entity_management/AggregateMarking.cpp +++ b/src/libsersi/entity_management/AggregateMarking.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/AggregateMarking.h" +#include entity_management/AggregateMarking.h" namespace dis { AggregateMarking::AggregateMarking() : character_set_(0) { @@ -24,24 +24,24 @@ const std::array& AggregateMarking::GetCharacters() } void AggregateMarking::SetCharacters(const char* value) { - for (auto i = 0; i < characters_.size(); i++) { + for (uint32_t i = 0; i < characters_.size(); i++) { characters_[i] = value[i]; } } -void AggregateMarking::Marshal(DataStream& data_stream) const { - data_stream << character_set_; +void AggregateMarking::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << character_set_; for (char character : characters_) { - data_stream << character; + byte_buffer << character; } } -void AggregateMarking::Unmarshal(DataStream& data_stream) { - data_stream >> character_set_; +void AggregateMarking::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> character_set_; for (char& character : characters_) { - data_stream >> character; + byte_buffer >> character; } } @@ -52,7 +52,7 @@ bool AggregateMarking::operator==(const AggregateMarking& rhs) const { ivars_equal = false; } - for (auto i = 0; i < characters_.size(); ++i) { + for (uint32_t i = 0; i < characters_.size(); ++i) { if (!(characters_[i] == rhs.characters_[i])) { ivars_equal = false; } diff --git a/src/libsersi/entity_management/AggregateMarking.h b/src/libsersi/entity_management/AggregateMarking.h index 2d84a5d..eb5bb61 100644 --- a/src/libsersi/entity_management/AggregateMarking.h +++ b/src/libsersi/entity_management/AggregateMarking.h @@ -3,7 +3,7 @@ #include #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.37. Specifies the character set used inthe first byte, followed @@ -23,8 +23,8 @@ class AggregateMarking { AggregateMarking(); ~AggregateMarking() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetCharacterSet() const; void SetCharacterSet(uint8_t value); diff --git a/src/libsersi/entity_management/AggregateStatePdu.cpp b/src/libsersi/entity_management/AggregateStatePdu.cpp index 54ce947..7df0754 100644 --- a/src/libsersi/entity_management/AggregateStatePdu.cpp +++ b/src/libsersi/entity_management/AggregateStatePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/AggregateStatePdu.h" +#include entity_management/AggregateStatePdu.h" namespace dis { AggregateStatePdu::AggregateStatePdu() @@ -199,99 +199,99 @@ void AggregateStatePdu::SetVariableDatumList( variable_datum_list_ = value; } -void AggregateStatePdu::Marshal(DataStream& data_stream) const { - EntityManagementFamilyPdu::Marshal(data_stream); - aggregate_id_.Marshal(data_stream); - data_stream << force_id_; - data_stream << aggregate_state_; - aggregate_type_.Marshal(data_stream); - data_stream << formation_; - aggregate_marking_.Marshal(data_stream); - dimensions_.Marshal(data_stream); - orientation_.Marshal(data_stream); - center_of_mass_.Marshal(data_stream); - velocity_.Marshal(data_stream); - data_stream << static_cast(aggregate_id_list_.size()); - data_stream << static_cast(entity_id_list_.size()); - data_stream << static_cast(silent_aggregate_system_list_.size()); - data_stream << static_cast(silent_entity_system_list_.size()); +void AggregateStatePdu::Marshal(ByteBuffer& byte_buffer) const { + EntityManagementFamilyPdu::Marshal(byte_buffer); + aggregate_id_.Marshal(byte_buffer); + byte_buffer << force_id_; + byte_buffer << aggregate_state_; + aggregate_type_.Marshal(byte_buffer); + byte_buffer << formation_; + aggregate_marking_.Marshal(byte_buffer); + dimensions_.Marshal(byte_buffer); + orientation_.Marshal(byte_buffer); + center_of_mass_.Marshal(byte_buffer); + velocity_.Marshal(byte_buffer); + byte_buffer << static_cast(aggregate_id_list_.size()); + byte_buffer << static_cast(entity_id_list_.size()); + byte_buffer << static_cast(silent_aggregate_system_list_.size()); + byte_buffer << static_cast(silent_entity_system_list_.size()); for (auto x : aggregate_id_list_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : entity_id_list_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } - data_stream << pad2_; + byte_buffer << pad2_; for (const auto& x : silent_aggregate_system_list_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : silent_entity_system_list_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } - data_stream << static_cast(variable_datum_list_.size()); + byte_buffer << static_cast(variable_datum_list_.size()); for (const auto& x : variable_datum_list_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void AggregateStatePdu::Unmarshal(DataStream& data_stream) { - EntityManagementFamilyPdu::Unmarshal(data_stream); - aggregate_id_.Unmarshal(data_stream); - data_stream >> force_id_; - data_stream >> aggregate_state_; - aggregate_type_.Unmarshal(data_stream); - data_stream >> formation_; - aggregate_marking_.Unmarshal(data_stream); - dimensions_.Unmarshal(data_stream); - orientation_.Unmarshal(data_stream); - center_of_mass_.Unmarshal(data_stream); - velocity_.Unmarshal(data_stream); - data_stream >> number_of_dis_aggregates_; - data_stream >> number_of_dis_entities_; - data_stream >> number_of_silent_aggregate_types_; - data_stream >> number_of_silent_entity_types_; +void AggregateStatePdu::Unmarshal(ByteBuffer& byte_buffer) { + EntityManagementFamilyPdu::Unmarshal(byte_buffer); + aggregate_id_.Unmarshal(byte_buffer); + byte_buffer >> force_id_; + byte_buffer >> aggregate_state_; + aggregate_type_.Unmarshal(byte_buffer); + byte_buffer >> formation_; + aggregate_marking_.Unmarshal(byte_buffer); + dimensions_.Unmarshal(byte_buffer); + orientation_.Unmarshal(byte_buffer); + center_of_mass_.Unmarshal(byte_buffer); + velocity_.Unmarshal(byte_buffer); + byte_buffer >> number_of_dis_aggregates_; + byte_buffer >> number_of_dis_entities_; + byte_buffer >> number_of_silent_aggregate_types_; + byte_buffer >> number_of_silent_entity_types_; aggregate_id_list_.clear(); for (std::size_t idx = 0; idx < number_of_dis_aggregates_; idx++) { AggregateID x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); aggregate_id_list_.push_back(x); } entity_id_list_.clear(); for (std::size_t idx = 0; idx < number_of_dis_entities_; idx++) { EntityID x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); entity_id_list_.push_back(x); } - data_stream >> pad2_; + byte_buffer >> pad2_; silent_aggregate_system_list_.clear(); for (std::size_t idx = 0; idx < number_of_silent_aggregate_types_; idx++) { EntityType x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); silent_aggregate_system_list_.push_back(x); } silent_entity_system_list_.clear(); for (std::size_t idx = 0; idx < number_of_silent_entity_types_; idx++) { EntityType x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); silent_entity_system_list_.push_back(x); } - data_stream >> number_of_variable_datum_records_; + byte_buffer >> number_of_variable_datum_records_; variable_datum_list_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datum_list_.push_back(x); } } diff --git a/src/libsersi/entity_management/AggregateStatePdu.h b/src/libsersi/entity_management/AggregateStatePdu.h index b87588a..ac18a93 100644 --- a/src/libsersi/entity_management/AggregateStatePdu.h +++ b/src/libsersi/entity_management/AggregateStatePdu.h @@ -2,16 +2,16 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/common/Orientation.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/entity_management/AggregateID.h" -#include "libsersi/entity_management/AggregateMarking.h" -#include "libsersi/entity_management/EntityManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include common/Orientation.h" +#include common/VariableDatum.h" +#include common/Vector3Double.h" +#include common/Vector3Float.h" +#include entity_management/AggregateID.h" +#include entity_management/AggregateMarking.h" +#include entity_management/EntityManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.9.1 informationa bout aggregating entities anc communicating @@ -91,8 +91,8 @@ class AggregateStatePdu final : public EntityManagementFamilyPdu { AggregateStatePdu(); ~AggregateStatePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetAggregateId(); [[nodiscard]] const EntityID& GetAggregateId() const; diff --git a/src/libsersi/entity_management/AggregateType.cpp b/src/libsersi/entity_management/AggregateType.cpp index 535409b..67ba72e 100644 --- a/src/libsersi/entity_management/AggregateType.cpp +++ b/src/libsersi/entity_management/AggregateType.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/AggregateType.h" +#include entity_management/AggregateType.h" namespace dis { AggregateType::AggregateType() @@ -38,24 +38,24 @@ uint8_t AggregateType::GetExtra() const { return extra_; } void AggregateType::SetExtra(uint8_t value) { extra_ = value; } -void AggregateType::Marshal(DataStream& data_stream) const { - data_stream << aggregate_kind_; - data_stream << domain_; - data_stream << country_; - data_stream << category_; - data_stream << subcategory_; - data_stream << specific_; - data_stream << extra_; +void AggregateType::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << aggregate_kind_; + byte_buffer << domain_; + byte_buffer << country_; + byte_buffer << category_; + byte_buffer << subcategory_; + byte_buffer << specific_; + byte_buffer << extra_; } -void AggregateType::Unmarshal(DataStream& data_stream) { - data_stream >> aggregate_kind_; - data_stream >> domain_; - data_stream >> country_; - data_stream >> category_; - data_stream >> subcategory_; - data_stream >> specific_; - data_stream >> extra_; +void AggregateType::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> aggregate_kind_; + byte_buffer >> domain_; + byte_buffer >> country_; + byte_buffer >> category_; + byte_buffer >> subcategory_; + byte_buffer >> specific_; + byte_buffer >> extra_; } bool AggregateType::operator==(const AggregateType& rhs) const { diff --git a/src/libsersi/entity_management/AggregateType.h b/src/libsersi/entity_management/AggregateType.h index d2d2969..b6b6ef7 100644 --- a/src/libsersi/entity_management/AggregateType.h +++ b/src/libsersi/entity_management/AggregateType.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.38. Identifies the type of aggregate including kind of entity, @@ -32,8 +32,8 @@ class AggregateType { AggregateType(); ~AggregateType() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetAggregateKind() const; void SetAggregateKind(uint8_t value); diff --git a/src/libsersi/entity_management/CMakeLists.txt b/src/libsersi/entity_management/CMakeLists.txt index 52068fb..46ea56b 100644 --- a/src/libsersi/entity_management/CMakeLists.txt +++ b/src/libsersi/entity_management/CMakeLists.txt @@ -24,7 +24,7 @@ set(entity_management_hdr TransferControlRequestPdu.h ) -target_sources(sersi PRIVATE ${entity_management_src}) +target_sources(${PROJECT_NAME} PRIVATE ${entity_management_src}) install(FILES ${entity_management_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/entity_management diff --git a/src/libsersi/entity_management/EntityManagementFamilyPdu.cpp b/src/libsersi/entity_management/EntityManagementFamilyPdu.cpp index 835f540..d0818f3 100644 --- a/src/libsersi/entity_management/EntityManagementFamilyPdu.cpp +++ b/src/libsersi/entity_management/EntityManagementFamilyPdu.cpp @@ -1,14 +1,12 @@ -#include "libsersi/entity_management/EntityManagementFamilyPdu.h" +#include entity_management/EntityManagementFamilyPdu.h" namespace dis { -EntityManagementFamilyPdu::EntityManagementFamilyPdu() { SetProtocolFamily(7); } - -void EntityManagementFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); // Marshal information in superclass first +void EntityManagementFamilyPdu::Marshal(ByteBuffer& byte_buffer) const { + Pdu::Marshal(byte_buffer); // Marshal information in superclass first } -void EntityManagementFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); // unmarshal information in superclass first +void EntityManagementFamilyPdu::Unmarshal(ByteBuffer& byte_buffer) { + Pdu::Unmarshal(byte_buffer); // unmarshal information in superclass first } bool EntityManagementFamilyPdu::operator==( diff --git a/src/libsersi/entity_management/EntityManagementFamilyPdu.h b/src/libsersi/entity_management/EntityManagementFamilyPdu.h index cdf4d41..a31ce52 100644 --- a/src/libsersi/entity_management/EntityManagementFamilyPdu.h +++ b/src/libsersi/entity_management/EntityManagementFamilyPdu.h @@ -2,8 +2,8 @@ #include -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.9. Common superclass for EntityManagment PDUs, including @@ -11,11 +11,11 @@ namespace dis { class EntityManagementFamilyPdu : public Pdu { public: - EntityManagementFamilyPdu(); + EntityManagementFamilyPdu() = default; ~EntityManagementFamilyPdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; [[nodiscard]] std::size_t GetMarshalledSize() const override; diff --git a/src/libsersi/entity_management/IsGroupOfPdu.cpp b/src/libsersi/entity_management/IsGroupOfPdu.cpp index 0971ffe..6c19143 100644 --- a/src/libsersi/entity_management/IsGroupOfPdu.cpp +++ b/src/libsersi/entity_management/IsGroupOfPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/IsGroupOfPdu.h" +#include entity_management/IsGroupOfPdu.h" namespace dis { IsGroupOfPdu::IsGroupOfPdu() @@ -60,33 +60,33 @@ void IsGroupOfPdu::SetGroupedEntityDescriptions( grouped_entity_descriptions_ = value; } -void IsGroupOfPdu::Marshal(DataStream& data_stream) const { - EntityManagementFamilyPdu::Marshal(data_stream); - group_entity_id_.Marshal(data_stream); - data_stream << grouped_entity_category_; - data_stream << static_cast(grouped_entity_descriptions_.size()); - data_stream << pad2_; - data_stream << latitude_; - data_stream << longitude_; +void IsGroupOfPdu::Marshal(ByteBuffer& byte_buffer) const { + EntityManagementFamilyPdu::Marshal(byte_buffer); + group_entity_id_.Marshal(byte_buffer); + byte_buffer << grouped_entity_category_; + byte_buffer << static_cast(grouped_entity_descriptions_.size()); + byte_buffer << pad2_; + byte_buffer << latitude_; + byte_buffer << longitude_; for (const auto& x : grouped_entity_descriptions_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void IsGroupOfPdu::Unmarshal(DataStream& data_stream) { - EntityManagementFamilyPdu::Unmarshal(data_stream); - group_entity_id_.Unmarshal(data_stream); - data_stream >> grouped_entity_category_; - data_stream >> number_of_grouped_entities_; - data_stream >> pad2_; - data_stream >> latitude_; - data_stream >> longitude_; +void IsGroupOfPdu::Unmarshal(ByteBuffer& byte_buffer) { + EntityManagementFamilyPdu::Unmarshal(byte_buffer); + group_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> grouped_entity_category_; + byte_buffer >> number_of_grouped_entities_; + byte_buffer >> pad2_; + byte_buffer >> latitude_; + byte_buffer >> longitude_; grouped_entity_descriptions_.clear(); for (std::size_t idx = 0; idx < number_of_grouped_entities_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); grouped_entity_descriptions_.push_back(x); } } diff --git a/src/libsersi/entity_management/IsGroupOfPdu.h b/src/libsersi/entity_management/IsGroupOfPdu.h index d588aae..06760e3 100644 --- a/src/libsersi/entity_management/IsGroupOfPdu.h +++ b/src/libsersi/entity_management/IsGroupOfPdu.h @@ -3,10 +3,10 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/entity_management/EntityManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/VariableDatum.h" +#include entity_management/EntityManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.9.2 Information about a particular group of entities grouped @@ -43,8 +43,8 @@ class IsGroupOfPdu final : public EntityManagementFamilyPdu { IsGroupOfPdu(); ~IsGroupOfPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetGroupEntityId(); [[nodiscard]] const EntityID& GetGroupEntityId() const; diff --git a/src/libsersi/entity_management/IsPartOfPdu.cpp b/src/libsersi/entity_management/IsPartOfPdu.cpp index 624e0ec..a0bc9d1 100644 --- a/src/libsersi/entity_management/IsPartOfPdu.cpp +++ b/src/libsersi/entity_management/IsPartOfPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/IsPartOfPdu.h" +#include entity_management/IsPartOfPdu.h" #include @@ -68,24 +68,24 @@ void IsPartOfPdu::SetPartEntityType(const EntityType& value) { part_entity_type_ = value; } -void IsPartOfPdu::Marshal(DataStream& data_stream) const { - EntityManagementFamilyPdu::Marshal(data_stream); - originating_entity_id_.Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); - relationship_.Marshal(data_stream); - part_location_.Marshal(data_stream); - named_location_id_.Marshal(data_stream); - part_entity_type_.Marshal(data_stream); -} - -void IsPartOfPdu::Unmarshal(DataStream& data_stream) { - EntityManagementFamilyPdu::Unmarshal(data_stream); - originating_entity_id_.Unmarshal(data_stream); - receiving_entity_id_.Unmarshal(data_stream); - relationship_.Unmarshal(data_stream); - part_location_.Unmarshal(data_stream); - named_location_id_.Unmarshal(data_stream); - part_entity_type_.Unmarshal(data_stream); +void IsPartOfPdu::Marshal(ByteBuffer& byte_buffer) const { + EntityManagementFamilyPdu::Marshal(byte_buffer); + originating_entity_id_.Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); + relationship_.Marshal(byte_buffer); + part_location_.Marshal(byte_buffer); + named_location_id_.Marshal(byte_buffer); + part_entity_type_.Marshal(byte_buffer); +} + +void IsPartOfPdu::Unmarshal(ByteBuffer& byte_buffer) { + EntityManagementFamilyPdu::Unmarshal(byte_buffer); + originating_entity_id_.Unmarshal(byte_buffer); + receiving_entity_id_.Unmarshal(byte_buffer); + relationship_.Unmarshal(byte_buffer); + part_location_.Unmarshal(byte_buffer); + named_location_id_.Unmarshal(byte_buffer); + part_entity_type_.Unmarshal(byte_buffer); } bool IsPartOfPdu::operator==(const IsPartOfPdu& rhs) const { diff --git a/src/libsersi/entity_management/IsPartOfPdu.h b/src/libsersi/entity_management/IsPartOfPdu.h index 4f2ba54..d55eb6d 100644 --- a/src/libsersi/entity_management/IsPartOfPdu.h +++ b/src/libsersi/entity_management/IsPartOfPdu.h @@ -2,13 +2,13 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/entity_management/EntityManagementFamilyPdu.h" -#include "libsersi/entity_management/NamedLocation.h" -#include "libsersi/entity_management/Relationship.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include common/Vector3Float.h" +#include entity_management/EntityManagementFamilyPdu.h" +#include entity_management/NamedLocation.h" +#include entity_management/Relationship.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.9.4 The joining of two or more simulation entities is @@ -39,8 +39,8 @@ class IsPartOfPdu final : public EntityManagementFamilyPdu { IsPartOfPdu(); ~IsPartOfPdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetOriginatingEntityId(); [[nodiscard]] const EntityID& GetOriginatingEntityId() const; diff --git a/src/libsersi/entity_management/NamedLocation.cpp b/src/libsersi/entity_management/NamedLocation.cpp index 8644941..9c39d3e 100644 --- a/src/libsersi/entity_management/NamedLocation.cpp +++ b/src/libsersi/entity_management/NamedLocation.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/NamedLocation.h" +#include entity_management/NamedLocation.h" namespace dis { NamedLocation::NamedLocation() : station_name_(0), station_number_(0) {} @@ -13,14 +13,14 @@ void NamedLocation::SetStationNumber(uint16_t value) { station_number_ = value; } -void NamedLocation::Marshal(DataStream& data_stream) const { - data_stream << station_name_; - data_stream << station_number_; +void NamedLocation::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << station_name_; + byte_buffer << station_number_; } -void NamedLocation::Unmarshal(DataStream& data_stream) { - data_stream >> station_name_; - data_stream >> station_number_; +void NamedLocation::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> station_name_; + byte_buffer >> station_number_; } bool NamedLocation::operator==(const NamedLocation& rhs) const { diff --git a/src/libsersi/entity_management/NamedLocation.h b/src/libsersi/entity_management/NamedLocation.h index 3761364..f507285 100644 --- a/src/libsersi/entity_management/NamedLocation.h +++ b/src/libsersi/entity_management/NamedLocation.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // discrete ostional relationsihip @@ -19,8 +19,8 @@ class NamedLocation { NamedLocation(); ~NamedLocation() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetStationName() const; void SetStationName(uint16_t value); diff --git a/src/libsersi/entity_management/Relationship.cpp b/src/libsersi/entity_management/Relationship.cpp index 94a59dc..5166db9 100644 --- a/src/libsersi/entity_management/Relationship.cpp +++ b/src/libsersi/entity_management/Relationship.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/Relationship.h" +#include entity_management/Relationship.h" #include @@ -13,14 +13,14 @@ uint16_t Relationship::GetPosition() const { return position_; } void Relationship::SetPosition(uint16_t value) { position_ = value; } -void Relationship::Marshal(DataStream& data_stream) const { - data_stream << nature_; - data_stream << position_; +void Relationship::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << nature_; + byte_buffer << position_; } -void Relationship::Unmarshal(DataStream& data_stream) { - data_stream >> nature_; - data_stream >> position_; +void Relationship::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> nature_; + byte_buffer >> position_; } bool Relationship::operator==(const Relationship& rhs) const { diff --git a/src/libsersi/entity_management/Relationship.h b/src/libsersi/entity_management/Relationship.h index 39f7417..2cb0c0a 100644 --- a/src/libsersi/entity_management/Relationship.h +++ b/src/libsersi/entity_management/Relationship.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.56. Purpose for joinging two entities @@ -19,8 +19,8 @@ class Relationship { Relationship(); ~Relationship() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetNature() const; void SetNature(uint16_t value); diff --git a/src/libsersi/entity_management/TransferControlRequestPdu.cpp b/src/libsersi/entity_management/TransferControlRequestPdu.cpp index 01bb9f1..d502d10 100644 --- a/src/libsersi/entity_management/TransferControlRequestPdu.cpp +++ b/src/libsersi/entity_management/TransferControlRequestPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/entity_management/TransferControlRequestPdu.h" +#include entity_management/TransferControlRequestPdu.h" namespace dis { TransferControlRequestPdu::TransferControlRequestPdu() @@ -88,35 +88,35 @@ void TransferControlRequestPdu::SetRecordSets( record_sets_ = value; } -void TransferControlRequestPdu::Marshal(DataStream& data_stream) const { - EntityManagementFamilyPdu::Marshal(data_stream); - originating_entity_id_.Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); - data_stream << request_id_; - data_stream << required_reliability_service_; - data_stream << transfer_type_; - transfer_entity_id_.Marshal(data_stream); - data_stream << static_cast(record_sets_.size()); +void TransferControlRequestPdu::Marshal(ByteBuffer& byte_buffer) const { + EntityManagementFamilyPdu::Marshal(byte_buffer); + originating_entity_id_.Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << required_reliability_service_; + byte_buffer << transfer_type_; + transfer_entity_id_.Marshal(byte_buffer); + byte_buffer << static_cast(record_sets_.size()); for (auto x : record_sets_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void TransferControlRequestPdu::Unmarshal(DataStream& data_stream) { - EntityManagementFamilyPdu::Unmarshal(data_stream); - originating_entity_id_.Unmarshal(data_stream); - receiving_entity_id_.Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> required_reliability_service_; - data_stream >> transfer_type_; - transfer_entity_id_.Unmarshal(data_stream); - data_stream >> number_of_record_sets_; +void TransferControlRequestPdu::Unmarshal(ByteBuffer& byte_buffer) { + EntityManagementFamilyPdu::Unmarshal(byte_buffer); + originating_entity_id_.Unmarshal(byte_buffer); + receiving_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> required_reliability_service_; + byte_buffer >> transfer_type_; + transfer_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> number_of_record_sets_; record_sets_.clear(); for (std::size_t idx = 0; idx < number_of_record_sets_; idx++) { RecordSet x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); record_sets_.push_back(x); } } diff --git a/src/libsersi/entity_management/TransferControlRequestPdu.h b/src/libsersi/entity_management/TransferControlRequestPdu.h index eda05b8..5a1cb4b 100644 --- a/src/libsersi/entity_management/TransferControlRequestPdu.h +++ b/src/libsersi/entity_management/TransferControlRequestPdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/RecordSet.h" -#include "libsersi/entity_management/EntityManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/RecordSet.h" +#include entity_management/EntityManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.9.3 Information initiating the dyanic allocation and control of @@ -42,8 +42,8 @@ class TransferControlRequestPdu final : public EntityManagementFamilyPdu { TransferControlRequestPdu(); ~TransferControlRequestPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetOriginatingEntityId(); [[nodiscard]] const EntityID& GetOriginatingEntityId() const; diff --git a/src/libsersi/logistics/CMakeLists.txt b/src/libsersi/logistics/CMakeLists.txt index 25d4f9c..2de74ce 100644 --- a/src/libsersi/logistics/CMakeLists.txt +++ b/src/libsersi/logistics/CMakeLists.txt @@ -20,7 +20,7 @@ set(logistics_src SupplyQuantity.cpp ) -target_sources(sersi PRIVATE ${logistics_src}) +target_sources(${PROJECT_NAME} PRIVATE ${logistics_src}) install(FILES ${logistics_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/logistics diff --git a/src/libsersi/logistics/LogisticsFamilyPdu.cpp b/src/libsersi/logistics/LogisticsFamilyPdu.cpp index 0fc0ab6..5416ba4 100644 --- a/src/libsersi/logistics/LogisticsFamilyPdu.cpp +++ b/src/libsersi/logistics/LogisticsFamilyPdu.cpp @@ -1,14 +1,12 @@ -#include "libsersi/logistics/LogisticsFamilyPdu.h" +#include logistics/LogisticsFamilyPdu.h" namespace dis { -LogisticsFamilyPdu::LogisticsFamilyPdu() { SetProtocolFamily(3); } - -void LogisticsFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); +void LogisticsFamilyPdu::Marshal(ByteBuffer& byte_buffer) const { + Pdu::Marshal(byte_buffer); } -void LogisticsFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); +void LogisticsFamilyPdu::Unmarshal(ByteBuffer& byte_buffer) { + Pdu::Unmarshal(byte_buffer); } bool LogisticsFamilyPdu::operator==(const LogisticsFamilyPdu& rhs) const { diff --git a/src/libsersi/logistics/LogisticsFamilyPdu.h b/src/libsersi/logistics/LogisticsFamilyPdu.h index 8b62ef5..3668c9a 100644 --- a/src/libsersi/logistics/LogisticsFamilyPdu.h +++ b/src/libsersi/logistics/LogisticsFamilyPdu.h @@ -2,19 +2,19 @@ #include -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.5. Abstract superclass for logistics PDUs. COMPLETE class LogisticsFamilyPdu : public Pdu { public: - LogisticsFamilyPdu(); + LogisticsFamilyPdu() = default; ~LogisticsFamilyPdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; [[nodiscard]] std::size_t GetMarshalledSize() const override; diff --git a/src/libsersi/logistics/RepairCompletePdu.cpp b/src/libsersi/logistics/RepairCompletePdu.cpp index b9db18d..59f1b64 100644 --- a/src/libsersi/logistics/RepairCompletePdu.cpp +++ b/src/libsersi/logistics/RepairCompletePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/logistics/RepairCompletePdu.h" +#include logistics/RepairCompletePdu.h" namespace dis { RepairCompletePdu::RepairCompletePdu() : repair_(0), padding2_(0) { @@ -39,21 +39,21 @@ int16_t RepairCompletePdu::GetPadding2() const { return padding2_; } void RepairCompletePdu::SetPadding2(int16_t value) { padding2_ = value; } -void RepairCompletePdu::Marshal(DataStream& data_stream) const { - LogisticsFamilyPdu::Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); - repairing_entity_id_.Marshal(data_stream); - data_stream << repair_; - data_stream << padding2_; +void RepairCompletePdu::Marshal(ByteBuffer& byte_buffer) const { + LogisticsFamilyPdu::Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); + repairing_entity_id_.Marshal(byte_buffer); + byte_buffer << repair_; + byte_buffer << padding2_; } -void RepairCompletePdu::Unmarshal(DataStream& data_stream) { +void RepairCompletePdu::Unmarshal(ByteBuffer& byte_buffer) { LogisticsFamilyPdu::Unmarshal( - data_stream); // unmarshal information in superclass first - receiving_entity_id_.Unmarshal(data_stream); - repairing_entity_id_.Unmarshal(data_stream); - data_stream >> repair_; - data_stream >> padding2_; + byte_buffer); // unmarshal information in superclass first + receiving_entity_id_.Unmarshal(byte_buffer); + repairing_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> repair_; + byte_buffer >> padding2_; } bool RepairCompletePdu::operator==(const RepairCompletePdu& rhs) const { diff --git a/src/libsersi/logistics/RepairCompletePdu.h b/src/libsersi/logistics/RepairCompletePdu.h index ed4fe60..35d5d08 100644 --- a/src/libsersi/logistics/RepairCompletePdu.h +++ b/src/libsersi/logistics/RepairCompletePdu.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/logistics/LogisticsFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include logistics/LogisticsFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.5.5. Repair is complete. COMPLETE @@ -27,8 +27,8 @@ class RepairCompletePdu final : public LogisticsFamilyPdu { RepairCompletePdu(); ~RepairCompletePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetReceivingEntityId(); [[nodiscard]] const EntityID& GetReceivingEntityId() const; diff --git a/src/libsersi/logistics/RepairResponsePdu.cpp b/src/libsersi/logistics/RepairResponsePdu.cpp index 73a9e5a..92c2955 100644 --- a/src/libsersi/logistics/RepairResponsePdu.cpp +++ b/src/libsersi/logistics/RepairResponsePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/logistics/RepairResponsePdu.h" +#include logistics/RepairResponsePdu.h" namespace dis { RepairResponsePdu::RepairResponsePdu() @@ -46,22 +46,22 @@ char RepairResponsePdu::GetPadding2() const { return padding2_; } void RepairResponsePdu::SetPadding2(char value) { padding2_ = value; } -void RepairResponsePdu::Marshal(DataStream& data_stream) const { - LogisticsFamilyPdu::Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); - repairing_entity_id_.Marshal(data_stream); - data_stream << repair_result_; - data_stream << padding1_; - data_stream << padding2_; +void RepairResponsePdu::Marshal(ByteBuffer& byte_buffer) const { + LogisticsFamilyPdu::Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); + repairing_entity_id_.Marshal(byte_buffer); + byte_buffer << repair_result_; + byte_buffer << padding1_; + byte_buffer << padding2_; } -void RepairResponsePdu::Unmarshal(DataStream& data_stream) { - LogisticsFamilyPdu::Unmarshal(data_stream); - receiving_entity_id_.Unmarshal(data_stream); - repairing_entity_id_.Unmarshal(data_stream); - data_stream >> repair_result_; - data_stream >> padding1_; - data_stream >> padding2_; +void RepairResponsePdu::Unmarshal(ByteBuffer& byte_buffer) { + LogisticsFamilyPdu::Unmarshal(byte_buffer); + receiving_entity_id_.Unmarshal(byte_buffer); + repairing_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> repair_result_; + byte_buffer >> padding1_; + byte_buffer >> padding2_; } bool RepairResponsePdu::operator==(const RepairResponsePdu& rhs) const { diff --git a/src/libsersi/logistics/RepairResponsePdu.h b/src/libsersi/logistics/RepairResponsePdu.h index 1b5fb13..e89a6ab 100644 --- a/src/libsersi/logistics/RepairResponsePdu.h +++ b/src/libsersi/logistics/RepairResponsePdu.h @@ -1,8 +1,8 @@ #pragma once -#include "libsersi/common/EntityID.h" -#include "libsersi/logistics/LogisticsFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include logistics/LogisticsFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.5.6. Sent after repair complete PDU. COMPLETE @@ -28,8 +28,8 @@ class RepairResponsePdu final : public LogisticsFamilyPdu { RepairResponsePdu(); ~RepairResponsePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetReceivingEntityId(); [[nodiscard]] const EntityID& GetReceivingEntityId() const; diff --git a/src/libsersi/logistics/ResupplyCancelPdu.cpp b/src/libsersi/logistics/ResupplyCancelPdu.cpp index 0ee8b99..742fb18 100644 --- a/src/libsersi/logistics/ResupplyCancelPdu.cpp +++ b/src/libsersi/logistics/ResupplyCancelPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/logistics/ResupplyCancelPdu.h" +#include logistics/ResupplyCancelPdu.h" namespace dis { ResupplyCancelPdu::ResupplyCancelPdu() { SetPduType(8); } @@ -29,16 +29,16 @@ void ResupplyCancelPdu::SetSupplyingEntityId(const EntityID& value) { supplying_entity_id_ = value; } -void ResupplyCancelPdu::Marshal(DataStream& data_stream) const { - LogisticsFamilyPdu::Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); - supplying_entity_id_.Marshal(data_stream); +void ResupplyCancelPdu::Marshal(ByteBuffer& byte_buffer) const { + LogisticsFamilyPdu::Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); + supplying_entity_id_.Marshal(byte_buffer); } -void ResupplyCancelPdu::Unmarshal(DataStream& data_stream) { - LogisticsFamilyPdu::Unmarshal(data_stream); - receiving_entity_id_.Unmarshal(data_stream); - supplying_entity_id_.Unmarshal(data_stream); +void ResupplyCancelPdu::Unmarshal(ByteBuffer& byte_buffer) { + LogisticsFamilyPdu::Unmarshal(byte_buffer); + receiving_entity_id_.Unmarshal(byte_buffer); + supplying_entity_id_.Unmarshal(byte_buffer); } bool ResupplyCancelPdu::operator==(const ResupplyCancelPdu& rhs) const { diff --git a/src/libsersi/logistics/ResupplyCancelPdu.h b/src/libsersi/logistics/ResupplyCancelPdu.h index 01d0a02..53d073c 100644 --- a/src/libsersi/logistics/ResupplyCancelPdu.h +++ b/src/libsersi/logistics/ResupplyCancelPdu.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/logistics/LogisticsFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include logistics/LogisticsFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.5.4. Cancel of resupply by either the receiving or supplying @@ -22,8 +22,8 @@ class ResupplyCancelPdu final : public LogisticsFamilyPdu { ResupplyCancelPdu(); ~ResupplyCancelPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetReceivingEntityId(); [[nodiscard]] const EntityID& GetReceivingEntityId() const; diff --git a/src/libsersi/logistics/ResupplyOfferPdu.cpp b/src/libsersi/logistics/ResupplyOfferPdu.cpp index 2b66c4a..52dcf03 100644 --- a/src/libsersi/logistics/ResupplyOfferPdu.cpp +++ b/src/libsersi/logistics/ResupplyOfferPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/logistics/ResupplyOfferPdu.h" +#include logistics/ResupplyOfferPdu.h" namespace dis { ResupplyOfferPdu::ResupplyOfferPdu() @@ -56,31 +56,31 @@ void ResupplyOfferPdu::SetSupplies(const std::vector& value) { supplies_ = value; } -void ResupplyOfferPdu::Marshal(DataStream& data_stream) const { - LogisticsFamilyPdu::Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); - supplying_entity_id_.Marshal(data_stream); - data_stream << static_cast(supplies_.size()); - data_stream << padding1_; - data_stream << padding2_; +void ResupplyOfferPdu::Marshal(ByteBuffer& byte_buffer) const { + LogisticsFamilyPdu::Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); + supplying_entity_id_.Marshal(byte_buffer); + byte_buffer << static_cast(supplies_.size()); + byte_buffer << padding1_; + byte_buffer << padding2_; for (const auto& x : supplies_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ResupplyOfferPdu::Unmarshal(DataStream& data_stream) { - LogisticsFamilyPdu::Unmarshal(data_stream); - receiving_entity_id_.Unmarshal(data_stream); - supplying_entity_id_.Unmarshal(data_stream); - data_stream >> number_of_supply_types_; - data_stream >> padding1_; - data_stream >> padding2_; +void ResupplyOfferPdu::Unmarshal(ByteBuffer& byte_buffer) { + LogisticsFamilyPdu::Unmarshal(byte_buffer); + receiving_entity_id_.Unmarshal(byte_buffer); + supplying_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> number_of_supply_types_; + byte_buffer >> padding1_; + byte_buffer >> padding2_; supplies_.clear(); for (std::size_t idx = 0; idx < number_of_supply_types_; idx++) { SupplyQuantity x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); supplies_.push_back(x); } } diff --git a/src/libsersi/logistics/ResupplyOfferPdu.h b/src/libsersi/logistics/ResupplyOfferPdu.h index 22a22c7..f54c301 100644 --- a/src/libsersi/logistics/ResupplyOfferPdu.h +++ b/src/libsersi/logistics/ResupplyOfferPdu.h @@ -3,10 +3,10 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/logistics/LogisticsFamilyPdu.h" -#include "libsersi/logistics/SupplyQuantity.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include logistics/LogisticsFamilyPdu.h" +#include logistics/SupplyQuantity.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.5.2. Information about a request for supplies. COMPLETE @@ -34,8 +34,8 @@ class ResupplyOfferPdu final : public LogisticsFamilyPdu { ResupplyOfferPdu(); ~ResupplyOfferPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetReceivingEntityId(); [[nodiscard]] const EntityID& GetReceivingEntityId() const; diff --git a/src/libsersi/logistics/ResupplyReceivedPdu.cpp b/src/libsersi/logistics/ResupplyReceivedPdu.cpp index c461498..74107d2 100644 --- a/src/libsersi/logistics/ResupplyReceivedPdu.cpp +++ b/src/libsersi/logistics/ResupplyReceivedPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/logistics/ResupplyReceivedPdu.h" +#include logistics/ResupplyReceivedPdu.h" #include @@ -59,31 +59,31 @@ void ResupplyReceivedPdu::SetSupplies( supplies_ = value; } -void ResupplyReceivedPdu::Marshal(DataStream& data_stream) const { - LogisticsFamilyPdu::Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); - supplying_entity_id_.Marshal(data_stream); - data_stream << static_cast(supplies_.size()); - data_stream << padding1_; - data_stream << padding2_; +void ResupplyReceivedPdu::Marshal(ByteBuffer& byte_buffer) const { + LogisticsFamilyPdu::Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); + supplying_entity_id_.Marshal(byte_buffer); + byte_buffer << static_cast(supplies_.size()); + byte_buffer << padding1_; + byte_buffer << padding2_; for (const auto& x : supplies_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ResupplyReceivedPdu::Unmarshal(DataStream& data_stream) { - LogisticsFamilyPdu::Unmarshal(data_stream); - receiving_entity_id_.Unmarshal(data_stream); - supplying_entity_id_.Unmarshal(data_stream); - data_stream >> number_of_supply_types_; - data_stream >> padding1_; - data_stream >> padding2_; +void ResupplyReceivedPdu::Unmarshal(ByteBuffer& byte_buffer) { + LogisticsFamilyPdu::Unmarshal(byte_buffer); + receiving_entity_id_.Unmarshal(byte_buffer); + supplying_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> number_of_supply_types_; + byte_buffer >> padding1_; + byte_buffer >> padding2_; supplies_.clear(); for (std::size_t idx = 0; idx < number_of_supply_types_; idx++) { SupplyQuantity x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); supplies_.push_back(x); } } diff --git a/src/libsersi/logistics/ResupplyReceivedPdu.h b/src/libsersi/logistics/ResupplyReceivedPdu.h index dc876ad..35d7bd3 100644 --- a/src/libsersi/logistics/ResupplyReceivedPdu.h +++ b/src/libsersi/logistics/ResupplyReceivedPdu.h @@ -3,10 +3,10 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/logistics/LogisticsFamilyPdu.h" -#include "libsersi/logistics/SupplyQuantity.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include logistics/LogisticsFamilyPdu.h" +#include logistics/SupplyQuantity.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.5.3. Receipt of supplies is communiated. COMPLETE @@ -34,8 +34,8 @@ class ResupplyReceivedPdu final : public LogisticsFamilyPdu { ResupplyReceivedPdu(); ~ResupplyReceivedPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetReceivingEntityId(); [[nodiscard]] const EntityID& GetReceivingEntityId() const; diff --git a/src/libsersi/logistics/ServiceRequestPdu.cpp b/src/libsersi/logistics/ServiceRequestPdu.cpp index 20bf4bb..0a879d6 100644 --- a/src/libsersi/logistics/ServiceRequestPdu.cpp +++ b/src/libsersi/logistics/ServiceRequestPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/logistics/ServiceRequestPdu.h" +#include logistics/ServiceRequestPdu.h" namespace dis { ServiceRequestPdu::ServiceRequestPdu() @@ -66,31 +66,31 @@ void ServiceRequestPdu::SetSupplies(const std::vector& value) { supplies_ = value; } -void ServiceRequestPdu::Marshal(DataStream& data_stream) const { - LogisticsFamilyPdu::Marshal(data_stream); - requesting_entity_id_.Marshal(data_stream); - servicing_entity_id_.Marshal(data_stream); - data_stream << service_type_requested_; - data_stream << static_cast(supplies_.size()); - data_stream << service_request_padding_; +void ServiceRequestPdu::Marshal(ByteBuffer& byte_buffer) const { + LogisticsFamilyPdu::Marshal(byte_buffer); + requesting_entity_id_.Marshal(byte_buffer); + servicing_entity_id_.Marshal(byte_buffer); + byte_buffer << service_type_requested_; + byte_buffer << static_cast(supplies_.size()); + byte_buffer << service_request_padding_; for (const auto& x : supplies_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ServiceRequestPdu::Unmarshal(DataStream& data_stream) { - LogisticsFamilyPdu::Unmarshal(data_stream); - requesting_entity_id_.Unmarshal(data_stream); - servicing_entity_id_.Unmarshal(data_stream); - data_stream >> service_type_requested_; - data_stream >> number_of_supply_types_; - data_stream >> service_request_padding_; +void ServiceRequestPdu::Unmarshal(ByteBuffer& byte_buffer) { + LogisticsFamilyPdu::Unmarshal(byte_buffer); + requesting_entity_id_.Unmarshal(byte_buffer); + servicing_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> service_type_requested_; + byte_buffer >> number_of_supply_types_; + byte_buffer >> service_request_padding_; supplies_.clear(); for (std::size_t idx = 0; idx < number_of_supply_types_; idx++) { SupplyQuantity x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); supplies_.push_back(x); } } diff --git a/src/libsersi/logistics/ServiceRequestPdu.h b/src/libsersi/logistics/ServiceRequestPdu.h index 21e2ed4..fc50664 100644 --- a/src/libsersi/logistics/ServiceRequestPdu.h +++ b/src/libsersi/logistics/ServiceRequestPdu.h @@ -3,10 +3,10 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/logistics/LogisticsFamilyPdu.h" -#include "libsersi/logistics/SupplyQuantity.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include logistics/LogisticsFamilyPdu.h" +#include logistics/SupplyQuantity.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.5.1. Information about a request for supplies. COMPLETE @@ -34,8 +34,8 @@ class ServiceRequestPdu final : public LogisticsFamilyPdu { ServiceRequestPdu(); ~ServiceRequestPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetRequestingEntityId(); [[nodiscard]] const EntityID& GetRequestingEntityId() const; diff --git a/src/libsersi/logistics/SupplyQuantity.cpp b/src/libsersi/logistics/SupplyQuantity.cpp index 0a8696e..49427a4 100644 --- a/src/libsersi/logistics/SupplyQuantity.cpp +++ b/src/libsersi/logistics/SupplyQuantity.cpp @@ -1,4 +1,4 @@ -#include "libsersi/logistics/SupplyQuantity.h" +#include logistics/SupplyQuantity.h" namespace dis { SupplyQuantity::SupplyQuantity() : quantity_(0) {} @@ -17,14 +17,14 @@ uint8_t SupplyQuantity::GetQuantity() const { return quantity_; } void SupplyQuantity::SetQuantity(uint8_t value) { quantity_ = value; } -void SupplyQuantity::Marshal(DataStream& data_stream) const { - supply_type_.Marshal(data_stream); - data_stream << quantity_; +void SupplyQuantity::Marshal(ByteBuffer& byte_buffer) const { + supply_type_.Marshal(byte_buffer); + byte_buffer << quantity_; } -void SupplyQuantity::Unmarshal(DataStream& data_stream) { - supply_type_.Unmarshal(data_stream); - data_stream >> quantity_; +void SupplyQuantity::Unmarshal(ByteBuffer& byte_buffer) { + supply_type_.Unmarshal(byte_buffer); + byte_buffer >> quantity_; } bool SupplyQuantity::operator==(const SupplyQuantity& rhs) const { diff --git a/src/libsersi/logistics/SupplyQuantity.h b/src/libsersi/logistics/SupplyQuantity.h index f16114f..72ea8f7 100644 --- a/src/libsersi/logistics/SupplyQuantity.h +++ b/src/libsersi/logistics/SupplyQuantity.h @@ -1,7 +1,7 @@ #pragma once -#include "libsersi/common/EntityType.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityType.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.30. A supply, and the amount of that supply. Similar to an entity @@ -19,8 +19,8 @@ class SupplyQuantity { SupplyQuantity(); ~SupplyQuantity(); - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); EntityType& GetSupplyType(); [[nodiscard]] const EntityType& GetSupplyType() const; diff --git a/src/libsersi/minefield/CMakeLists.txt b/src/libsersi/minefield/CMakeLists.txt index e015fc2..1c5e917 100644 --- a/src/libsersi/minefield/CMakeLists.txt +++ b/src/libsersi/minefield/CMakeLists.txt @@ -16,7 +16,7 @@ set(minefield_hdr Point.h ) -target_sources(sersi PRIVATE ${minefield_src}) +target_sources(${PROJECT_NAME} PRIVATE ${minefield_src}) install(FILES ${minefield_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/minefield diff --git a/src/libsersi/minefield/MinefieldDataPdu.cpp b/src/libsersi/minefield/MinefieldDataPdu.cpp index 7ab544b..3a5d9ea 100644 --- a/src/libsersi/minefield/MinefieldDataPdu.cpp +++ b/src/libsersi/minefield/MinefieldDataPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/minefield/MinefieldDataPdu.h" +#include minefield/MinefieldDataPdu.h" namespace dis { MinefieldDataPdu::MinefieldDataPdu() @@ -119,57 +119,57 @@ void MinefieldDataPdu::SetMineLocation(const std::vector& value) { mine_location_ = value; } -void MinefieldDataPdu::Marshal(DataStream& data_stream) const { - MinefieldFamilyPdu::Marshal(data_stream); - minefield_id_.Marshal(data_stream); - requesting_entity_id_.Marshal(data_stream); - data_stream << minefield_sequence_number_; - data_stream << request_id_; - data_stream << pdu_sequence_number_; - data_stream << number_of_pdus_; - data_stream << static_cast(mine_location_.size()); - data_stream << static_cast(sensor_types_.size()); - data_stream << pad2_; - data_stream << data_filter_; - mine_type_.Marshal(data_stream); +void MinefieldDataPdu::Marshal(ByteBuffer& byte_buffer) const { + MinefieldFamilyPdu::Marshal(byte_buffer); + minefield_id_.Marshal(byte_buffer); + requesting_entity_id_.Marshal(byte_buffer); + byte_buffer << minefield_sequence_number_; + byte_buffer << request_id_; + byte_buffer << pdu_sequence_number_; + byte_buffer << number_of_pdus_; + byte_buffer << static_cast(mine_location_.size()); + byte_buffer << static_cast(sensor_types_.size()); + byte_buffer << pad2_; + byte_buffer << data_filter_; + mine_type_.Marshal(byte_buffer); for (unsigned short x : sensor_types_) { - data_stream << x; + byte_buffer << x; } - data_stream << pad3_; + byte_buffer << pad3_; for (auto x : mine_location_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void MinefieldDataPdu::Unmarshal(DataStream& data_stream) { - MinefieldFamilyPdu::Unmarshal(data_stream); - minefield_id_.Unmarshal(data_stream); - requesting_entity_id_.Unmarshal(data_stream); - data_stream >> minefield_sequence_number_; - data_stream >> request_id_; - data_stream >> pdu_sequence_number_; - data_stream >> number_of_pdus_; - data_stream >> number_of_mines_in_this_pdu_; - data_stream >> number_of_sensor_types_; - data_stream >> pad2_; - data_stream >> data_filter_; - mine_type_.Unmarshal(data_stream); +void MinefieldDataPdu::Unmarshal(ByteBuffer& byte_buffer) { + MinefieldFamilyPdu::Unmarshal(byte_buffer); + minefield_id_.Unmarshal(byte_buffer); + requesting_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> minefield_sequence_number_; + byte_buffer >> request_id_; + byte_buffer >> pdu_sequence_number_; + byte_buffer >> number_of_pdus_; + byte_buffer >> number_of_mines_in_this_pdu_; + byte_buffer >> number_of_sensor_types_; + byte_buffer >> pad2_; + byte_buffer >> data_filter_; + mine_type_.Unmarshal(byte_buffer); sensor_types_.clear(); for (std::size_t idx = 0; idx < number_of_sensor_types_; idx++) { uint16_t x; - data_stream >> x; + byte_buffer >> x; sensor_types_.push_back(x); } - data_stream >> pad3_; + byte_buffer >> pad3_; mine_location_.clear(); for (std::size_t idx = 0; idx < number_of_mines_in_this_pdu_; idx++) { Vector3Float x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); mine_location_.push_back(x); } } diff --git a/src/libsersi/minefield/MinefieldDataPdu.h b/src/libsersi/minefield/MinefieldDataPdu.h index 11fd66b..9be21a7 100644 --- a/src/libsersi/minefield/MinefieldDataPdu.h +++ b/src/libsersi/minefield/MinefieldDataPdu.h @@ -3,11 +3,11 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/minefield/MinefieldFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include common/Vector3Float.h" +#include minefield/MinefieldFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.10.3 Information about individual mines within a minefield. This @@ -62,8 +62,8 @@ class MinefieldDataPdu final : public MinefieldFamilyPdu { MinefieldDataPdu(); ~MinefieldDataPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetMinefieldId(); [[nodiscard]] const EntityID& GetMinefieldId() const; diff --git a/src/libsersi/minefield/MinefieldFamilyPdu.cpp b/src/libsersi/minefield/MinefieldFamilyPdu.cpp index 8cf4731..3ba994e 100644 --- a/src/libsersi/minefield/MinefieldFamilyPdu.cpp +++ b/src/libsersi/minefield/MinefieldFamilyPdu.cpp @@ -1,16 +1,14 @@ -#include "libsersi/minefield/MinefieldFamilyPdu.h" +#include minefield/MinefieldFamilyPdu.h" #include namespace dis { -MinefieldFamilyPdu::MinefieldFamilyPdu() { SetProtocolFamily(8); } - -void MinefieldFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); +void MinefieldFamilyPdu::Marshal(ByteBuffer& byte_buffer) const { + Pdu::Marshal(byte_buffer); } -void MinefieldFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); +void MinefieldFamilyPdu::Unmarshal(ByteBuffer& byte_buffer) { + Pdu::Unmarshal(byte_buffer); } bool MinefieldFamilyPdu::operator==(const MinefieldFamilyPdu& rhs) const { diff --git a/src/libsersi/minefield/MinefieldFamilyPdu.h b/src/libsersi/minefield/MinefieldFamilyPdu.h index 0bfd2bf..9812e28 100644 --- a/src/libsersi/minefield/MinefieldFamilyPdu.h +++ b/src/libsersi/minefield/MinefieldFamilyPdu.h @@ -2,19 +2,19 @@ #include -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.10.1 Abstract superclass for PDUs relating to minefields class MinefieldFamilyPdu : public Pdu { public: - MinefieldFamilyPdu(); + MinefieldFamilyPdu() = default; ~MinefieldFamilyPdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; [[nodiscard]] std::size_t GetMarshalledSize() const override; diff --git a/src/libsersi/minefield/MinefieldQueryPdu.cpp b/src/libsersi/minefield/MinefieldQueryPdu.cpp index 9895ba4..33ad5cb 100644 --- a/src/libsersi/minefield/MinefieldQueryPdu.cpp +++ b/src/libsersi/minefield/MinefieldQueryPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/minefield/MinefieldQueryPdu.h" +#include minefield/MinefieldQueryPdu.h" namespace dis { MinefieldQueryPdu::MinefieldQueryPdu() @@ -95,48 +95,48 @@ void MinefieldQueryPdu::SetSensorTypes(const std::vector& value) { sensor_types_ = value; } -void MinefieldQueryPdu::Marshal(DataStream& data_stream) const { - MinefieldFamilyPdu::Marshal(data_stream); - minefield_id_.Marshal(data_stream); - requesting_entity_id_.Marshal(data_stream); - data_stream << request_id_; - data_stream << static_cast(requested_perimeter_points_.size()); - data_stream << pad2_; - data_stream << static_cast(sensor_types_.size()); - data_stream << data_filter_; - requested_mine_type_.Marshal(data_stream); +void MinefieldQueryPdu::Marshal(ByteBuffer& byte_buffer) const { + MinefieldFamilyPdu::Marshal(byte_buffer); + minefield_id_.Marshal(byte_buffer); + requesting_entity_id_.Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << static_cast(requested_perimeter_points_.size()); + byte_buffer << pad2_; + byte_buffer << static_cast(sensor_types_.size()); + byte_buffer << data_filter_; + requested_mine_type_.Marshal(byte_buffer); for (auto x : requested_perimeter_points_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (uint16_t x : sensor_types_) { - data_stream << x; + byte_buffer << x; } } -void MinefieldQueryPdu::Unmarshal(DataStream& data_stream) { - MinefieldFamilyPdu::Unmarshal(data_stream); - minefield_id_.Unmarshal(data_stream); - requesting_entity_id_.Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> number_of_perimeter_points_; - data_stream >> pad2_; - data_stream >> number_of_sensor_types_; - data_stream >> data_filter_; - requested_mine_type_.Unmarshal(data_stream); +void MinefieldQueryPdu::Unmarshal(ByteBuffer& byte_buffer) { + MinefieldFamilyPdu::Unmarshal(byte_buffer); + minefield_id_.Unmarshal(byte_buffer); + requesting_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> number_of_perimeter_points_; + byte_buffer >> pad2_; + byte_buffer >> number_of_sensor_types_; + byte_buffer >> data_filter_; + requested_mine_type_.Unmarshal(byte_buffer); requested_perimeter_points_.clear(); for (std::size_t idx = 0; idx < number_of_perimeter_points_; idx++) { Point x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); requested_perimeter_points_.push_back(x); } sensor_types_.clear(); for (std::size_t idx = 0; idx < number_of_sensor_types_; idx++) { uint16_t x; - data_stream >> x; + byte_buffer >> x; sensor_types_.push_back(x); } } diff --git a/src/libsersi/minefield/MinefieldQueryPdu.h b/src/libsersi/minefield/MinefieldQueryPdu.h index e45a81a..9a17d5b 100644 --- a/src/libsersi/minefield/MinefieldQueryPdu.h +++ b/src/libsersi/minefield/MinefieldQueryPdu.h @@ -3,11 +3,11 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/minefield/MinefieldFamilyPdu.h" -#include "libsersi/minefield/Point.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include minefield/MinefieldFamilyPdu.h" +#include minefield/Point.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.10.2 Query a minefield for information about individual mines. @@ -49,8 +49,8 @@ class MinefieldQueryPdu final : public MinefieldFamilyPdu { MinefieldQueryPdu(); ~MinefieldQueryPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetMinefieldId(); [[nodiscard]] const EntityID& GetMinefieldId() const; diff --git a/src/libsersi/minefield/MinefieldResponseNackPdu.cpp b/src/libsersi/minefield/MinefieldResponseNackPdu.cpp index 686a870..011fedc 100644 --- a/src/libsersi/minefield/MinefieldResponseNackPdu.cpp +++ b/src/libsersi/minefield/MinefieldResponseNackPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/minefield/MinefieldResponseNackPdu.h" +#include minefield/MinefieldResponseNackPdu.h" namespace dis { MinefieldResponseNackPdu::MinefieldResponseNackPdu() @@ -57,29 +57,29 @@ void MinefieldResponseNackPdu::SetMissingPduSequenceNumbers( missing_pdu_sequence_numbers_ = value; } -void MinefieldResponseNackPdu::Marshal(DataStream& data_stream) const { - MinefieldFamilyPdu::Marshal(data_stream); - minefield_id_.Marshal(data_stream); - requesting_entity_id_.Marshal(data_stream); - data_stream << request_id_; - data_stream << static_cast(missing_pdu_sequence_numbers_.size()); +void MinefieldResponseNackPdu::Marshal(ByteBuffer& byte_buffer) const { + MinefieldFamilyPdu::Marshal(byte_buffer); + minefield_id_.Marshal(byte_buffer); + requesting_entity_id_.Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << static_cast(missing_pdu_sequence_numbers_.size()); for (uint64_t x : missing_pdu_sequence_numbers_) { - data_stream << x; + byte_buffer << x; } } -void MinefieldResponseNackPdu::Unmarshal(DataStream& data_stream) { - MinefieldFamilyPdu::Unmarshal(data_stream); - minefield_id_.Unmarshal(data_stream); - requesting_entity_id_.Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> number_of_missing_pdus_; +void MinefieldResponseNackPdu::Unmarshal(ByteBuffer& byte_buffer) { + MinefieldFamilyPdu::Unmarshal(byte_buffer); + minefield_id_.Unmarshal(byte_buffer); + requesting_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> number_of_missing_pdus_; missing_pdu_sequence_numbers_.clear(); for (std::size_t idx = 0; idx < number_of_missing_pdus_; idx++) { uint64_t x; - data_stream >> x; + byte_buffer >> x; missing_pdu_sequence_numbers_.push_back(x); } } diff --git a/src/libsersi/minefield/MinefieldResponseNackPdu.h b/src/libsersi/minefield/MinefieldResponseNackPdu.h index 8a58aee..4ca2342 100644 --- a/src/libsersi/minefield/MinefieldResponseNackPdu.h +++ b/src/libsersi/minefield/MinefieldResponseNackPdu.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/minefield/MinefieldFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include minefield/MinefieldFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.10.4 proivde the means to request a retransmit of a minefield @@ -31,8 +31,8 @@ class MinefieldResponseNackPdu final : public MinefieldFamilyPdu { MinefieldResponseNackPdu(); ~MinefieldResponseNackPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetMinefieldId(); [[nodiscard]] const EntityID& GetMinefieldId() const; diff --git a/src/libsersi/minefield/MinefieldStatePdu.cpp b/src/libsersi/minefield/MinefieldStatePdu.cpp index 9346ca6..792dc94 100644 --- a/src/libsersi/minefield/MinefieldStatePdu.cpp +++ b/src/libsersi/minefield/MinefieldStatePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/minefield/MinefieldStatePdu.h" +#include minefield/MinefieldStatePdu.h" namespace dis { MinefieldStatePdu::MinefieldStatePdu() @@ -112,52 +112,52 @@ void MinefieldStatePdu::SetMineType(const std::vector& value) { mine_type_ = value; } -void MinefieldStatePdu::Marshal(DataStream& data_stream) const { - MinefieldFamilyPdu::Marshal(data_stream); - minefield_id_.Marshal(data_stream); - data_stream << minefield_sequence_; - data_stream << force_id_; - data_stream << static_cast(perimeter_points_.size()); - minefield_type_.Marshal(data_stream); - data_stream << static_cast(mine_type_.size()); - minefield_location_.Marshal(data_stream); - minefield_orientation_.Marshal(data_stream); - data_stream << appearance_; - data_stream << protocol_mode_; +void MinefieldStatePdu::Marshal(ByteBuffer& byte_buffer) const { + MinefieldFamilyPdu::Marshal(byte_buffer); + minefield_id_.Marshal(byte_buffer); + byte_buffer << minefield_sequence_; + byte_buffer << force_id_; + byte_buffer << static_cast(perimeter_points_.size()); + minefield_type_.Marshal(byte_buffer); + byte_buffer << static_cast(mine_type_.size()); + minefield_location_.Marshal(byte_buffer); + minefield_orientation_.Marshal(byte_buffer); + byte_buffer << appearance_; + byte_buffer << protocol_mode_; for (auto x : perimeter_points_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : mine_type_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void MinefieldStatePdu::Unmarshal(DataStream& data_stream) { - MinefieldFamilyPdu::Unmarshal(data_stream); - minefield_id_.Unmarshal(data_stream); - data_stream >> minefield_sequence_; - data_stream >> force_id_; - data_stream >> number_of_perimeter_points_; - minefield_type_.Unmarshal(data_stream); - data_stream >> number_of_mine_types_; - minefield_location_.Unmarshal(data_stream); - minefield_orientation_.Unmarshal(data_stream); - data_stream >> appearance_; - data_stream >> protocol_mode_; +void MinefieldStatePdu::Unmarshal(ByteBuffer& byte_buffer) { + MinefieldFamilyPdu::Unmarshal(byte_buffer); + minefield_id_.Unmarshal(byte_buffer); + byte_buffer >> minefield_sequence_; + byte_buffer >> force_id_; + byte_buffer >> number_of_perimeter_points_; + minefield_type_.Unmarshal(byte_buffer); + byte_buffer >> number_of_mine_types_; + minefield_location_.Unmarshal(byte_buffer); + minefield_orientation_.Unmarshal(byte_buffer); + byte_buffer >> appearance_; + byte_buffer >> protocol_mode_; perimeter_points_.clear(); for (std::size_t idx = 0; idx < number_of_perimeter_points_; idx++) { Point x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); perimeter_points_.push_back(x); } mine_type_.clear(); for (std::size_t idx = 0; idx < number_of_mine_types_; idx++) { EntityType x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); mine_type_.push_back(x); } } diff --git a/src/libsersi/minefield/MinefieldStatePdu.h b/src/libsersi/minefield/MinefieldStatePdu.h index 3f0ecf1..5cc44e5 100644 --- a/src/libsersi/minefield/MinefieldStatePdu.h +++ b/src/libsersi/minefield/MinefieldStatePdu.h @@ -3,13 +3,13 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/common/Orientation.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/minefield/MinefieldFamilyPdu.h" -#include "libsersi/minefield/Point.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include common/Orientation.h" +#include common/Vector3Double.h" +#include minefield/MinefieldFamilyPdu.h" +#include minefield/Point.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.10.1 Abstract superclass for PDUs relating to minefields. @@ -57,8 +57,8 @@ class MinefieldStatePdu final : public MinefieldFamilyPdu { MinefieldStatePdu(); ~MinefieldStatePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetMinefieldId(); [[nodiscard]] const EntityID& GetMinefieldId() const; diff --git a/src/libsersi/minefield/Point.cpp b/src/libsersi/minefield/Point.cpp index 39317de..95ba28e 100644 --- a/src/libsersi/minefield/Point.cpp +++ b/src/libsersi/minefield/Point.cpp @@ -1,4 +1,4 @@ -#include "libsersi/minefield/Point.h" +#include minefield/Point.h" #include @@ -12,14 +12,14 @@ float Point::GetY() const { return y_; } void Point::SetY(float value) { y_ = value; } -void Point::Marshal(DataStream& data_stream) const { - data_stream << x_; - data_stream << y_; +void Point::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << x_; + byte_buffer << y_; } -void Point::Unmarshal(DataStream& data_stream) { - data_stream >> x_; - data_stream >> y_; +void Point::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> x_; + byte_buffer >> y_; } bool Point::operator==(const Point& rhs) const { diff --git a/src/libsersi/minefield/Point.h b/src/libsersi/minefield/Point.h index a4736d5..e58cb3b 100644 --- a/src/libsersi/minefield/Point.h +++ b/src/libsersi/minefield/Point.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // x,y point @@ -19,8 +19,8 @@ class Point { Point() = default; ~Point() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] float GetX() const; void SetX(float value); diff --git a/src/libsersi/radio_communications/AntennaLocation.cpp b/src/libsersi/radio_communications/AntennaLocation.cpp index 3f05386..ad9e11e 100644 --- a/src/libsersi/radio_communications/AntennaLocation.cpp +++ b/src/libsersi/radio_communications/AntennaLocation.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/AntennaLocation.h" +#include radio_communications/AntennaLocation.h" namespace dis { AntennaLocation::AntennaLocation() = default; @@ -27,14 +27,14 @@ void AntennaLocation::SetRelativeAntennaLocation(const Vector3Float& value) { relative_antenna_location_ = value; } -void AntennaLocation::Marshal(DataStream& data_stream) const { - antenna_location_.Marshal(data_stream); - relative_antenna_location_.Marshal(data_stream); +void AntennaLocation::Marshal(ByteBuffer& byte_buffer) const { + antenna_location_.Marshal(byte_buffer); + relative_antenna_location_.Marshal(byte_buffer); } -void AntennaLocation::Unmarshal(DataStream& data_stream) { - antenna_location_.Unmarshal(data_stream); - relative_antenna_location_.Unmarshal(data_stream); +void AntennaLocation::Unmarshal(ByteBuffer& byte_buffer) { + antenna_location_.Unmarshal(byte_buffer); + relative_antenna_location_.Unmarshal(byte_buffer); } bool AntennaLocation::operator==(const AntennaLocation& rhs) const { diff --git a/src/libsersi/radio_communications/AntennaLocation.h b/src/libsersi/radio_communications/AntennaLocation.h index bc91a5f..eee2904 100644 --- a/src/libsersi/radio_communications/AntennaLocation.h +++ b/src/libsersi/radio_communications/AntennaLocation.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/Vector3Double.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/utils/DataStream.h" +#include common/Vector3Double.h" +#include common/Vector3Float.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.3: location of the radiating portion of the antenna, specified in world @@ -22,8 +22,8 @@ class AntennaLocation { AntennaLocation(); ~AntennaLocation() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); Vector3Double& GetAntennaLocation(); [[nodiscard]] const Vector3Double& GetAntennaLocation() const; diff --git a/src/libsersi/radio_communications/CMakeLists.txt b/src/libsersi/radio_communications/CMakeLists.txt index 8d1dd46..27437eb 100644 --- a/src/libsersi/radio_communications/CMakeLists.txt +++ b/src/libsersi/radio_communications/CMakeLists.txt @@ -24,7 +24,7 @@ set(radio_communications_hdr TransmitterPdu.h ) -target_sources(sersi PRIVATE ${radio_communications_src}) +target_sources(${PROJECT_NAME} PRIVATE ${radio_communications_src}) install(FILES ${radio_communications_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/radio_communications diff --git a/src/libsersi/radio_communications/IntercomCommunicationsParameters.cpp b/src/libsersi/radio_communications/IntercomCommunicationsParameters.cpp index 0c7c99a..edaaf1c 100644 --- a/src/libsersi/radio_communications/IntercomCommunicationsParameters.cpp +++ b/src/libsersi/radio_communications/IntercomCommunicationsParameters.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/IntercomCommunicationsParameters.h" +#include radio_communications/IntercomCommunicationsParameters.h" namespace dis { IntercomCommunicationsParameters::IntercomCommunicationsParameters() @@ -28,16 +28,16 @@ void IntercomCommunicationsParameters::SetRecordSpecificField(uint32_t value) { record_specific_field_ = value; } -void IntercomCommunicationsParameters::Marshal(DataStream& data_stream) const { - data_stream << record_type_; - data_stream << record_length_; - data_stream << record_specific_field_; +void IntercomCommunicationsParameters::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << record_type_; + byte_buffer << record_length_; + byte_buffer << record_specific_field_; } -void IntercomCommunicationsParameters::Unmarshal(DataStream& data_stream) { - data_stream >> record_type_; - data_stream >> record_length_; - data_stream >> record_specific_field_; +void IntercomCommunicationsParameters::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> record_type_; + byte_buffer >> record_length_; + byte_buffer >> record_specific_field_; } bool IntercomCommunicationsParameters::operator==( diff --git a/src/libsersi/radio_communications/IntercomCommunicationsParameters.h b/src/libsersi/radio_communications/IntercomCommunicationsParameters.h index c8f3a08..a957fb4 100644 --- a/src/libsersi/radio_communications/IntercomCommunicationsParameters.h +++ b/src/libsersi/radio_communications/IntercomCommunicationsParameters.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.46. Intercom communcations parameters @@ -23,8 +23,8 @@ class IntercomCommunicationsParameters { IntercomCommunicationsParameters(); ~IntercomCommunicationsParameters() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetRecordType() const; void SetRecordType(uint16_t value); diff --git a/src/libsersi/radio_communications/IntercomControlPdu.cpp b/src/libsersi/radio_communications/IntercomControlPdu.cpp index 9c92c29..0931b6c 100644 --- a/src/libsersi/radio_communications/IntercomControlPdu.cpp +++ b/src/libsersi/radio_communications/IntercomControlPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/IntercomControlPdu.h" +#include radio_communications/IntercomControlPdu.h" namespace dis { IntercomControlPdu::IntercomControlPdu() @@ -111,43 +111,43 @@ void IntercomControlPdu::SetIntercomParameters( intercom_parameters_ = value; } -void IntercomControlPdu::Marshal(DataStream& data_stream) const { - RadioCommunicationsFamilyPdu::Marshal(data_stream); - data_stream << control_type_; - data_stream << communications_channel_type_; - source_entity_id_.Marshal(data_stream); - data_stream << source_communications_device_id_; - data_stream << source_line_id_; - data_stream << transmit_priority_; - data_stream << transmit_line_state_; - data_stream << command_; - master_entity_id_.Marshal(data_stream); - data_stream << master_communications_device_id_; - data_stream << static_cast(intercom_parameters_.size()); +void IntercomControlPdu::Marshal(ByteBuffer& byte_buffer) const { + RadioCommunicationsFamilyPdu::Marshal(byte_buffer); + byte_buffer << control_type_; + byte_buffer << communications_channel_type_; + source_entity_id_.Marshal(byte_buffer); + byte_buffer << source_communications_device_id_; + byte_buffer << source_line_id_; + byte_buffer << transmit_priority_; + byte_buffer << transmit_line_state_; + byte_buffer << command_; + master_entity_id_.Marshal(byte_buffer); + byte_buffer << master_communications_device_id_; + byte_buffer << static_cast(intercom_parameters_.size()); for (auto x : intercom_parameters_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void IntercomControlPdu::Unmarshal(DataStream& data_stream) { - RadioCommunicationsFamilyPdu::Unmarshal(data_stream); - data_stream >> control_type_; - data_stream >> communications_channel_type_; - source_entity_id_.Unmarshal(data_stream); - data_stream >> source_communications_device_id_; - data_stream >> source_line_id_; - data_stream >> transmit_priority_; - data_stream >> transmit_line_state_; - data_stream >> command_; - master_entity_id_.Unmarshal(data_stream); - data_stream >> master_communications_device_id_; - data_stream >> intercom_parameters_length_; +void IntercomControlPdu::Unmarshal(ByteBuffer& byte_buffer) { + RadioCommunicationsFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> control_type_; + byte_buffer >> communications_channel_type_; + source_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> source_communications_device_id_; + byte_buffer >> source_line_id_; + byte_buffer >> transmit_priority_; + byte_buffer >> transmit_line_state_; + byte_buffer >> command_; + master_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> master_communications_device_id_; + byte_buffer >> intercom_parameters_length_; intercom_parameters_.clear(); for (std::size_t idx = 0; idx < intercom_parameters_length_; idx++) { IntercomCommunicationsParameters x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); intercom_parameters_.push_back(x); } } diff --git a/src/libsersi/radio_communications/IntercomControlPdu.h b/src/libsersi/radio_communications/IntercomControlPdu.h index 57551e8..26abc9c 100644 --- a/src/libsersi/radio_communications/IntercomControlPdu.h +++ b/src/libsersi/radio_communications/IntercomControlPdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/radio_communications/IntercomCommunicationsParameters.h" -#include "libsersi/radio_communications/RadioCommunicationsFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include radio_communications/IntercomCommunicationsParameters.h" +#include radio_communications/RadioCommunicationsFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.8.5. Detailed inofrmation about the state of an intercom device @@ -57,8 +57,8 @@ class IntercomControlPdu final : public RadioCommunicationsFamilyPdu { IntercomControlPdu(); ~IntercomControlPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint8_t GetControlType() const; void SetControlType(uint8_t value); diff --git a/src/libsersi/radio_communications/IntercomSignalPdu.cpp b/src/libsersi/radio_communications/IntercomSignalPdu.cpp index e6de820..7b9c711 100644 --- a/src/libsersi/radio_communications/IntercomSignalPdu.cpp +++ b/src/libsersi/radio_communications/IntercomSignalPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/IntercomSignalPdu.h" +#include radio_communications/IntercomSignalPdu.h" namespace dis { IntercomSignalPdu::IntercomSignalPdu() @@ -59,35 +59,35 @@ void IntercomSignalPdu::SetData(const std::vector& value) { data_ = value; } -void IntercomSignalPdu::Marshal(DataStream& data_stream) const { - RadioCommunicationsFamilyPdu::Marshal(data_stream); - entity_id_.Marshal(data_stream); - data_stream << communications_device_id_; - data_stream << encoding_scheme_; - data_stream << tdl_type_; - data_stream << sample_rate_; - data_stream << static_cast(data_.size()); - data_stream << samples_; +void IntercomSignalPdu::Marshal(ByteBuffer& byte_buffer) const { + RadioCommunicationsFamilyPdu::Marshal(byte_buffer); + entity_id_.Marshal(byte_buffer); + byte_buffer << communications_device_id_; + byte_buffer << encoding_scheme_; + byte_buffer << tdl_type_; + byte_buffer << sample_rate_; + byte_buffer << static_cast(data_.size()); + byte_buffer << samples_; for (const auto& byte : data_) { - data_stream << byte; + byte_buffer << byte; } } -void IntercomSignalPdu::Unmarshal(DataStream& data_stream) { - RadioCommunicationsFamilyPdu::Unmarshal(data_stream); - entity_id_.Unmarshal(data_stream); - data_stream >> communications_device_id_; - data_stream >> encoding_scheme_; - data_stream >> tdl_type_; - data_stream >> sample_rate_; - data_stream >> data_length_; - data_stream >> samples_; +void IntercomSignalPdu::Unmarshal(ByteBuffer& byte_buffer) { + RadioCommunicationsFamilyPdu::Unmarshal(byte_buffer); + entity_id_.Unmarshal(byte_buffer); + byte_buffer >> communications_device_id_; + byte_buffer >> encoding_scheme_; + byte_buffer >> tdl_type_; + byte_buffer >> sample_rate_; + byte_buffer >> data_length_; + byte_buffer >> samples_; data_.clear(); for (auto idx = 0; idx < data_length_; idx++) { uint8_t x; - data_stream >> x; + byte_buffer >> x; data_.push_back(x); } } diff --git a/src/libsersi/radio_communications/IntercomSignalPdu.h b/src/libsersi/radio_communications/IntercomSignalPdu.h index 09dfe86..5aa648a 100644 --- a/src/libsersi/radio_communications/IntercomSignalPdu.h +++ b/src/libsersi/radio_communications/IntercomSignalPdu.h @@ -3,9 +3,9 @@ #include #include -#include "libsersi/common/EntityID.h" -#include "libsersi/radio_communications/RadioCommunicationsFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include radio_communications/RadioCommunicationsFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.8.4. Actual transmission of intercome voice data. COMPLETE @@ -40,8 +40,8 @@ class IntercomSignalPdu final : public RadioCommunicationsFamilyPdu { IntercomSignalPdu(); ~IntercomSignalPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetEntityId(); [[nodiscard]] const EntityID& GetEntityId() const; diff --git a/src/libsersi/radio_communications/ModulationType.cpp b/src/libsersi/radio_communications/ModulationType.cpp index 4f908bb..c6f3e25 100644 --- a/src/libsersi/radio_communications/ModulationType.cpp +++ b/src/libsersi/radio_communications/ModulationType.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/ModulationType.h" +#include radio_communications/ModulationType.h" namespace dis { ModulationType::ModulationType() @@ -22,18 +22,18 @@ uint16_t ModulationType::GetSystem() const { return system_; } void ModulationType::SetSystem(uint16_t value) { system_ = value; } -void ModulationType::Marshal(DataStream& data_stream) const { - data_stream << spread_spectrum_; - data_stream << major_; - data_stream << detail_; - data_stream << system_; +void ModulationType::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << spread_spectrum_; + byte_buffer << major_; + byte_buffer << detail_; + byte_buffer << system_; } -void ModulationType::Unmarshal(DataStream& data_stream) { - data_stream >> spread_spectrum_; - data_stream >> major_; - data_stream >> detail_; - data_stream >> system_; +void ModulationType::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> spread_spectrum_; + byte_buffer >> major_; + byte_buffer >> detail_; + byte_buffer >> system_; } bool ModulationType::operator==(const ModulationType& rhs) const { diff --git a/src/libsersi/radio_communications/ModulationType.h b/src/libsersi/radio_communications/ModulationType.h index cdcaa38..e2ce72f 100644 --- a/src/libsersi/radio_communications/ModulationType.h +++ b/src/libsersi/radio_communications/ModulationType.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Radio modulation @@ -23,8 +23,8 @@ class ModulationType { ModulationType(); ~ModulationType() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetSpreadSpectrum() const; void SetSpreadSpectrum(uint16_t value); diff --git a/src/libsersi/radio_communications/RadioCommunicationsFamilyPdu.cpp b/src/libsersi/radio_communications/RadioCommunicationsFamilyPdu.cpp index 5580a48..6549c54 100644 --- a/src/libsersi/radio_communications/RadioCommunicationsFamilyPdu.cpp +++ b/src/libsersi/radio_communications/RadioCommunicationsFamilyPdu.cpp @@ -1,10 +1,6 @@ -#include "libsersi/radio_communications/RadioCommunicationsFamilyPdu.h" +#include radio_communications/RadioCommunicationsFamilyPdu.h" namespace dis { -RadioCommunicationsFamilyPdu::RadioCommunicationsFamilyPdu() : radio_id_(0) { - SetProtocolFamily(4); -} - EntityID& RadioCommunicationsFamilyPdu::GetEntityId() { return entity_id_; } const EntityID& RadioCommunicationsFamilyPdu::GetEntityId() const { @@ -21,16 +17,16 @@ void RadioCommunicationsFamilyPdu::SetRadioId(uint16_t value) { radio_id_ = value; } -void RadioCommunicationsFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); - entity_id_.Marshal(data_stream); - data_stream << radio_id_; +void RadioCommunicationsFamilyPdu::Marshal(ByteBuffer& byte_buffer) const { + Pdu::Marshal(byte_buffer); + entity_id_.Marshal(byte_buffer); + byte_buffer << radio_id_; } -void RadioCommunicationsFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); - entity_id_.Unmarshal(data_stream); - data_stream >> radio_id_; +void RadioCommunicationsFamilyPdu::Unmarshal(ByteBuffer& byte_buffer) { + Pdu::Unmarshal(byte_buffer); + entity_id_.Unmarshal(byte_buffer); + byte_buffer >> radio_id_; } bool RadioCommunicationsFamilyPdu::operator==( diff --git a/src/libsersi/radio_communications/RadioCommunicationsFamilyPdu.h b/src/libsersi/radio_communications/RadioCommunicationsFamilyPdu.h index 8d424b2..d719603 100644 --- a/src/libsersi/radio_communications/RadioCommunicationsFamilyPdu.h +++ b/src/libsersi/radio_communications/RadioCommunicationsFamilyPdu.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.8. Abstract superclass for radio communications PDUs. @@ -18,11 +18,11 @@ class RadioCommunicationsFamilyPdu : public Pdu { uint16_t radio_id_; public: - RadioCommunicationsFamilyPdu(); + RadioCommunicationsFamilyPdu() = default; ~RadioCommunicationsFamilyPdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; EntityID& GetEntityId(); [[nodiscard]] const EntityID& GetEntityId() const; diff --git a/src/libsersi/radio_communications/RadioEntityType.cpp b/src/libsersi/radio_communications/RadioEntityType.cpp index 58f89ad..3c1a6df 100644 --- a/src/libsersi/radio_communications/RadioEntityType.cpp +++ b/src/libsersi/radio_communications/RadioEntityType.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/RadioEntityType.h" +#include radio_communications/RadioEntityType.h" namespace dis { RadioEntityType::RadioEntityType() @@ -37,22 +37,22 @@ uint16_t RadioEntityType::GetNomenclature() const { return nomenclature_; } void RadioEntityType::SetNomenclature(uint16_t value) { nomenclature_ = value; } -void RadioEntityType::Marshal(DataStream& data_stream) const { - data_stream << entity_kind_; - data_stream << domain_; - data_stream << country_; - data_stream << category_; - data_stream << nomenclature_version_; - data_stream << nomenclature_; +void RadioEntityType::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << entity_kind_; + byte_buffer << domain_; + byte_buffer << country_; + byte_buffer << category_; + byte_buffer << nomenclature_version_; + byte_buffer << nomenclature_; } -void RadioEntityType::Unmarshal(DataStream& data_stream) { - data_stream >> entity_kind_; - data_stream >> domain_; - data_stream >> country_; - data_stream >> category_; - data_stream >> nomenclature_version_; - data_stream >> nomenclature_; +void RadioEntityType::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> entity_kind_; + byte_buffer >> domain_; + byte_buffer >> country_; + byte_buffer >> category_; + byte_buffer >> nomenclature_version_; + byte_buffer >> nomenclature_; } bool RadioEntityType::operator==(const RadioEntityType& rhs) const { diff --git a/src/libsersi/radio_communications/RadioEntityType.h b/src/libsersi/radio_communications/RadioEntityType.h index 5eeb2c5..26b79d9 100644 --- a/src/libsersi/radio_communications/RadioEntityType.h +++ b/src/libsersi/radio_communications/RadioEntityType.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.25. Identifies the type of radio @@ -30,8 +30,8 @@ class RadioEntityType { RadioEntityType(); ~RadioEntityType() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetEntityKind() const; void SetEntityKind(uint8_t value); diff --git a/src/libsersi/radio_communications/ReceiverPdu.cpp b/src/libsersi/radio_communications/ReceiverPdu.cpp index 5b3be7b..9569b78 100644 --- a/src/libsersi/radio_communications/ReceiverPdu.cpp +++ b/src/libsersi/radio_communications/ReceiverPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/ReceiverPdu.h" +#include radio_communications/ReceiverPdu.h" namespace dis { ReceiverPdu::ReceiverPdu() @@ -41,22 +41,22 @@ void ReceiverPdu::SetTransmitterRadioId(uint16_t value) { transmitter_radio_id_ = value; } -void ReceiverPdu::Marshal(DataStream& data_stream) const { - RadioCommunicationsFamilyPdu::Marshal(data_stream); - data_stream << receiver_state_; - data_stream << padding1_; - data_stream << received_power_; - transmitter_entity_id_.Marshal(data_stream); - data_stream << transmitter_radio_id_; +void ReceiverPdu::Marshal(ByteBuffer& byte_buffer) const { + RadioCommunicationsFamilyPdu::Marshal(byte_buffer); + byte_buffer << receiver_state_; + byte_buffer << padding1_; + byte_buffer << received_power_; + transmitter_entity_id_.Marshal(byte_buffer); + byte_buffer << transmitter_radio_id_; } -void ReceiverPdu::Unmarshal(DataStream& data_stream) { - RadioCommunicationsFamilyPdu::Unmarshal(data_stream); - data_stream >> receiver_state_; - data_stream >> padding1_; - data_stream >> received_power_; - transmitter_entity_id_.Unmarshal(data_stream); - data_stream >> transmitter_radio_id_; +void ReceiverPdu::Unmarshal(ByteBuffer& byte_buffer) { + RadioCommunicationsFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> receiver_state_; + byte_buffer >> padding1_; + byte_buffer >> received_power_; + transmitter_entity_id_.Unmarshal(byte_buffer); + byte_buffer >> transmitter_radio_id_; } bool ReceiverPdu::operator==(const ReceiverPdu& rhs) const { diff --git a/src/libsersi/radio_communications/ReceiverPdu.h b/src/libsersi/radio_communications/ReceiverPdu.h index f8e4b51..1f76089 100644 --- a/src/libsersi/radio_communications/ReceiverPdu.h +++ b/src/libsersi/radio_communications/ReceiverPdu.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/radio_communications/RadioCommunicationsFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include radio_communications/RadioCommunicationsFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.8.3. Communication of a receiver state. COMPLETE @@ -30,8 +30,8 @@ class ReceiverPdu final : public RadioCommunicationsFamilyPdu { ReceiverPdu(); ~ReceiverPdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint16_t GetReceiverState() const; void SetReceiverState(uint16_t value); diff --git a/src/libsersi/radio_communications/SignalPdu.cpp b/src/libsersi/radio_communications/SignalPdu.cpp index 91680a3..2a00fec 100644 --- a/src/libsersi/radio_communications/SignalPdu.cpp +++ b/src/libsersi/radio_communications/SignalPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/SignalPdu.h" +#include radio_communications/SignalPdu.h" #include @@ -40,30 +40,30 @@ const std::vector& SignalPdu::GetData() const { return data_; } void SignalPdu::SetData(const std::vector& value) { data_ = value; } -void SignalPdu::Marshal(DataStream& data_stream) const { - RadioCommunicationsFamilyPdu::Marshal(data_stream); - data_stream << encoding_scheme_; - data_stream << tdl_type_; - data_stream << sample_rate_; - data_stream << static_cast(data_.size()); - data_stream << samples_; +void SignalPdu::Marshal(ByteBuffer& byte_buffer) const { + RadioCommunicationsFamilyPdu::Marshal(byte_buffer); + byte_buffer << encoding_scheme_; + byte_buffer << tdl_type_; + byte_buffer << sample_rate_; + byte_buffer << static_cast(data_.size()); + byte_buffer << samples_; for (auto byte : data_) { - data_stream << byte; + byte_buffer << byte; } } -void SignalPdu::Unmarshal(DataStream& data_stream) { - RadioCommunicationsFamilyPdu::Unmarshal(data_stream); - data_stream >> encoding_scheme_; - data_stream >> tdl_type_; - data_stream >> sample_rate_; - data_stream >> data_length_; - data_stream >> samples_; +void SignalPdu::Unmarshal(ByteBuffer& byte_buffer) { + RadioCommunicationsFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> encoding_scheme_; + byte_buffer >> tdl_type_; + byte_buffer >> sample_rate_; + byte_buffer >> data_length_; + byte_buffer >> samples_; data_.clear(); for (auto idx = 0; idx < data_length_; ++idx) { uint8_t x; - data_stream >> x; + byte_buffer >> x; data_.push_back(x); } } diff --git a/src/libsersi/radio_communications/SignalPdu.h b/src/libsersi/radio_communications/SignalPdu.h index 0294357..cdfa1d4 100644 --- a/src/libsersi/radio_communications/SignalPdu.h +++ b/src/libsersi/radio_communications/SignalPdu.h @@ -3,8 +3,8 @@ #include #include -#include "libsersi/radio_communications/RadioCommunicationsFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include radio_communications/RadioCommunicationsFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.8.2. Detailed information about a radio transmitter. This PDU @@ -36,8 +36,8 @@ class SignalPdu final : public RadioCommunicationsFamilyPdu { SignalPdu(); ~SignalPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint16_t GetEncodingScheme() const; void SetEncodingScheme(uint16_t value); diff --git a/src/libsersi/radio_communications/TransmitterPdu.cpp b/src/libsersi/radio_communications/TransmitterPdu.cpp index 9fe71ff..90696a6 100644 --- a/src/libsersi/radio_communications/TransmitterPdu.cpp +++ b/src/libsersi/radio_communications/TransmitterPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/radio_communications/TransmitterPdu.h" +#include radio_communications/TransmitterPdu.h" namespace dis { TransmitterPdu::TransmitterPdu() @@ -158,66 +158,66 @@ void TransmitterPdu::SetAntennaPatternList( antenna_pattern_list_ = value; } -void TransmitterPdu::Marshal(DataStream& data_stream) const { - RadioCommunicationsFamilyPdu::Marshal(data_stream); - radio_entity_type_.Marshal(data_stream); - data_stream << transmit_state_; - data_stream << input_source_; - data_stream << padding1_; - antenna_location_.Marshal(data_stream); - relative_antenna_location_.Marshal(data_stream); - data_stream << antenna_pattern_type_; - data_stream << static_cast(antenna_pattern_list_.size()); - data_stream << frequency_; - data_stream << transmit_frequency_bandwidth_; - data_stream << power_; - modulation_type_.Marshal(data_stream); - data_stream << crypto_system_; - data_stream << crypto_key_id_; - data_stream << static_cast(modulation_parameters_list_.size()); - data_stream << padding2_; - data_stream << padding3_; +void TransmitterPdu::Marshal(ByteBuffer& byte_buffer) const { + RadioCommunicationsFamilyPdu::Marshal(byte_buffer); + radio_entity_type_.Marshal(byte_buffer); + byte_buffer << transmit_state_; + byte_buffer << input_source_; + byte_buffer << padding1_; + antenna_location_.Marshal(byte_buffer); + relative_antenna_location_.Marshal(byte_buffer); + byte_buffer << antenna_pattern_type_; + byte_buffer << static_cast(antenna_pattern_list_.size()); + byte_buffer << frequency_; + byte_buffer << transmit_frequency_bandwidth_; + byte_buffer << power_; + modulation_type_.Marshal(byte_buffer); + byte_buffer << crypto_system_; + byte_buffer << crypto_key_id_; + byte_buffer << static_cast(modulation_parameters_list_.size()); + byte_buffer << padding2_; + byte_buffer << padding3_; for (auto x : modulation_parameters_list_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (auto x : antenna_pattern_list_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void TransmitterPdu::Unmarshal(DataStream& data_stream) { - RadioCommunicationsFamilyPdu::Unmarshal(data_stream); - radio_entity_type_.Unmarshal(data_stream); - data_stream >> transmit_state_; - data_stream >> input_source_; - data_stream >> padding1_; - antenna_location_.Unmarshal(data_stream); - relative_antenna_location_.Unmarshal(data_stream); - data_stream >> antenna_pattern_type_; - data_stream >> antenna_pattern_count_; - data_stream >> frequency_; - data_stream >> transmit_frequency_bandwidth_; - data_stream >> power_; - modulation_type_.Unmarshal(data_stream); - data_stream >> crypto_system_; - data_stream >> crypto_key_id_; - data_stream >> modulation_parameter_count_; - data_stream >> padding2_; - data_stream >> padding3_; +void TransmitterPdu::Unmarshal(ByteBuffer& byte_buffer) { + RadioCommunicationsFamilyPdu::Unmarshal(byte_buffer); + radio_entity_type_.Unmarshal(byte_buffer); + byte_buffer >> transmit_state_; + byte_buffer >> input_source_; + byte_buffer >> padding1_; + antenna_location_.Unmarshal(byte_buffer); + relative_antenna_location_.Unmarshal(byte_buffer); + byte_buffer >> antenna_pattern_type_; + byte_buffer >> antenna_pattern_count_; + byte_buffer >> frequency_; + byte_buffer >> transmit_frequency_bandwidth_; + byte_buffer >> power_; + modulation_type_.Unmarshal(byte_buffer); + byte_buffer >> crypto_system_; + byte_buffer >> crypto_key_id_; + byte_buffer >> modulation_parameter_count_; + byte_buffer >> padding2_; + byte_buffer >> padding3_; modulation_parameters_list_.clear(); for (std::size_t idx = 0; idx < modulation_parameter_count_; idx++) { Vector3Float x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); modulation_parameters_list_.push_back(x); } antenna_pattern_list_.clear(); for (std::size_t idx = 0; idx < antenna_pattern_count_; idx++) { Vector3Float x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); antenna_pattern_list_.push_back(x); } } diff --git a/src/libsersi/radio_communications/TransmitterPdu.h b/src/libsersi/radio_communications/TransmitterPdu.h index c579a4c..d3d1631 100644 --- a/src/libsersi/radio_communications/TransmitterPdu.h +++ b/src/libsersi/radio_communications/TransmitterPdu.h @@ -3,12 +3,12 @@ #include #include -#include "libsersi/common/Vector3Double.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/radio_communications/ModulationType.h" -#include "libsersi/radio_communications/RadioCommunicationsFamilyPdu.h" -#include "libsersi/radio_communications/RadioEntityType.h" -#include "libsersi/utils/DataStream.h" +#include common/Vector3Double.h" +#include common/Vector3Float.h" +#include radio_communications/ModulationType.h" +#include radio_communications/RadioCommunicationsFamilyPdu.h" +#include radio_communications/RadioEntityType.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.8.1. Detailed information about a radio transmitter. @@ -76,8 +76,8 @@ class TransmitterPdu final : public RadioCommunicationsFamilyPdu { TransmitterPdu(); ~TransmitterPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; RadioEntityType& GetRadioEntityType(); [[nodiscard]] const RadioEntityType& GetRadioEntityType() const; diff --git a/src/libsersi/simulation_management/AcknowledgePdu.cpp b/src/libsersi/simulation_management/AcknowledgePdu.cpp index 4062ee0..76604eb 100644 --- a/src/libsersi/simulation_management/AcknowledgePdu.cpp +++ b/src/libsersi/simulation_management/AcknowledgePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/AcknowledgePdu.h" +#include simulation_management/AcknowledgePdu.h" namespace dis { AcknowledgePdu::AcknowledgePdu() @@ -22,18 +22,18 @@ uint32_t AcknowledgePdu::GetRequestId() const { return request_id_; } void AcknowledgePdu::SetRequestId(uint32_t value) { request_id_ = value; } -void AcknowledgePdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << acknowledge_flag_; - data_stream << response_flag_; - data_stream << request_id_; +void AcknowledgePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << acknowledge_flag_; + byte_buffer << response_flag_; + byte_buffer << request_id_; } -void AcknowledgePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> acknowledge_flag_; - data_stream >> response_flag_; - data_stream >> request_id_; +void AcknowledgePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> acknowledge_flag_; + byte_buffer >> response_flag_; + byte_buffer >> request_id_; } bool AcknowledgePdu::operator==(const AcknowledgePdu& rhs) const { diff --git a/src/libsersi/simulation_management/AcknowledgePdu.h b/src/libsersi/simulation_management/AcknowledgePdu.h index e146e0a..e642ea0 100644 --- a/src/libsersi/simulation_management/AcknowledgePdu.h +++ b/src/libsersi/simulation_management/AcknowledgePdu.h @@ -3,8 +3,8 @@ #include #include -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.5. Acknowledge the receiptof a start/resume, stop/freeze, or @@ -25,8 +25,8 @@ class AcknowledgePdu final : public SimulationManagementFamilyPdu { AcknowledgePdu(); ~AcknowledgePdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint16_t GetAcknowledgeFlag() const; void SetAcknowledgeFlag(uint16_t value); diff --git a/src/libsersi/simulation_management/ActionRequestPdu.cpp b/src/libsersi/simulation_management/ActionRequestPdu.cpp index 23fdc69..a232603 100644 --- a/src/libsersi/simulation_management/ActionRequestPdu.cpp +++ b/src/libsersi/simulation_management/ActionRequestPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/ActionRequestPdu.h" +#include simulation_management/ActionRequestPdu.h" namespace dis { ActionRequestPdu::ActionRequestPdu() @@ -55,40 +55,40 @@ void ActionRequestPdu::SetVariableDatums( variable_datums_ = value; } -void ActionRequestPdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << action_id_; - data_stream << static_cast(fixed_datums_.size()); - data_stream << static_cast(variable_datums_.size()); +void ActionRequestPdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << action_id_; + byte_buffer << static_cast(fixed_datums_.size()); + byte_buffer << static_cast(variable_datums_.size()); for (auto x : fixed_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ActionRequestPdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> action_id_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void ActionRequestPdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> action_id_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datums_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datums_.push_back(x); } variable_datums_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datums_.push_back(x); } } diff --git a/src/libsersi/simulation_management/ActionRequestPdu.h b/src/libsersi/simulation_management/ActionRequestPdu.h index b8fff85..be54b75 100644 --- a/src/libsersi/simulation_management/ActionRequestPdu.h +++ b/src/libsersi/simulation_management/ActionRequestPdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.6. Request from simulation manager to an entity. COMPLETE @@ -34,8 +34,8 @@ class ActionRequestPdu final : public SimulationManagementFamilyPdu { ActionRequestPdu(); ~ActionRequestPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management/ActionResponsePdu.cpp b/src/libsersi/simulation_management/ActionResponsePdu.cpp index 1ad542e..32fd599 100644 --- a/src/libsersi/simulation_management/ActionResponsePdu.cpp +++ b/src/libsersi/simulation_management/ActionResponsePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/ActionResponsePdu.h" +#include simulation_management/ActionResponsePdu.h" namespace dis { ActionResponsePdu::ActionResponsePdu() @@ -57,40 +57,40 @@ void ActionResponsePdu::SetVariableDatums( variable_datums_ = value; } -void ActionResponsePdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << request_status_; - data_stream << static_cast(fixed_datums_.size()); - data_stream << static_cast(variable_datums_.size()); +void ActionResponsePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << request_status_; + byte_buffer << static_cast(fixed_datums_.size()); + byte_buffer << static_cast(variable_datums_.size()); for (auto x : fixed_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ActionResponsePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> request_status_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void ActionResponsePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> request_status_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datums_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datums_.push_back(x); } variable_datums_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datums_.push_back(x); } } diff --git a/src/libsersi/simulation_management/ActionResponsePdu.h b/src/libsersi/simulation_management/ActionResponsePdu.h index 06d240a..b128ff6 100644 --- a/src/libsersi/simulation_management/ActionResponsePdu.h +++ b/src/libsersi/simulation_management/ActionResponsePdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.7. response to an action request PDU. COMPLETE @@ -34,8 +34,8 @@ class ActionResponsePdu final : public SimulationManagementFamilyPdu { ActionResponsePdu(); ~ActionResponsePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management/CMakeLists.txt b/src/libsersi/simulation_management/CMakeLists.txt index 914c101..6018417 100644 --- a/src/libsersi/simulation_management/CMakeLists.txt +++ b/src/libsersi/simulation_management/CMakeLists.txt @@ -30,7 +30,7 @@ set(simulation_management_src StopFreezePdu.cpp ) -target_sources(sersi PRIVATE ${simulation_management_src}) +target_sources(${PROJECT_NAME} PRIVATE ${simulation_management_src}) install(FILES ${simulation_management_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/simulation_management diff --git a/src/libsersi/simulation_management/CommentPdu.cpp b/src/libsersi/simulation_management/CommentPdu.cpp index bcebfc9..e351772 100644 --- a/src/libsersi/simulation_management/CommentPdu.cpp +++ b/src/libsersi/simulation_management/CommentPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/CommentPdu.h" +#include simulation_management/CommentPdu.h" namespace dis { CommentPdu::CommentPdu() @@ -41,36 +41,36 @@ void CommentPdu::SetVariableDatums(const std::vector& value) { variable_datums_ = value; } -void CommentPdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << static_cast(fixed_datums_.size()); - data_stream << static_cast(variable_datums_.size()); +void CommentPdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << static_cast(fixed_datums_.size()); + byte_buffer << static_cast(variable_datums_.size()); for (auto x : fixed_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void CommentPdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void CommentPdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datums_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datums_.push_back(x); } variable_datums_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datums_.push_back(x); } } diff --git a/src/libsersi/simulation_management/CommentPdu.h b/src/libsersi/simulation_management/CommentPdu.h index 3384546..53907a8 100644 --- a/src/libsersi/simulation_management/CommentPdu.h +++ b/src/libsersi/simulation_management/CommentPdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.12. Arbitrary messages can be entered into the data stream via @@ -29,8 +29,8 @@ class CommentPdu final : public SimulationManagementFamilyPdu { CommentPdu(); ~CommentPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetNumberOfFixedDatumRecords() const; diff --git a/src/libsersi/simulation_management/CreateEntityPdu.cpp b/src/libsersi/simulation_management/CreateEntityPdu.cpp index 1b1cac1..7701539 100644 --- a/src/libsersi/simulation_management/CreateEntityPdu.cpp +++ b/src/libsersi/simulation_management/CreateEntityPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/CreateEntityPdu.h" +#include simulation_management/CreateEntityPdu.h" #include @@ -9,14 +9,14 @@ uint32_t CreateEntityPdu::GetRequestId() const { return request_id_; } void CreateEntityPdu::SetRequestId(uint32_t value) { request_id_ = value; } -void CreateEntityPdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << request_id_; +void CreateEntityPdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; } -void CreateEntityPdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; +void CreateEntityPdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; } bool CreateEntityPdu::operator==(const CreateEntityPdu& rhs) const { diff --git a/src/libsersi/simulation_management/CreateEntityPdu.h b/src/libsersi/simulation_management/CreateEntityPdu.h index 332d484..bbc1e32 100644 --- a/src/libsersi/simulation_management/CreateEntityPdu.h +++ b/src/libsersi/simulation_management/CreateEntityPdu.h @@ -1,7 +1,7 @@ #pragma once -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.1. Create a new entity. COMPLETE @@ -15,8 +15,8 @@ class CreateEntityPdu final : public SimulationManagementFamilyPdu { CreateEntityPdu(); ~CreateEntityPdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management/DataPdu.cpp b/src/libsersi/simulation_management/DataPdu.cpp index 7f75cef..2b122e5 100644 --- a/src/libsersi/simulation_management/DataPdu.cpp +++ b/src/libsersi/simulation_management/DataPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/DataPdu.h" +#include simulation_management/DataPdu.h" namespace dis { DataPdu::DataPdu() @@ -52,40 +52,40 @@ void DataPdu::SetVariableDatums(const std::vector& value) { variable_datums_ = value; } -void DataPdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << padding1_; - data_stream << static_cast(fixed_datums_.size()); - data_stream << static_cast(variable_datums_.size()); +void DataPdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << padding1_; + byte_buffer << static_cast(fixed_datums_.size()); + byte_buffer << static_cast(variable_datums_.size()); for (auto x : fixed_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void DataPdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> padding1_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void DataPdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> padding1_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datums_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datums_.push_back(x); } variable_datums_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datums_.push_back(x); } } diff --git a/src/libsersi/simulation_management/DataPdu.h b/src/libsersi/simulation_management/DataPdu.h index 625a6ed..578935f 100644 --- a/src/libsersi/simulation_management/DataPdu.h +++ b/src/libsersi/simulation_management/DataPdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.10. Information issued in response to a data query pdu or a set @@ -35,8 +35,8 @@ class DataPdu final : public SimulationManagementFamilyPdu { DataPdu(); ~DataPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management/DataQueryPdu.cpp b/src/libsersi/simulation_management/DataQueryPdu.cpp index 0733b7e..d0531cd 100644 --- a/src/libsersi/simulation_management/DataQueryPdu.cpp +++ b/src/libsersi/simulation_management/DataQueryPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/DataQueryPdu.h" +#include simulation_management/DataQueryPdu.h" namespace dis { DataQueryPdu::DataQueryPdu() @@ -54,40 +54,40 @@ void DataQueryPdu::SetVariableDatums(const std::vector& value) { variable_datums_ = value; } -void DataQueryPdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << time_interval_; - data_stream << static_cast(fixed_datums_.size()); - data_stream << static_cast(variable_datums_.size()); +void DataQueryPdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << time_interval_; + byte_buffer << static_cast(fixed_datums_.size()); + byte_buffer << static_cast(variable_datums_.size()); for (auto x : fixed_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void DataQueryPdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> time_interval_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void DataQueryPdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> time_interval_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datums_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datums_.push_back(x); } variable_datums_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datums_.push_back(x); } } diff --git a/src/libsersi/simulation_management/DataQueryPdu.h b/src/libsersi/simulation_management/DataQueryPdu.h index 4e41484..d2ac92e 100644 --- a/src/libsersi/simulation_management/DataQueryPdu.h +++ b/src/libsersi/simulation_management/DataQueryPdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.8. Request for data from an entity. COMPLETE @@ -34,8 +34,8 @@ class DataQueryPdu final : public SimulationManagementFamilyPdu { DataQueryPdu(); ~DataQueryPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management/EventReportPdu.cpp b/src/libsersi/simulation_management/EventReportPdu.cpp index 2a5b17e..a3d9f2d 100644 --- a/src/libsersi/simulation_management/EventReportPdu.cpp +++ b/src/libsersi/simulation_management/EventReportPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/EventReportPdu.h" +#include simulation_management/EventReportPdu.h" namespace dis { @@ -56,40 +56,40 @@ void EventReportPdu::SetVariableDatums( variable_datums_ = value; } -void EventReportPdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << event_type_; - data_stream << padding1_; - data_stream << static_cast(fixed_datums_.size()); - data_stream << static_cast(variable_datums_.size()); +void EventReportPdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << event_type_; + byte_buffer << padding1_; + byte_buffer << static_cast(fixed_datums_.size()); + byte_buffer << static_cast(variable_datums_.size()); for (auto x : fixed_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void EventReportPdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> event_type_; - data_stream >> padding1_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void EventReportPdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> event_type_; + byte_buffer >> padding1_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datums_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datums_.push_back(x); } variable_datums_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datums_.push_back(x); } } diff --git a/src/libsersi/simulation_management/EventReportPdu.h b/src/libsersi/simulation_management/EventReportPdu.h index 2b68884..7d1f350 100644 --- a/src/libsersi/simulation_management/EventReportPdu.h +++ b/src/libsersi/simulation_management/EventReportPdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.11. Reports occurance of a significant event to the simulation @@ -35,8 +35,8 @@ class EventReportPdu final : public SimulationManagementFamilyPdu { EventReportPdu(); ~EventReportPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetEventType() const; void SetEventType(uint32_t value); diff --git a/src/libsersi/simulation_management/RemoveEntityPdu.cpp b/src/libsersi/simulation_management/RemoveEntityPdu.cpp index 5697cd3..f6794ec 100644 --- a/src/libsersi/simulation_management/RemoveEntityPdu.cpp +++ b/src/libsersi/simulation_management/RemoveEntityPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/RemoveEntityPdu.h" +#include simulation_management/RemoveEntityPdu.h" namespace dis { RemoveEntityPdu::RemoveEntityPdu() : request_id_(0) { SetPduType(12); } @@ -7,14 +7,14 @@ uint32_t RemoveEntityPdu::GetRequestId() const { return request_id_; } void RemoveEntityPdu::SetRequestId(uint32_t value) { request_id_ = value; } -void RemoveEntityPdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << request_id_; +void RemoveEntityPdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; } -void RemoveEntityPdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; +void RemoveEntityPdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; } bool RemoveEntityPdu::operator==(const RemoveEntityPdu& rhs) const { diff --git a/src/libsersi/simulation_management/RemoveEntityPdu.h b/src/libsersi/simulation_management/RemoveEntityPdu.h index 0c09a96..7e3e527 100644 --- a/src/libsersi/simulation_management/RemoveEntityPdu.h +++ b/src/libsersi/simulation_management/RemoveEntityPdu.h @@ -1,7 +1,7 @@ #pragma once -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.2. Remove an entity. COMPLETE @@ -15,8 +15,8 @@ class RemoveEntityPdu final : public SimulationManagementFamilyPdu { RemoveEntityPdu(); ~RemoveEntityPdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management/SetDataPdu.cpp b/src/libsersi/simulation_management/SetDataPdu.cpp index 2304b1c..755b77c 100644 --- a/src/libsersi/simulation_management/SetDataPdu.cpp +++ b/src/libsersi/simulation_management/SetDataPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/SetDataPdu.h" +#include simulation_management/SetDataPdu.h" namespace dis { SetDataPdu::SetDataPdu() @@ -52,40 +52,40 @@ void SetDataPdu::SetVariableDatums(const std::vector& value) { variable_datums_ = value; } -void SetDataPdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << padding1_; - data_stream << static_cast(fixed_datums_.size()); - data_stream << static_cast(variable_datums_.size()); +void SetDataPdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << padding1_; + byte_buffer << static_cast(fixed_datums_.size()); + byte_buffer << static_cast(variable_datums_.size()); for (auto x : fixed_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datums_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void SetDataPdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> padding1_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void SetDataPdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> padding1_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datums_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datums_.push_back(x); } variable_datums_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datums_.push_back(x); } } diff --git a/src/libsersi/simulation_management/SetDataPdu.h b/src/libsersi/simulation_management/SetDataPdu.h index c9f4b58..74370bb 100644 --- a/src/libsersi/simulation_management/SetDataPdu.h +++ b/src/libsersi/simulation_management/SetDataPdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6.9. Change state information with the data contained in this. @@ -35,8 +35,8 @@ class SetDataPdu final : public SimulationManagementFamilyPdu { SetDataPdu(); ~SetDataPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management/SimulationManagementFamilyPdu.cpp b/src/libsersi/simulation_management/SimulationManagementFamilyPdu.cpp index d4cde46..6f49c6f 100644 --- a/src/libsersi/simulation_management/SimulationManagementFamilyPdu.cpp +++ b/src/libsersi/simulation_management/SimulationManagementFamilyPdu.cpp @@ -1,10 +1,6 @@ -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" +#include simulation_management/SimulationManagementFamilyPdu.h" namespace dis { -SimulationManagementFamilyPdu::SimulationManagementFamilyPdu() { - SetProtocolFamily(5); -} - EntityID& SimulationManagementFamilyPdu::GetOriginatingEntityId() { return originating_entity_id_; } @@ -31,16 +27,16 @@ void SimulationManagementFamilyPdu::SetReceivingEntityId( receiving_entity_id_ = value; } -void SimulationManagementFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); - originating_entity_id_.Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); +void SimulationManagementFamilyPdu::Marshal(ByteBuffer& byte_buffer) const { + Pdu::Marshal(byte_buffer); + originating_entity_id_.Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); } -void SimulationManagementFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); - originating_entity_id_.Unmarshal(data_stream); - receiving_entity_id_.Unmarshal(data_stream); +void SimulationManagementFamilyPdu::Unmarshal(ByteBuffer& byte_buffer) { + Pdu::Unmarshal(byte_buffer); + originating_entity_id_.Unmarshal(byte_buffer); + receiving_entity_id_.Unmarshal(byte_buffer); } bool SimulationManagementFamilyPdu::operator==( diff --git a/src/libsersi/simulation_management/SimulationManagementFamilyPdu.h b/src/libsersi/simulation_management/SimulationManagementFamilyPdu.h index b033293..c904832 100644 --- a/src/libsersi/simulation_management/SimulationManagementFamilyPdu.h +++ b/src/libsersi/simulation_management/SimulationManagementFamilyPdu.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.6. Abstract superclass for PDUs relating to the simulation @@ -19,11 +19,11 @@ class SimulationManagementFamilyPdu : public Pdu { EntityID receiving_entity_id_; public: - SimulationManagementFamilyPdu(); + SimulationManagementFamilyPdu() = default; ~SimulationManagementFamilyPdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; EntityID& GetOriginatingEntityId(); [[nodiscard]] const EntityID& GetOriginatingEntityId() const; diff --git a/src/libsersi/simulation_management/StartResumePdu.cpp b/src/libsersi/simulation_management/StartResumePdu.cpp index 00846f8..5b65187 100644 --- a/src/libsersi/simulation_management/StartResumePdu.cpp +++ b/src/libsersi/simulation_management/StartResumePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/StartResumePdu.h" +#include simulation_management/StartResumePdu.h" namespace dis { StartResumePdu::StartResumePdu() : request_id_(0) { SetPduType(13); } @@ -27,18 +27,18 @@ uint32_t StartResumePdu::GetRequestId() const { return request_id_; } void StartResumePdu::SetRequestId(uint32_t value) { request_id_ = value; } -void StartResumePdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - real_world_time_.Marshal(data_stream); - simulation_time_.Marshal(data_stream); - data_stream << request_id_; +void StartResumePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + real_world_time_.Marshal(byte_buffer); + simulation_time_.Marshal(byte_buffer); + byte_buffer << request_id_; } -void StartResumePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - real_world_time_.Unmarshal(data_stream); - simulation_time_.Unmarshal(data_stream); - data_stream >> request_id_; +void StartResumePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + real_world_time_.Unmarshal(byte_buffer); + simulation_time_.Unmarshal(byte_buffer); + byte_buffer >> request_id_; } bool StartResumePdu::operator==(const StartResumePdu& rhs) const { diff --git a/src/libsersi/simulation_management/StartResumePdu.h b/src/libsersi/simulation_management/StartResumePdu.h index 8977024..dffaf9b 100644 --- a/src/libsersi/simulation_management/StartResumePdu.h +++ b/src/libsersi/simulation_management/StartResumePdu.h @@ -1,8 +1,8 @@ #pragma once -#include "libsersi/common/ClockTime.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/ClockTime.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.6.3. Start or resume an exercise. COMPLETE @@ -22,8 +22,8 @@ class StartResumePdu final : public SimulationManagementFamilyPdu { StartResumePdu(); ~StartResumePdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; ClockTime& GetRealWorldTime(); [[nodiscard]] const ClockTime& GetRealWorldTime() const; diff --git a/src/libsersi/simulation_management/StopFreezePdu.cpp b/src/libsersi/simulation_management/StopFreezePdu.cpp index 289657d..f997acd 100644 --- a/src/libsersi/simulation_management/StopFreezePdu.cpp +++ b/src/libsersi/simulation_management/StopFreezePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management/StopFreezePdu.h" +#include simulation_management/StopFreezePdu.h" namespace dis { StopFreezePdu::StopFreezePdu() @@ -34,22 +34,22 @@ uint32_t StopFreezePdu::GetRequestId() const { return request_id_; } void StopFreezePdu::SetRequestId(uint32_t value) { request_id_ = value; } -void StopFreezePdu::Marshal(DataStream& data_stream) const { - SimulationManagementFamilyPdu::Marshal(data_stream); - real_world_time_.Marshal(data_stream); - data_stream << reason_; - data_stream << frozen_behavior_; - data_stream << padding1_; - data_stream << request_id_; +void StopFreezePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementFamilyPdu::Marshal(byte_buffer); + real_world_time_.Marshal(byte_buffer); + byte_buffer << reason_; + byte_buffer << frozen_behavior_; + byte_buffer << padding1_; + byte_buffer << request_id_; } -void StopFreezePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementFamilyPdu::Unmarshal(data_stream); - real_world_time_.Unmarshal(data_stream); - data_stream >> reason_; - data_stream >> frozen_behavior_; - data_stream >> padding1_; - data_stream >> request_id_; +void StopFreezePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementFamilyPdu::Unmarshal(byte_buffer); + real_world_time_.Unmarshal(byte_buffer); + byte_buffer >> reason_; + byte_buffer >> frozen_behavior_; + byte_buffer >> padding1_; + byte_buffer >> request_id_; } bool StopFreezePdu::operator==(const StopFreezePdu& rhs) const { diff --git a/src/libsersi/simulation_management/StopFreezePdu.h b/src/libsersi/simulation_management/StopFreezePdu.h index a3ffd17..e2ed6a9 100644 --- a/src/libsersi/simulation_management/StopFreezePdu.h +++ b/src/libsersi/simulation_management/StopFreezePdu.h @@ -1,8 +1,8 @@ #pragma once -#include "libsersi/common/ClockTime.h" -#include "libsersi/simulation_management/SimulationManagementFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/ClockTime.h" +#include simulation_management/SimulationManagementFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.3.4. Stop or freeze an exercise. COMPLETE @@ -29,8 +29,8 @@ class StopFreezePdu final : public SimulationManagementFamilyPdu { StopFreezePdu(); ~StopFreezePdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; ClockTime& GetRealWorldTime(); [[nodiscard]] const ClockTime& GetRealWorldTime() const; diff --git a/src/libsersi/simulation_management_reliable/AcknowledgeReliablePdu.cpp b/src/libsersi/simulation_management_reliable/AcknowledgeReliablePdu.cpp index 3b13808..3a5ad4f 100644 --- a/src/libsersi/simulation_management_reliable/AcknowledgeReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/AcknowledgeReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/AcknowledgeReliablePdu.h" +#include simulation_management_reliable/AcknowledgeReliablePdu.h" namespace dis { AcknowledgeReliablePdu::AcknowledgeReliablePdu() @@ -28,18 +28,18 @@ void AcknowledgeReliablePdu::SetRequestId(uint32_t value) { request_id_ = value; } -void AcknowledgeReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << acknowledge_flag_; - data_stream << response_flag_; - data_stream << request_id_; +void AcknowledgeReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << acknowledge_flag_; + byte_buffer << response_flag_; + byte_buffer << request_id_; } -void AcknowledgeReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> acknowledge_flag_; - data_stream >> response_flag_; - data_stream >> request_id_; +void AcknowledgeReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> acknowledge_flag_; + byte_buffer >> response_flag_; + byte_buffer >> request_id_; } bool AcknowledgeReliablePdu::operator==( diff --git a/src/libsersi/simulation_management_reliable/AcknowledgeReliablePdu.h b/src/libsersi/simulation_management_reliable/AcknowledgeReliablePdu.h index b592437..bcf6918 100644 --- a/src/libsersi/simulation_management_reliable/AcknowledgeReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/AcknowledgeReliablePdu.h @@ -1,7 +1,7 @@ #pragma once -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.5: Ack receipt of a start-resume, stop-freeze, create-entity @@ -23,8 +23,8 @@ class AcknowledgeReliablePdu final AcknowledgeReliablePdu(); ~AcknowledgeReliablePdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint16_t GetAcknowledgeFlag() const; void SetAcknowledgeFlag(uint16_t value); diff --git a/src/libsersi/simulation_management_reliable/ActionRequestReliablePdu.cpp b/src/libsersi/simulation_management_reliable/ActionRequestReliablePdu.cpp index 51fd72c..b9371e7 100644 --- a/src/libsersi/simulation_management_reliable/ActionRequestReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/ActionRequestReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/ActionRequestReliablePdu.h" +#include simulation_management_reliable/ActionRequestReliablePdu.h" namespace dis { ActionRequestReliablePdu::ActionRequestReliablePdu() @@ -82,46 +82,46 @@ void ActionRequestReliablePdu::SetVariableDatumRecords( variable_datum_records_ = value; } -void ActionRequestReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << request_id_; - data_stream << action_id_; - data_stream << static_cast(fixed_datum_records_.size()); - data_stream << static_cast(variable_datum_records_.size()); +void ActionRequestReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << request_id_; + byte_buffer << action_id_; + byte_buffer << static_cast(fixed_datum_records_.size()); + byte_buffer << static_cast(variable_datum_records_.size()); for (auto x : fixed_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ActionRequestReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> request_id_; - data_stream >> action_id_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void ActionRequestReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> request_id_; + byte_buffer >> action_id_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datum_records_.push_back(x); } variable_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datum_records_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/ActionRequestReliablePdu.h b/src/libsersi/simulation_management_reliable/ActionRequestReliablePdu.h index fdad060..867e41f 100644 --- a/src/libsersi/simulation_management_reliable/ActionRequestReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/ActionRequestReliablePdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.6: request from a simulation manager to a managed entity to @@ -45,8 +45,8 @@ class ActionRequestReliablePdu final ActionRequestReliablePdu(); ~ActionRequestReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint8_t GetRequiredReliabilityService() const; void SetRequiredReliabilityService(uint8_t value); diff --git a/src/libsersi/simulation_management_reliable/ActionResponseReliablePdu.cpp b/src/libsersi/simulation_management_reliable/ActionResponseReliablePdu.cpp index ac4da60..5015a17 100644 --- a/src/libsersi/simulation_management_reliable/ActionResponseReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/ActionResponseReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/ActionResponseReliablePdu.h" +#include simulation_management_reliable/ActionResponseReliablePdu.h" namespace dis { ActionResponseReliablePdu::ActionResponseReliablePdu() @@ -65,40 +65,40 @@ void ActionResponseReliablePdu::SetVariableDatumRecords( variable_datum_records_ = value; } -void ActionResponseReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << response_status_; - data_stream << static_cast(fixed_datum_records_.size()); - data_stream << static_cast(variable_datum_records_.size()); +void ActionResponseReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << response_status_; + byte_buffer << static_cast(fixed_datum_records_.size()); + byte_buffer << static_cast(variable_datum_records_.size()); for (auto x : fixed_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ActionResponseReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> response_status_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void ActionResponseReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> response_status_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datum_records_.push_back(x); } variable_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datum_records_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/ActionResponseReliablePdu.h b/src/libsersi/simulation_management_reliable/ActionResponseReliablePdu.h index f8d9028..52b3c31 100644 --- a/src/libsersi/simulation_management_reliable/ActionResponseReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/ActionResponseReliablePdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.7: Response from an entity to an action request PDU. COMPLETE @@ -35,8 +35,8 @@ class ActionResponseReliablePdu final ActionResponseReliablePdu(); ~ActionResponseReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management_reliable/CMakeLists.txt b/src/libsersi/simulation_management_reliable/CMakeLists.txt index b985f85..d55163e 100644 --- a/src/libsersi/simulation_management_reliable/CMakeLists.txt +++ b/src/libsersi/simulation_management_reliable/CMakeLists.txt @@ -34,7 +34,7 @@ set(simulation_management_reliable_src StopFreezeReliablePdu.cpp ) -target_sources(sersi PRIVATE ${simulation_management_reliable_src}) +target_sources(${PROJECT_NAME} PRIVATE ${simulation_management_reliable_src}) install(FILES ${simulation_management_reliable_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/simulation_management_reliable diff --git a/src/libsersi/simulation_management_reliable/CommentReliablePdu.cpp b/src/libsersi/simulation_management_reliable/CommentReliablePdu.cpp index 9a76939..5271241 100644 --- a/src/libsersi/simulation_management_reliable/CommentReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/CommentReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/CommentReliablePdu.h" +#include simulation_management_reliable/CommentReliablePdu.h" namespace dis { CommentReliablePdu::CommentReliablePdu() @@ -47,36 +47,36 @@ void CommentReliablePdu::SetVariableDatumRecords( variable_datum_records_ = value; } -void CommentReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << static_cast(fixed_datum_records_.size()); - data_stream << static_cast(variable_datum_records_.size()); +void CommentReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << static_cast(fixed_datum_records_.size()); + byte_buffer << static_cast(variable_datum_records_.size()); for (auto x : fixed_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void CommentReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void CommentReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datum_records_.push_back(x); } variable_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datum_records_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/CommentReliablePdu.h b/src/libsersi/simulation_management_reliable/CommentReliablePdu.h index 3aeef19..93d42e0 100644 --- a/src/libsersi/simulation_management_reliable/CommentReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/CommentReliablePdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.12: Arbitrary messages. Only reliable this time. Neds manual @@ -30,8 +30,8 @@ class CommentReliablePdu final CommentReliablePdu(); ~CommentReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetNumberOfFixedDatumRecords() const; diff --git a/src/libsersi/simulation_management_reliable/CreateEntityReliablePdu.cpp b/src/libsersi/simulation_management_reliable/CreateEntityReliablePdu.cpp index 34f69ed..a850a66 100644 --- a/src/libsersi/simulation_management_reliable/CreateEntityReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/CreateEntityReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/CreateEntityReliablePdu.h" +#include simulation_management_reliable/CreateEntityReliablePdu.h" namespace dis { CreateEntityReliablePdu::CreateEntityReliablePdu() @@ -28,20 +28,20 @@ void CreateEntityReliablePdu::SetRequestId(uint32_t value) { request_id_ = value; } -void CreateEntityReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << request_id_; +void CreateEntityReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << request_id_; } -void CreateEntityReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> request_id_; +void CreateEntityReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> request_id_; } bool CreateEntityReliablePdu::operator==( diff --git a/src/libsersi/simulation_management_reliable/CreateEntityReliablePdu.h b/src/libsersi/simulation_management_reliable/CreateEntityReliablePdu.h index 43f5684..ec4c369 100644 --- a/src/libsersi/simulation_management_reliable/CreateEntityReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/CreateEntityReliablePdu.h @@ -1,7 +1,7 @@ #pragma once -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.1: creation of an entity , reliable. COMPLETE @@ -25,8 +25,8 @@ class CreateEntityReliablePdu final CreateEntityReliablePdu(); ~CreateEntityReliablePdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint8_t GetRequiredReliabilityService() const; void SetRequiredReliabilityService(uint8_t value); diff --git a/src/libsersi/simulation_management_reliable/DataQueryReliablePdu.cpp b/src/libsersi/simulation_management_reliable/DataQueryReliablePdu.cpp index 3bc919c..f828558 100644 --- a/src/libsersi/simulation_management_reliable/DataQueryReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/DataQueryReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/DataQueryReliablePdu.h" +#include simulation_management_reliable/DataQueryReliablePdu.h" namespace dis { DataQueryReliablePdu::DataQueryReliablePdu() @@ -81,46 +81,46 @@ void DataQueryReliablePdu::SetVariableDatumRecords( variable_datum_records_ = value; } -void DataQueryReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << request_id_; - data_stream << time_interval_; - data_stream << static_cast(fixed_datum_records_.size()); - data_stream << static_cast(variable_datum_records_.size()); +void DataQueryReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << request_id_; + byte_buffer << time_interval_; + byte_buffer << static_cast(fixed_datum_records_.size()); + byte_buffer << static_cast(variable_datum_records_.size()); for (auto x : fixed_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void DataQueryReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> request_id_; - data_stream >> time_interval_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void DataQueryReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> request_id_; + byte_buffer >> time_interval_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datum_records_.push_back(x); } variable_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datum_records_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/DataQueryReliablePdu.h b/src/libsersi/simulation_management_reliable/DataQueryReliablePdu.h index 91fd5b4..7e0e821 100644 --- a/src/libsersi/simulation_management_reliable/DataQueryReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/DataQueryReliablePdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.8: request for data from an entity. COMPLETE @@ -44,8 +44,8 @@ class DataQueryReliablePdu final DataQueryReliablePdu(); ~DataQueryReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint8_t GetRequiredReliabilityService() const; void SetRequiredReliabilityService(uint8_t value); diff --git a/src/libsersi/simulation_management_reliable/DataReliablePdu.cpp b/src/libsersi/simulation_management_reliable/DataReliablePdu.cpp index 3924bd8..c1d3b78 100644 --- a/src/libsersi/simulation_management_reliable/DataReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/DataReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/DataReliablePdu.h" +#include simulation_management_reliable/DataReliablePdu.h" namespace dis { DataReliablePdu::DataReliablePdu() @@ -71,44 +71,44 @@ void DataReliablePdu::SetVariableDatumRecords( variable_datum_records_ = value; } -void DataReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << static_cast(fixed_datum_records_.size()); - data_stream << static_cast(variable_datum_records_.size()); +void DataReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << static_cast(fixed_datum_records_.size()); + byte_buffer << static_cast(variable_datum_records_.size()); for (auto x : fixed_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void DataReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void DataReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datum_records_.push_back(x); } variable_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datum_records_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/DataReliablePdu.h b/src/libsersi/simulation_management_reliable/DataReliablePdu.h index 6554b84..1575f09 100644 --- a/src/libsersi/simulation_management_reliable/DataReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/DataReliablePdu.h @@ -3,10 +3,10 @@ #include #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.10: issued in response to a data query R or set dataR pdu. @@ -43,8 +43,8 @@ class DataReliablePdu final DataReliablePdu(); ~DataReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management_reliable/EventReportReliablePdu.cpp b/src/libsersi/simulation_management_reliable/EventReportReliablePdu.cpp index 78d9665..46b7de5 100644 --- a/src/libsersi/simulation_management_reliable/EventReportReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/EventReportReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/EventReportReliablePdu.h" +#include simulation_management_reliable/EventReportReliablePdu.h" namespace dis { EventReportReliablePdu::EventReportReliablePdu() @@ -60,40 +60,40 @@ void EventReportReliablePdu::SetVariableDatumRecords( variable_datum_records_ = value; } -void EventReportReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << event_type_; - data_stream << pad1_; - data_stream << static_cast(fixed_datum_records_.size()); - data_stream << static_cast(variable_datum_records_.size()); +void EventReportReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << event_type_; + byte_buffer << pad1_; + byte_buffer << static_cast(fixed_datum_records_.size()); + byte_buffer << static_cast(variable_datum_records_.size()); for (auto x : fixed_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void EventReportReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> event_type_; - data_stream >> pad1_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void EventReportReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> event_type_; + byte_buffer >> pad1_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datum_records_.push_back(x); } variable_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datum_records_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/EventReportReliablePdu.h b/src/libsersi/simulation_management_reliable/EventReportReliablePdu.h index baf2593..ca9cd18 100644 --- a/src/libsersi/simulation_management_reliable/EventReportReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/EventReportReliablePdu.h @@ -2,10 +2,10 @@ #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.11: reports the occurance of a significatnt event to the @@ -37,8 +37,8 @@ class EventReportReliablePdu final EventReportReliablePdu(); ~EventReportReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint16_t GetEventType() const; void SetEventType(uint16_t value); diff --git a/src/libsersi/simulation_management_reliable/RecordQueryReliablePdu.cpp b/src/libsersi/simulation_management_reliable/RecordQueryReliablePdu.cpp index 270e2c1..b1ccd72 100644 --- a/src/libsersi/simulation_management_reliable/RecordQueryReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/RecordQueryReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/RecordQueryReliablePdu.h" +#include simulation_management_reliable/RecordQueryReliablePdu.h" namespace dis { RecordQueryReliablePdu::RecordQueryReliablePdu() @@ -62,35 +62,35 @@ void RecordQueryReliablePdu::SetRecordIDs(const std::vector& value) { record_ids_ = value; } -void RecordQueryReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << event_type_; - data_stream << time_; - data_stream << static_cast(record_ids_.size()); +void RecordQueryReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << event_type_; + byte_buffer << time_; + byte_buffer << static_cast(record_ids_.size()); for (unsigned int x : record_ids_) { - data_stream << x; + byte_buffer << x; } } -void RecordQueryReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> event_type_; - data_stream >> time_; - data_stream >> number_of_records_; +void RecordQueryReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> event_type_; + byte_buffer >> time_; + byte_buffer >> number_of_records_; record_ids_.clear(); for (std::size_t idx = 0; idx < number_of_records_; idx++) { uint32_t x; - data_stream >> x; + byte_buffer >> x; record_ids_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/RecordQueryReliablePdu.h b/src/libsersi/simulation_management_reliable/RecordQueryReliablePdu.h index c85644a..fa6d668 100644 --- a/src/libsersi/simulation_management_reliable/RecordQueryReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/RecordQueryReliablePdu.h @@ -2,8 +2,8 @@ #include -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.13: A request for one or more records of data from an entity. @@ -40,8 +40,8 @@ class RecordQueryReliablePdu final RecordQueryReliablePdu(); ~RecordQueryReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management_reliable/RemoveEntityReliablePdu.cpp b/src/libsersi/simulation_management_reliable/RemoveEntityReliablePdu.cpp index f71eb83..169b797 100644 --- a/src/libsersi/simulation_management_reliable/RemoveEntityReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/RemoveEntityReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/RemoveEntityReliablePdu.h" +#include simulation_management_reliable/RemoveEntityReliablePdu.h" namespace dis { RemoveEntityReliablePdu::RemoveEntityReliablePdu() @@ -28,20 +28,20 @@ void RemoveEntityReliablePdu::SetRequestId(uint32_t value) { request_id_ = value; } -void RemoveEntityReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << request_id_; +void RemoveEntityReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << request_id_; } -void RemoveEntityReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> request_id_; +void RemoveEntityReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> request_id_; } bool RemoveEntityReliablePdu::operator==( diff --git a/src/libsersi/simulation_management_reliable/RemoveEntityReliablePdu.h b/src/libsersi/simulation_management_reliable/RemoveEntityReliablePdu.h index b06f4f2..1a2e906 100644 --- a/src/libsersi/simulation_management_reliable/RemoveEntityReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/RemoveEntityReliablePdu.h @@ -2,8 +2,8 @@ #include -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.2: Removal of an entity , reliable. COMPLETE @@ -27,8 +27,8 @@ class RemoveEntityReliablePdu final RemoveEntityReliablePdu(); ~RemoveEntityReliablePdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint8_t GetRequiredReliabilityService() const; void SetRequiredReliabilityService(uint8_t value); diff --git a/src/libsersi/simulation_management_reliable/SetDataReliablePdu.cpp b/src/libsersi/simulation_management_reliable/SetDataReliablePdu.cpp index ff92dfe..2a7ad9c 100644 --- a/src/libsersi/simulation_management_reliable/SetDataReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/SetDataReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/SetDataReliablePdu.h" +#include simulation_management_reliable/SetDataReliablePdu.h" namespace dis { SetDataReliablePdu::SetDataReliablePdu() @@ -72,44 +72,44 @@ void SetDataReliablePdu::SetVariableDatumRecords( variable_datum_records_ = value; } -void SetDataReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << request_id_; - data_stream << static_cast(fixed_datum_records_.size()); - data_stream << static_cast(variable_datum_records_.size()); +void SetDataReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << request_id_; + byte_buffer << static_cast(fixed_datum_records_.size()); + byte_buffer << static_cast(variable_datum_records_.size()); for (auto x : fixed_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } for (const auto& x : variable_datum_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void SetDataReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> request_id_; - data_stream >> number_of_fixed_datum_records_; - data_stream >> number_of_variable_datum_records_; +void SetDataReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> request_id_; + byte_buffer >> number_of_fixed_datum_records_; + byte_buffer >> number_of_variable_datum_records_; fixed_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_fixed_datum_records_; idx++) { FixedDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); fixed_datum_records_.push_back(x); } variable_datum_records_.clear(); for (std::size_t idx = 0; idx < number_of_variable_datum_records_; idx++) { VariableDatum x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); variable_datum_records_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/SetDataReliablePdu.h b/src/libsersi/simulation_management_reliable/SetDataReliablePdu.h index 311d162..30c5fd9 100644 --- a/src/libsersi/simulation_management_reliable/SetDataReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/SetDataReliablePdu.h @@ -3,10 +3,10 @@ #include #include -#include "libsersi/common/FixedDatum.h" -#include "libsersi/common/VariableDatum.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/FixedDatum.h" +#include common/VariableDatum.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.9: initializing or chaning internal state information, @@ -44,8 +44,8 @@ class SetDataReliablePdu final SetDataReliablePdu(); ~SetDataReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint8_t GetRequiredReliabilityService() const; void SetRequiredReliabilityService(uint8_t value); diff --git a/src/libsersi/simulation_management_reliable/SetRecordReliablePdu.cpp b/src/libsersi/simulation_management_reliable/SetRecordReliablePdu.cpp index 2664645..15f1873 100644 --- a/src/libsersi/simulation_management_reliable/SetRecordReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/SetRecordReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/SetRecordReliablePdu.h" +#include simulation_management_reliable/SetRecordReliablePdu.h" namespace dis { SetRecordReliablePdu::SetRecordReliablePdu() @@ -48,31 +48,31 @@ void SetRecordReliablePdu::SetRecordSets(const std::vector& value) { record_sets_ = value; } -void SetRecordReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - data_stream << request_id_; - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << static_cast(record_sets_.size()); +void SetRecordReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + byte_buffer << request_id_; + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << static_cast(record_sets_.size()); for (auto x : record_sets_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void SetRecordReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - data_stream >> request_id_; - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> number_of_record_sets_; +void SetRecordReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + byte_buffer >> request_id_; + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> number_of_record_sets_; record_sets_.clear(); for (std::size_t idx = 0; idx < number_of_record_sets_; idx++) { RecordSet x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); record_sets_.push_back(x); } } diff --git a/src/libsersi/simulation_management_reliable/SetRecordReliablePdu.h b/src/libsersi/simulation_management_reliable/SetRecordReliablePdu.h index 826050c..bef6410 100644 --- a/src/libsersi/simulation_management_reliable/SetRecordReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/SetRecordReliablePdu.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/RecordSet.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/RecordSet.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.14: Initializing or changing internal parameter info. @@ -34,8 +34,8 @@ class SetRecordReliablePdu final SetRecordReliablePdu(); ~SetRecordReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; [[nodiscard]] uint32_t GetRequestId() const; void SetRequestId(uint32_t value); diff --git a/src/libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.cpp b/src/libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.cpp index fdfa9eb..dc5becb 100644 --- a/src/libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.cpp +++ b/src/libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.cpp @@ -1,11 +1,6 @@ -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" namespace dis { -SimulationManagementWithReliabilityFamilyPdu:: - SimulationManagementWithReliabilityFamilyPdu() { - SetProtocolFamily(10); -} - EntityID& SimulationManagementWithReliabilityFamilyPdu::GetOriginatingEntityId() { return originating_entity_id_; @@ -36,17 +31,17 @@ void SimulationManagementWithReliabilityFamilyPdu::SetReceivingEntityId( } void SimulationManagementWithReliabilityFamilyPdu::Marshal( - DataStream& data_stream) const { - Pdu::Marshal(data_stream); // Marshal information in superclass first - originating_entity_id_.Marshal(data_stream); - receiving_entity_id_.Marshal(data_stream); + ByteBuffer& byte_buffer) const { + Pdu::Marshal(byte_buffer); // Marshal information in superclass first + originating_entity_id_.Marshal(byte_buffer); + receiving_entity_id_.Marshal(byte_buffer); } void SimulationManagementWithReliabilityFamilyPdu::Unmarshal( - DataStream& data_stream) { - Pdu::Unmarshal(data_stream); // unmarshal information in superclass first - originating_entity_id_.Unmarshal(data_stream); - receiving_entity_id_.Unmarshal(data_stream); + ByteBuffer& byte_buffer) { + Pdu::Unmarshal(byte_buffer); // unmarshal information in superclass first + originating_entity_id_.Unmarshal(byte_buffer); + receiving_entity_id_.Unmarshal(byte_buffer); } bool SimulationManagementWithReliabilityFamilyPdu::operator==( diff --git a/src/libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h b/src/libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h index 658e4b2..635a408 100644 --- a/src/libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h +++ b/src/libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h @@ -2,9 +2,9 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12: Abstract superclass for reliable simulation management PDUs @@ -18,11 +18,11 @@ class SimulationManagementWithReliabilityFamilyPdu : public Pdu { EntityID receiving_entity_id_; public: - SimulationManagementWithReliabilityFamilyPdu(); + SimulationManagementWithReliabilityFamilyPdu() = default; ~SimulationManagementWithReliabilityFamilyPdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; EntityID& GetOriginatingEntityId(); [[nodiscard]] const EntityID& GetOriginatingEntityId() const; diff --git a/src/libsersi/simulation_management_reliable/StartResumeReliablePdu.cpp b/src/libsersi/simulation_management_reliable/StartResumeReliablePdu.cpp index 5e9466c..e4bfd1f 100644 --- a/src/libsersi/simulation_management_reliable/StartResumeReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/StartResumeReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/StartResumeReliablePdu.h" +#include simulation_management_reliable/StartResumeReliablePdu.h" namespace dis { StartResumeReliablePdu::StartResumeReliablePdu() @@ -54,24 +54,24 @@ void StartResumeReliablePdu::SetRequestId(uint32_t value) { request_id_ = value; } -void StartResumeReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - real_world_time_.Marshal(data_stream); - simulation_time_.Marshal(data_stream); - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << pad2_; - data_stream << request_id_; +void StartResumeReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + real_world_time_.Marshal(byte_buffer); + simulation_time_.Marshal(byte_buffer); + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << pad2_; + byte_buffer << request_id_; } -void StartResumeReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - real_world_time_.Unmarshal(data_stream); - simulation_time_.Unmarshal(data_stream); - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> pad2_; - data_stream >> request_id_; +void StartResumeReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + real_world_time_.Unmarshal(byte_buffer); + simulation_time_.Unmarshal(byte_buffer); + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> pad2_; + byte_buffer >> request_id_; } bool StartResumeReliablePdu::operator==( diff --git a/src/libsersi/simulation_management_reliable/StartResumeReliablePdu.h b/src/libsersi/simulation_management_reliable/StartResumeReliablePdu.h index 2ae5ad7..4bc8aa1 100644 --- a/src/libsersi/simulation_management_reliable/StartResumeReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/StartResumeReliablePdu.h @@ -1,8 +1,8 @@ #pragma once -#include "libsersi/common/ClockTime.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/ClockTime.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.3: Start resume simulation, reliable. COMPLETE @@ -32,8 +32,8 @@ class StartResumeReliablePdu final StartResumeReliablePdu(); ~StartResumeReliablePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; ClockTime& GetRealWorldTime(); [[nodiscard]] const ClockTime& GetRealWorldTime() const; diff --git a/src/libsersi/simulation_management_reliable/StopFreezeReliablePdu.cpp b/src/libsersi/simulation_management_reliable/StopFreezeReliablePdu.cpp index 8274c72..7fd5f58 100644 --- a/src/libsersi/simulation_management_reliable/StopFreezeReliablePdu.cpp +++ b/src/libsersi/simulation_management_reliable/StopFreezeReliablePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/simulation_management_reliable/StopFreezeReliablePdu.h" +#include simulation_management_reliable/StopFreezeReliablePdu.h" namespace dis { StopFreezeReliablePdu::StopFreezeReliablePdu() @@ -52,24 +52,24 @@ void StopFreezeReliablePdu::SetRequestId(uint32_t value) { request_id_ = value; } -void StopFreezeReliablePdu::Marshal(DataStream& data_stream) const { - SimulationManagementWithReliabilityFamilyPdu::Marshal(data_stream); - real_world_time_.Marshal(data_stream); - data_stream << reason_; - data_stream << frozen_behavior_; - data_stream << required_reliability_service_; - data_stream << pad1_; - data_stream << request_id_; +void StopFreezeReliablePdu::Marshal(ByteBuffer& byte_buffer) const { + SimulationManagementWithReliabilityFamilyPdu::Marshal(byte_buffer); + real_world_time_.Marshal(byte_buffer); + byte_buffer << reason_; + byte_buffer << frozen_behavior_; + byte_buffer << required_reliability_service_; + byte_buffer << pad1_; + byte_buffer << request_id_; } -void StopFreezeReliablePdu::Unmarshal(DataStream& data_stream) { - SimulationManagementWithReliabilityFamilyPdu::Unmarshal(data_stream); - real_world_time_.Unmarshal(data_stream); - data_stream >> reason_; - data_stream >> frozen_behavior_; - data_stream >> required_reliability_service_; - data_stream >> pad1_; - data_stream >> request_id_; +void StopFreezeReliablePdu::Unmarshal(ByteBuffer& byte_buffer) { + SimulationManagementWithReliabilityFamilyPdu::Unmarshal(byte_buffer); + real_world_time_.Unmarshal(byte_buffer); + byte_buffer >> reason_; + byte_buffer >> frozen_behavior_; + byte_buffer >> required_reliability_service_; + byte_buffer >> pad1_; + byte_buffer >> request_id_; } bool StopFreezeReliablePdu::operator==(const StopFreezeReliablePdu& rhs) const { diff --git a/src/libsersi/simulation_management_reliable/StopFreezeReliablePdu.h b/src/libsersi/simulation_management_reliable/StopFreezeReliablePdu.h index 04c381c..dacd8fa 100644 --- a/src/libsersi/simulation_management_reliable/StopFreezeReliablePdu.h +++ b/src/libsersi/simulation_management_reliable/StopFreezeReliablePdu.h @@ -1,8 +1,8 @@ #pragma once -#include "libsersi/common/ClockTime.h" -#include "libsersi/simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/ClockTime.h" +#include simulation_management_reliable/SimulationManagementWithReliabilityFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.12.4: Stop freeze simulation, reliable. COMPLETE @@ -32,8 +32,8 @@ class StopFreezeReliablePdu final StopFreezeReliablePdu(); ~StopFreezeReliablePdu() final = default; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; ClockTime& GetRealWorldTime(); [[nodiscard]] const ClockTime& GetRealWorldTime() const; diff --git a/src/libsersi/synthetic_environment/ArealObjectStatePdu.cpp b/src/libsersi/synthetic_environment/ArealObjectStatePdu.cpp index 7f5b95d..1774164 100644 --- a/src/libsersi/synthetic_environment/ArealObjectStatePdu.cpp +++ b/src/libsersi/synthetic_environment/ArealObjectStatePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/ArealObjectStatePdu.h" +#include synthetic_environment/ArealObjectStatePdu.h" #include @@ -116,43 +116,43 @@ void ArealObjectStatePdu::SetObjectLocation( object_location_ = value; } -void ArealObjectStatePdu::Marshal(DataStream& data_stream) const { - SyntheticEnvironmentFamilyPdu::Marshal(data_stream); - object_id_.Marshal(data_stream); - referenced_object_id_.Marshal(data_stream); - data_stream << update_number_; - data_stream << force_id_; - data_stream << modifications_; - object_type_.Marshal(data_stream); - data_stream << specific_object_appearance_; - data_stream << general_object_appearance_; - data_stream << static_cast(object_location_.size()); - requester_id_.Marshal(data_stream); - receiving_id_.Marshal(data_stream); +void ArealObjectStatePdu::Marshal(ByteBuffer& byte_buffer) const { + SyntheticEnvironmentFamilyPdu::Marshal(byte_buffer); + object_id_.Marshal(byte_buffer); + referenced_object_id_.Marshal(byte_buffer); + byte_buffer << update_number_; + byte_buffer << force_id_; + byte_buffer << modifications_; + object_type_.Marshal(byte_buffer); + byte_buffer << specific_object_appearance_; + byte_buffer << general_object_appearance_; + byte_buffer << static_cast(object_location_.size()); + requester_id_.Marshal(byte_buffer); + receiving_id_.Marshal(byte_buffer); for (auto x : object_location_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void ArealObjectStatePdu::Unmarshal(DataStream& data_stream) { - SyntheticEnvironmentFamilyPdu::Unmarshal(data_stream); - object_id_.Unmarshal(data_stream); - referenced_object_id_.Unmarshal(data_stream); - data_stream >> update_number_; - data_stream >> force_id_; - data_stream >> modifications_; - object_type_.Unmarshal(data_stream); - data_stream >> specific_object_appearance_; - data_stream >> general_object_appearance_; - data_stream >> number_of_points_; - requester_id_.Unmarshal(data_stream); - receiving_id_.Unmarshal(data_stream); +void ArealObjectStatePdu::Unmarshal(ByteBuffer& byte_buffer) { + SyntheticEnvironmentFamilyPdu::Unmarshal(byte_buffer); + object_id_.Unmarshal(byte_buffer); + referenced_object_id_.Unmarshal(byte_buffer); + byte_buffer >> update_number_; + byte_buffer >> force_id_; + byte_buffer >> modifications_; + object_type_.Unmarshal(byte_buffer); + byte_buffer >> specific_object_appearance_; + byte_buffer >> general_object_appearance_; + byte_buffer >> number_of_points_; + requester_id_.Unmarshal(byte_buffer); + receiving_id_.Unmarshal(byte_buffer); object_location_.clear(); for (std::size_t idx = 0; idx < number_of_points_; idx++) { Vector3Double x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); object_location_.push_back(x); } } diff --git a/src/libsersi/synthetic_environment/ArealObjectStatePdu.h b/src/libsersi/synthetic_environment/ArealObjectStatePdu.h index 56677f5..5358ba4 100644 --- a/src/libsersi/synthetic_environment/ArealObjectStatePdu.h +++ b/src/libsersi/synthetic_environment/ArealObjectStatePdu.h @@ -2,12 +2,12 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/common/SimulationAddress.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include common/SimulationAddress.h" +#include common/Vector3Double.h" +#include synthetic_environment/SyntheticEnvironmentFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.11.5: Information about the addition/modification of an oobject @@ -55,8 +55,8 @@ class ArealObjectStatePdu final : public SyntheticEnvironmentFamilyPdu { ArealObjectStatePdu(); ~ArealObjectStatePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetObjectId(); [[nodiscard]] const EntityID& GetObjectId() const; diff --git a/src/libsersi/synthetic_environment/CMakeLists.txt b/src/libsersi/synthetic_environment/CMakeLists.txt index 0d26cf2..e383c45 100644 --- a/src/libsersi/synthetic_environment/CMakeLists.txt +++ b/src/libsersi/synthetic_environment/CMakeLists.txt @@ -29,7 +29,7 @@ set(synthetic_environment_src PointObjectStatePdu.cpp SyntheticEnvironmentFamilyPdu.cpp ) -target_sources(sersi PRIVATE ${synthetic_environment_src}) +target_sources(${PROJECT_NAME} PRIVATE ${synthetic_environment_src}) install(FILES ${synthetic_environment_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/synthetic_environment diff --git a/src/libsersi/synthetic_environment/Environment.cpp b/src/libsersi/synthetic_environment/Environment.cpp index db1491a..6df72c3 100644 --- a/src/libsersi/synthetic_environment/Environment.cpp +++ b/src/libsersi/synthetic_environment/Environment.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/Environment.h" +#include synthetic_environment/Environment.h" namespace dis { Environment::Environment() @@ -35,22 +35,22 @@ uint8_t Environment::GetPadding2() const { return padding2_; } void Environment::SetPadding2(uint8_t value) { padding2_ = value; } -void Environment::Marshal(DataStream& data_stream) const { - data_stream << environment_type_; - data_stream << length_; - data_stream << index_; - data_stream << padding1_; - data_stream << geometry_; - data_stream << padding2_; +void Environment::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << environment_type_; + byte_buffer << length_; + byte_buffer << index_; + byte_buffer << padding1_; + byte_buffer << geometry_; + byte_buffer << padding2_; } -void Environment::Unmarshal(DataStream& data_stream) { - data_stream >> environment_type_; - data_stream >> length_; - data_stream >> index_; - data_stream >> padding1_; - data_stream >> geometry_; - data_stream >> padding2_; +void Environment::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> environment_type_; + byte_buffer >> length_; + byte_buffer >> index_; + byte_buffer >> padding1_; + byte_buffer >> geometry_; + byte_buffer >> padding2_; } bool Environment::operator==(const Environment& rhs) const { diff --git a/src/libsersi/synthetic_environment/Environment.h b/src/libsersi/synthetic_environment/Environment.h index 4386af0..db7f81a 100644 --- a/src/libsersi/synthetic_environment/Environment.h +++ b/src/libsersi/synthetic_environment/Environment.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.2.40. Information about a geometry, a state associated with a @@ -31,8 +31,8 @@ class Environment { Environment(); ~Environment() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint32_t GetEnvironmentType() const; void SetEnvironmentType(uint32_t value); diff --git a/src/libsersi/synthetic_environment/EnvironmentalProcessPdu.cpp b/src/libsersi/synthetic_environment/EnvironmentalProcessPdu.cpp index f6e1eb8..9cc6b9c 100644 --- a/src/libsersi/synthetic_environment/EnvironmentalProcessPdu.cpp +++ b/src/libsersi/synthetic_environment/EnvironmentalProcessPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/EnvironmentalProcessPdu.h" +#include synthetic_environment/EnvironmentalProcessPdu.h" namespace dis { EnvironmentalProcessPdu::EnvironmentalProcessPdu() @@ -79,33 +79,33 @@ void EnvironmentalProcessPdu::SetEnvironmentRecords( environment_records_ = value; } -void EnvironmentalProcessPdu::Marshal(DataStream& data_stream) const { - SyntheticEnvironmentFamilyPdu::Marshal(data_stream); - environmental_process_id_.Marshal(data_stream); - environment_type_.Marshal(data_stream); - data_stream << model_type_; - data_stream << environment_status_; - data_stream << static_cast(environment_records_.size()); - data_stream << sequence_number_; +void EnvironmentalProcessPdu::Marshal(ByteBuffer& byte_buffer) const { + SyntheticEnvironmentFamilyPdu::Marshal(byte_buffer); + environmental_process_id_.Marshal(byte_buffer); + environment_type_.Marshal(byte_buffer); + byte_buffer << model_type_; + byte_buffer << environment_status_; + byte_buffer << static_cast(environment_records_.size()); + byte_buffer << sequence_number_; for (const auto& x : environment_records_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void EnvironmentalProcessPdu::Unmarshal(DataStream& data_stream) { - SyntheticEnvironmentFamilyPdu::Unmarshal(data_stream); - environmental_process_id_.Unmarshal(data_stream); - environment_type_.Unmarshal(data_stream); - data_stream >> model_type_; - data_stream >> environment_status_; - data_stream >> number_of_environment_records_; - data_stream >> sequence_number_; +void EnvironmentalProcessPdu::Unmarshal(ByteBuffer& byte_buffer) { + SyntheticEnvironmentFamilyPdu::Unmarshal(byte_buffer); + environmental_process_id_.Unmarshal(byte_buffer); + environment_type_.Unmarshal(byte_buffer); + byte_buffer >> model_type_; + byte_buffer >> environment_status_; + byte_buffer >> number_of_environment_records_; + byte_buffer >> sequence_number_; environment_records_.clear(); for (std::size_t idx = 0; idx < number_of_environment_records_; idx++) { Environment x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); environment_records_.push_back(x); } } diff --git a/src/libsersi/synthetic_environment/EnvironmentalProcessPdu.h b/src/libsersi/synthetic_environment/EnvironmentalProcessPdu.h index 806fde4..7b25ea4 100644 --- a/src/libsersi/synthetic_environment/EnvironmentalProcessPdu.h +++ b/src/libsersi/synthetic_environment/EnvironmentalProcessPdu.h @@ -2,11 +2,11 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/synthetic_environment/Environment.h" -#include "libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include synthetic_environment/Environment.h" +#include synthetic_environment/SyntheticEnvironmentFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.11.1: Information about environmental effects and processes. This @@ -41,8 +41,8 @@ class EnvironmentalProcessPdu final : public SyntheticEnvironmentFamilyPdu { EnvironmentalProcessPdu(); ~EnvironmentalProcessPdu() final; - void Marshal(dis::DataStream& data_stream) const final; - void Unmarshal(dis::DataStream& data_stream) final; + Result Marshal(dis::ByteBuffer& byte_buffer) const final; + Result Unmarshal(dis::ByteBuffer& byte_buffer) final; dis::EntityID& GetEnvironmentalProcessId(); [[nodiscard]] const dis::EntityID& GetEnvironmentalProcessId() const; diff --git a/src/libsersi/synthetic_environment/GridAxisRecord.cpp b/src/libsersi/synthetic_environment/GridAxisRecord.cpp index 8ac93c1..36b4226 100644 --- a/src/libsersi/synthetic_environment/GridAxisRecord.cpp +++ b/src/libsersi/synthetic_environment/GridAxisRecord.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/GridAxisRecord.h" +#include synthetic_environment/GridAxisRecord.h" namespace dis { GridAxisRecord::GridAxisRecord() : sample_type_(0), data_representation_(0) {} @@ -17,14 +17,14 @@ void GridAxisRecord::SetDataRepresentation(uint16_t value) { data_representation_ = value; } -void GridAxisRecord::Marshal(DataStream& data_stream) const { - data_stream << sample_type_; - data_stream << data_representation_; +void GridAxisRecord::Marshal(ByteBuffer& byte_buffer) const { + byte_buffer << sample_type_; + byte_buffer << data_representation_; } -void GridAxisRecord::Unmarshal(DataStream& data_stream) { - data_stream >> sample_type_; - data_stream >> data_representation_; +void GridAxisRecord::Unmarshal(ByteBuffer& byte_buffer) { + byte_buffer >> sample_type_; + byte_buffer >> data_representation_; } bool GridAxisRecord::operator==(const GridAxisRecord& rhs) const { diff --git a/src/libsersi/synthetic_environment/GridAxisRecord.h b/src/libsersi/synthetic_environment/GridAxisRecord.h index 8fe43df..68e51f1 100644 --- a/src/libsersi/synthetic_environment/GridAxisRecord.h +++ b/src/libsersi/synthetic_environment/GridAxisRecord.h @@ -1,6 +1,6 @@ #pragma once -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.44: Grid data record, a common abstract superclass for several subtypes @@ -17,8 +17,8 @@ class GridAxisRecord { GridAxisRecord(); virtual ~GridAxisRecord(); - virtual void Marshal(dis::DataStream& data_stream) const; - virtual void Unmarshal(dis::DataStream& data_stream); + virtual Result Marshal(dis::ByteBuffer& byte_buffer) const; + virtual Result Unmarshal(dis::ByteBuffer& byte_buffer); [[nodiscard]] uint16_t GetSampleType() const; void SetSampleType(uint16_t value); diff --git a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation0.cpp b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation0.cpp index 1baece9..2c4affc 100644 --- a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation0.cpp +++ b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation0.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/GridAxisRecordRepresentation0.h" +#include synthetic_environment/GridAxisRecordRepresentation0.h" namespace dis { GridAxisRecordRepresentation0::GridAxisRecordRepresentation0() @@ -26,23 +26,23 @@ void GridAxisRecordRepresentation0::SetDataValues( data_values_ = value; } -void GridAxisRecordRepresentation0::Marshal(DataStream& data_stream) const { - GridAxisRecord::Marshal(data_stream); - data_stream << static_cast(data_values_.size()); +void GridAxisRecordRepresentation0::Marshal(ByteBuffer& byte_buffer) const { + GridAxisRecord::Marshal(byte_buffer); + byte_buffer << static_cast(data_values_.size()); for (const auto& byte : data_values_) { - data_stream << byte; + byte_buffer << byte; } } -void GridAxisRecordRepresentation0::Unmarshal(DataStream& data_stream) { - GridAxisRecord::Unmarshal(data_stream); - data_stream >> number_of_bytes_; +void GridAxisRecordRepresentation0::Unmarshal(ByteBuffer& byte_buffer) { + GridAxisRecord::Unmarshal(byte_buffer); + byte_buffer >> number_of_bytes_; data_values_.clear(); for (auto idx = 0; idx < number_of_bytes_; ++idx) { uint8_t x; - data_stream >> x; + byte_buffer >> x; data_values_.push_back(x); } } diff --git a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation0.h b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation0.h index 46330eb..025a6dc 100644 --- a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation0.h +++ b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation0.h @@ -3,8 +3,8 @@ #include #include -#include "libsersi/synthetic_environment/GridAxisRecord.h" -#include "libsersi/utils/DataStream.h" +#include synthetic_environment/GridAxisRecord.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.44: Grid data record, representation 0 @@ -22,8 +22,8 @@ class GridAxisRecordRepresentation0 : public GridAxisRecord { GridAxisRecordRepresentation0(); ~GridAxisRecordRepresentation0() override; - void Marshal(dis::DataStream& data_stream) const override; - void Unmarshal(dis::DataStream& data_stream) override; + Result Marshal(dis::ByteBuffer& byte_buffer) const override; + Result Unmarshal(dis::ByteBuffer& byte_buffer) override; [[nodiscard]] uint16_t GetNumberOfBytes() const; diff --git a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation1.cpp b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation1.cpp index 6ec0468..70d2f3b 100644 --- a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation1.cpp +++ b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation1.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/GridAxisRecordRepresentation1.h" +#include synthetic_environment/GridAxisRecordRepresentation1.h" namespace dis { GridAxisRecordRepresentation1::GridAxisRecordRepresentation1() @@ -42,27 +42,27 @@ void GridAxisRecordRepresentation1::SetDataValues( data_values_ = value; } -void GridAxisRecordRepresentation1::Marshal(DataStream& data_stream) const { - GridAxisRecord::Marshal(data_stream); - data_stream << field_scale_; - data_stream << field_offset_; - data_stream << static_cast(data_values_.size()); +void GridAxisRecordRepresentation1::Marshal(ByteBuffer& byte_buffer) const { + GridAxisRecord::Marshal(byte_buffer); + byte_buffer << field_scale_; + byte_buffer << field_offset_; + byte_buffer << static_cast(data_values_.size()); for (const auto& x : data_values_) { - data_stream << x; + byte_buffer << x; } } -void GridAxisRecordRepresentation1::Unmarshal(DataStream& data_stream) { - GridAxisRecord::Unmarshal(data_stream); - data_stream >> field_scale_; - data_stream >> field_offset_; - data_stream >> number_of_values_; +void GridAxisRecordRepresentation1::Unmarshal(ByteBuffer& byte_buffer) { + GridAxisRecord::Unmarshal(byte_buffer); + byte_buffer >> field_scale_; + byte_buffer >> field_offset_; + byte_buffer >> number_of_values_; data_values_.clear(); for (std::size_t idx = 0; idx < number_of_values_; idx++) { uint16_t x; - data_stream >> x; + byte_buffer >> x; data_values_.push_back(x); } } diff --git a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation1.h b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation1.h index 889eed6..baaa8f1 100644 --- a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation1.h +++ b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation1.h @@ -2,8 +2,8 @@ #include -#include "libsersi/synthetic_environment/GridAxisRecord.h" -#include "libsersi/utils/DataStream.h" +#include synthetic_environment/GridAxisRecord.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.44: Grid data record, representation 1 @@ -27,8 +27,8 @@ class GridAxisRecordRepresentation1 : public GridAxisRecord { GridAxisRecordRepresentation1(); ~GridAxisRecordRepresentation1() override; - void Marshal(dis::DataStream& data_stream) const override; - void Unmarshal(dis::DataStream& data_stream) override; + Result Marshal(dis::ByteBuffer& byte_buffer) const override; + Result Unmarshal(dis::ByteBuffer& byte_buffer) override; [[nodiscard]] float GetFieldScale() const; void SetFieldScale(float value); diff --git a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation2.cpp b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation2.cpp index 8951c1a..ebcb612 100644 --- a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation2.cpp +++ b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation2.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/GridAxisRecordRepresentation2.h" +#include synthetic_environment/GridAxisRecordRepresentation2.h" namespace dis { GridAxisRecordRepresentation2::GridAxisRecordRepresentation2() @@ -26,23 +26,23 @@ void GridAxisRecordRepresentation2::SetDataValues( data_values_ = value; } -void GridAxisRecordRepresentation2::Marshal(DataStream& data_stream) const { - GridAxisRecord::Marshal(data_stream); - data_stream << static_cast(data_values_.size()); +void GridAxisRecordRepresentation2::Marshal(ByteBuffer& byte_buffer) const { + GridAxisRecord::Marshal(byte_buffer); + byte_buffer << static_cast(data_values_.size()); for (const auto& x : data_values_) { - data_stream << x; + byte_buffer << x; } } -void GridAxisRecordRepresentation2::Unmarshal(DataStream& data_stream) { - GridAxisRecord::Unmarshal(data_stream); - data_stream >> number_of_values_; +void GridAxisRecordRepresentation2::Unmarshal(ByteBuffer& byte_buffer) { + GridAxisRecord::Unmarshal(byte_buffer); + byte_buffer >> number_of_values_; data_values_.clear(); for (std::size_t idx = 0; idx < number_of_values_; idx++) { uint32_t x; - data_stream >> x; + byte_buffer >> x; data_values_.push_back(x); } } diff --git a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation2.h b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation2.h index 35054a3..29cacec 100644 --- a/src/libsersi/synthetic_environment/GridAxisRecordRepresentation2.h +++ b/src/libsersi/synthetic_environment/GridAxisRecordRepresentation2.h @@ -2,8 +2,8 @@ #include -#include "libsersi/synthetic_environment/GridAxisRecord.h" -#include "libsersi/utils/DataStream.h" +#include synthetic_environment/GridAxisRecord.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.44: Grid data record, representation 1 @@ -21,8 +21,8 @@ class GridAxisRecordRepresentation2 : public GridAxisRecord { GridAxisRecordRepresentation2(); ~GridAxisRecordRepresentation2() override; - void Marshal(dis::DataStream& data_stream) const override; - void Unmarshal(dis::DataStream& data_stream) override; + Result Marshal(dis::ByteBuffer& byte_buffer) const override; + Result Unmarshal(dis::ByteBuffer& byte_buffer) override; [[nodiscard]] uint16_t GetNumberOfValues() const; diff --git a/src/libsersi/synthetic_environment/GriddedDataPdu.cpp b/src/libsersi/synthetic_environment/GriddedDataPdu.cpp index acd503e..449934e 100644 --- a/src/libsersi/synthetic_environment/GriddedDataPdu.cpp +++ b/src/libsersi/synthetic_environment/GriddedDataPdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/GriddedDataPdu.h" +#include synthetic_environment/GriddedDataPdu.h" namespace dis { GriddedDataPdu::GriddedDataPdu() @@ -116,49 +116,49 @@ void GriddedDataPdu::SetGridDataList(const std::vector& value) { grid_data_list_ = value; } -void GriddedDataPdu::Marshal(DataStream& data_stream) const { - SyntheticEnvironmentFamilyPdu::Marshal(data_stream); - environmental_simulation_application_id_.Marshal(data_stream); - data_stream << field_number_; - data_stream << pdu_number_; - data_stream << pdu_total_; - data_stream << coordinate_system_; - data_stream << static_cast(grid_data_list_.size()); - data_stream << constant_grid_; - environment_type_.Marshal(data_stream); - orientation_.Marshal(data_stream); - data_stream << sample_time_; - data_stream << total_values_; - data_stream << vector_dimension_; - data_stream << padding1_; - data_stream << padding2_; +void GriddedDataPdu::Marshal(ByteBuffer& byte_buffer) const { + SyntheticEnvironmentFamilyPdu::Marshal(byte_buffer); + environmental_simulation_application_id_.Marshal(byte_buffer); + byte_buffer << field_number_; + byte_buffer << pdu_number_; + byte_buffer << pdu_total_; + byte_buffer << coordinate_system_; + byte_buffer << static_cast(grid_data_list_.size()); + byte_buffer << constant_grid_; + environment_type_.Marshal(byte_buffer); + orientation_.Marshal(byte_buffer); + byte_buffer << sample_time_; + byte_buffer << total_values_; + byte_buffer << vector_dimension_; + byte_buffer << padding1_; + byte_buffer << padding2_; for (const auto& x : grid_data_list_) { - x.Marshal(data_stream); - } -} - -void GriddedDataPdu::Unmarshal(DataStream& data_stream) { - SyntheticEnvironmentFamilyPdu::Unmarshal(data_stream); - environmental_simulation_application_id_.Unmarshal(data_stream); - data_stream >> field_number_; - data_stream >> pdu_number_; - data_stream >> pdu_total_; - data_stream >> coordinate_system_; - data_stream >> number_of_grid_axes_; - data_stream >> constant_grid_; - environment_type_.Unmarshal(data_stream); - orientation_.Unmarshal(data_stream); - data_stream >> sample_time_; - data_stream >> total_values_; - data_stream >> vector_dimension_; - data_stream >> padding1_; - data_stream >> padding2_; + x.Marshal(byte_buffer); + } +} + +void GriddedDataPdu::Unmarshal(ByteBuffer& byte_buffer) { + SyntheticEnvironmentFamilyPdu::Unmarshal(byte_buffer); + environmental_simulation_application_id_.Unmarshal(byte_buffer); + byte_buffer >> field_number_; + byte_buffer >> pdu_number_; + byte_buffer >> pdu_total_; + byte_buffer >> coordinate_system_; + byte_buffer >> number_of_grid_axes_; + byte_buffer >> constant_grid_; + environment_type_.Unmarshal(byte_buffer); + orientation_.Unmarshal(byte_buffer); + byte_buffer >> sample_time_; + byte_buffer >> total_values_; + byte_buffer >> vector_dimension_; + byte_buffer >> padding1_; + byte_buffer >> padding2_; grid_data_list_.clear(); for (std::size_t idx = 0; idx < number_of_grid_axes_; idx++) { GridAxisRecord x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); grid_data_list_.push_back(x); } } diff --git a/src/libsersi/synthetic_environment/GriddedDataPdu.h b/src/libsersi/synthetic_environment/GriddedDataPdu.h index 4b81e34..9537a8e 100644 --- a/src/libsersi/synthetic_environment/GriddedDataPdu.h +++ b/src/libsersi/synthetic_environment/GriddedDataPdu.h @@ -2,12 +2,12 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EntityType.h" -#include "libsersi/common/Orientation.h" -#include "libsersi/synthetic_environment/GridAxisRecord.h" -#include "libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/EntityType.h" +#include common/Orientation.h" +#include synthetic_environment/GridAxisRecord.h" +#include synthetic_environment/SyntheticEnvironmentFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.11.2: Information about globat, spatially varying enviornmental @@ -66,8 +66,8 @@ class GriddedDataPdu final : public SyntheticEnvironmentFamilyPdu { GriddedDataPdu(); ~GriddedDataPdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetEnvironmentalSimulationApplicationId(); [[nodiscard]] const EntityID& GetEnvironmentalSimulationApplicationId() const; diff --git a/src/libsersi/synthetic_environment/LinearObjectStatePdu.cpp b/src/libsersi/synthetic_environment/LinearObjectStatePdu.cpp index 23e9b78..c77f5b9 100644 --- a/src/libsersi/synthetic_environment/LinearObjectStatePdu.cpp +++ b/src/libsersi/synthetic_environment/LinearObjectStatePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/LinearObjectStatePdu.h" +#include synthetic_environment/LinearObjectStatePdu.h" namespace dis { LinearObjectStatePdu::LinearObjectStatePdu() @@ -97,37 +97,37 @@ void LinearObjectStatePdu::SetLinearSegmentParameters( linear_segment_parameters_ = value; } -void LinearObjectStatePdu::Marshal(DataStream& data_stream) const { - SyntheticEnvironmentFamilyPdu::Marshal(data_stream); - object_id_.Marshal(data_stream); - referenced_object_id_.Marshal(data_stream); - data_stream << update_number_; - data_stream << force_id_; - data_stream << static_cast(linear_segment_parameters_.size()); - requester_id_.Marshal(data_stream); - receiving_id_.Marshal(data_stream); - object_type_.Marshal(data_stream); +void LinearObjectStatePdu::Marshal(ByteBuffer& byte_buffer) const { + SyntheticEnvironmentFamilyPdu::Marshal(byte_buffer); + object_id_.Marshal(byte_buffer); + referenced_object_id_.Marshal(byte_buffer); + byte_buffer << update_number_; + byte_buffer << force_id_; + byte_buffer << static_cast(linear_segment_parameters_.size()); + requester_id_.Marshal(byte_buffer); + receiving_id_.Marshal(byte_buffer); + object_type_.Marshal(byte_buffer); for (auto x : linear_segment_parameters_) { - x.Marshal(data_stream); + x.Marshal(byte_buffer); } } -void LinearObjectStatePdu::Unmarshal(DataStream& data_stream) { - SyntheticEnvironmentFamilyPdu::Unmarshal(data_stream); - object_id_.Unmarshal(data_stream); - referenced_object_id_.Unmarshal(data_stream); - data_stream >> update_number_; - data_stream >> force_id_; - data_stream >> number_of_segments_; - requester_id_.Unmarshal(data_stream); - receiving_id_.Unmarshal(data_stream); - object_type_.Unmarshal(data_stream); +void LinearObjectStatePdu::Unmarshal(ByteBuffer& byte_buffer) { + SyntheticEnvironmentFamilyPdu::Unmarshal(byte_buffer); + object_id_.Unmarshal(byte_buffer); + referenced_object_id_.Unmarshal(byte_buffer); + byte_buffer >> update_number_; + byte_buffer >> force_id_; + byte_buffer >> number_of_segments_; + requester_id_.Unmarshal(byte_buffer); + receiving_id_.Unmarshal(byte_buffer); + object_type_.Unmarshal(byte_buffer); linear_segment_parameters_.clear(); for (std::size_t idx = 0; idx < number_of_segments_; idx++) { LinearSegmentParameter x; - x.Unmarshal(data_stream); + x.Unmarshal(byte_buffer); linear_segment_parameters_.push_back(x); } } diff --git a/src/libsersi/synthetic_environment/LinearObjectStatePdu.h b/src/libsersi/synthetic_environment/LinearObjectStatePdu.h index fe9e7ee..5d25cba 100644 --- a/src/libsersi/synthetic_environment/LinearObjectStatePdu.h +++ b/src/libsersi/synthetic_environment/LinearObjectStatePdu.h @@ -2,12 +2,12 @@ #include -#include "libsersi/common/EntityID.h" -#include "libsersi/common/SimulationAddress.h" -#include "libsersi/synthetic_environment/LinearSegmentParameter.h" -#include "libsersi/synthetic_environment/ObjectType.h" -#include "libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/SimulationAddress.h" +#include synthetic_environment/LinearSegmentParameter.h" +#include synthetic_environment/ObjectType.h" +#include synthetic_environment/SyntheticEnvironmentFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.11.4: Information abut the addition or modification of a @@ -47,8 +47,8 @@ class LinearObjectStatePdu final : public SyntheticEnvironmentFamilyPdu { LinearObjectStatePdu(); ~LinearObjectStatePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetObjectId(); [[nodiscard]] const EntityID& GetObjectId() const; diff --git a/src/libsersi/synthetic_environment/LinearSegmentParameter.h b/src/libsersi/synthetic_environment/LinearSegmentParameter.h index a1aed33..d25a474 100644 --- a/src/libsersi/synthetic_environment/LinearSegmentParameter.h +++ b/src/libsersi/synthetic_environment/LinearSegmentParameter.h @@ -1,8 +1,8 @@ #pragma once -#include "libsersi/common/Orientation.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/utils/DataStream.h" +#include common/Orientation.h" +#include common/Vector3Double.h" +#include utils/ByteBuffer.hpp" namespace dis { // 5.2.48: Linear segment parameters @@ -43,8 +43,8 @@ class LinearSegmentParameter { LinearSegmentParameter(); ~LinearSegmentParameter() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetSegmentNumber() const; void SetSegmentNumber(uint8_t value); diff --git a/src/libsersi/synthetic_environment/ObjectType.h b/src/libsersi/synthetic_environment/ObjectType.h index 859aa61..4791431 100644 --- a/src/libsersi/synthetic_environment/ObjectType.h +++ b/src/libsersi/synthetic_environment/ObjectType.h @@ -2,7 +2,7 @@ #include -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { // Identifies type of object. This is a int16_ter version of EntityType that @@ -29,8 +29,8 @@ class ObjectType { ObjectType(); ~ObjectType() = default; - void Marshal(DataStream& data_stream) const; - void Unmarshal(DataStream& data_stream); + Result Marshal(ByteBuffer& byte_buffer) const; + Result Unmarshal(ByteBuffer& byte_buffer); [[nodiscard]] uint8_t GetEntityKind() const; void SetEntityKind(uint8_t value); diff --git a/src/libsersi/synthetic_environment/PointObjectStatePdu.cpp b/src/libsersi/synthetic_environment/PointObjectStatePdu.cpp index 02d618e..5b7be11 100644 --- a/src/libsersi/synthetic_environment/PointObjectStatePdu.cpp +++ b/src/libsersi/synthetic_environment/PointObjectStatePdu.cpp @@ -1,4 +1,4 @@ -#include "libsersi/synthetic_environment/PointObjectStatePdu.h" +#include synthetic_environment/PointObjectStatePdu.h" namespace dis { PointObjectStatePdu::PointObjectStatePdu() @@ -120,36 +120,36 @@ uint32_t PointObjectStatePdu::GetPad2() const { return pad2_; } void PointObjectStatePdu::SetPad2(uint32_t value) { pad2_ = value; } -void PointObjectStatePdu::Marshal(DataStream& data_stream) const { - SyntheticEnvironmentFamilyPdu::Marshal(data_stream); - object_id_.Marshal(data_stream); - referenced_object_id_.Marshal(data_stream); - data_stream << update_number_; - data_stream << force_id_; - data_stream << modifications_; - object_type_.Marshal(data_stream); - object_location_.Marshal(data_stream); - object_orientation_.Marshal(data_stream); - data_stream << object_appearance_; - requester_id_.Marshal(data_stream); - receiving_id_.Marshal(data_stream); - data_stream << pad2_; -} - -void PointObjectStatePdu::Unmarshal(DataStream& data_stream) { - SyntheticEnvironmentFamilyPdu::Unmarshal(data_stream); - object_id_.Unmarshal(data_stream); - referenced_object_id_.Unmarshal(data_stream); - data_stream >> update_number_; - data_stream >> force_id_; - data_stream >> modifications_; - object_type_.Unmarshal(data_stream); - object_location_.Unmarshal(data_stream); - object_orientation_.Unmarshal(data_stream); - data_stream >> object_appearance_; - requester_id_.Unmarshal(data_stream); - receiving_id_.Unmarshal(data_stream); - data_stream >> pad2_; +void PointObjectStatePdu::Marshal(ByteBuffer& byte_buffer) const { + SyntheticEnvironmentFamilyPdu::Marshal(byte_buffer); + object_id_.Marshal(byte_buffer); + referenced_object_id_.Marshal(byte_buffer); + byte_buffer << update_number_; + byte_buffer << force_id_; + byte_buffer << modifications_; + object_type_.Marshal(byte_buffer); + object_location_.Marshal(byte_buffer); + object_orientation_.Marshal(byte_buffer); + byte_buffer << object_appearance_; + requester_id_.Marshal(byte_buffer); + receiving_id_.Marshal(byte_buffer); + byte_buffer << pad2_; +} + +void PointObjectStatePdu::Unmarshal(ByteBuffer& byte_buffer) { + SyntheticEnvironmentFamilyPdu::Unmarshal(byte_buffer); + object_id_.Unmarshal(byte_buffer); + referenced_object_id_.Unmarshal(byte_buffer); + byte_buffer >> update_number_; + byte_buffer >> force_id_; + byte_buffer >> modifications_; + object_type_.Unmarshal(byte_buffer); + object_location_.Unmarshal(byte_buffer); + object_orientation_.Unmarshal(byte_buffer); + byte_buffer >> object_appearance_; + requester_id_.Unmarshal(byte_buffer); + receiving_id_.Unmarshal(byte_buffer); + byte_buffer >> pad2_; } bool PointObjectStatePdu::operator==(const PointObjectStatePdu& rhs) const { diff --git a/src/libsersi/synthetic_environment/PointObjectStatePdu.h b/src/libsersi/synthetic_environment/PointObjectStatePdu.h index 84e2e80..15c1642 100644 --- a/src/libsersi/synthetic_environment/PointObjectStatePdu.h +++ b/src/libsersi/synthetic_environment/PointObjectStatePdu.h @@ -1,12 +1,12 @@ #pragma once -#include "libsersi/common/EntityID.h" -#include "libsersi/common/Orientation.h" -#include "libsersi/common/SimulationAddress.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/synthetic_environment/ObjectType.h" -#include "libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h" -#include "libsersi/utils/DataStream.h" +#include common/EntityID.h" +#include common/Orientation.h" +#include common/SimulationAddress.h" +#include common/Vector3Double.h" +#include synthetic_environment/ObjectType.h" +#include synthetic_environment/SyntheticEnvironmentFamilyPdu.h" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.11.3: Inormation abut the addition or modification of a synthecic @@ -55,8 +55,8 @@ class PointObjectStatePdu final : public SyntheticEnvironmentFamilyPdu { PointObjectStatePdu(); ~PointObjectStatePdu() final; - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; + Result Marshal(ByteBuffer& byte_buffer) const final; + Result Unmarshal(ByteBuffer& byte_buffer) final; EntityID& GetObjectId(); [[nodiscard]] const EntityID& GetObjectId() const; diff --git a/src/libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.cpp b/src/libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.cpp index 6cbb778..3c19aa8 100644 --- a/src/libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.cpp +++ b/src/libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.cpp @@ -1,16 +1,12 @@ -#include "libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h" +#include synthetic_environment/SyntheticEnvironmentFamilyPdu.h" namespace dis { -SyntheticEnvironmentFamilyPdu::SyntheticEnvironmentFamilyPdu() { - SetProtocolFamily(9); +void SyntheticEnvironmentFamilyPdu::Marshal(ByteBuffer& byte_buffer) const { + Pdu::Marshal(byte_buffer); // Marshal information in superclass first } -void SyntheticEnvironmentFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); // Marshal information in superclass first -} - -void SyntheticEnvironmentFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); // unmarshal information in superclass first +void SyntheticEnvironmentFamilyPdu::Unmarshal(ByteBuffer& byte_buffer) { + Pdu::Unmarshal(byte_buffer); // unmarshal information in superclass first } bool SyntheticEnvironmentFamilyPdu::operator==( diff --git a/src/libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h b/src/libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h index 99e6809..01c6fbc 100644 --- a/src/libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h +++ b/src/libsersi/synthetic_environment/SyntheticEnvironmentFamilyPdu.h @@ -2,19 +2,19 @@ #include -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" namespace dis { // Section 5.3.11: Abstract superclass for synthetic environment PDUs class SyntheticEnvironmentFamilyPdu : public Pdu { public: - SyntheticEnvironmentFamilyPdu(); + SyntheticEnvironmentFamilyPdu() = default; ~SyntheticEnvironmentFamilyPdu() override = default; - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; + Result Marshal(ByteBuffer& byte_buffer) const override; + Result Unmarshal(ByteBuffer& byte_buffer) override; [[nodiscard]] std::size_t GetMarshalledSize() const override; diff --git a/src/libsersi/utils/DataStream.cpp b/src/libsersi/utils/ByteBuffer.cpp similarity index 55% rename from src/libsersi/utils/DataStream.cpp rename to src/libsersi/utils/ByteBuffer.cpp index c645f77..31d5853 100644 --- a/src/libsersi/utils/DataStream.cpp +++ b/src/libsersi/utils/ByteBuffer.cpp @@ -1,63 +1,63 @@ -#include "libsersi/utils/DataStream.h" +#include utils/ByteBuffer.hpp" namespace dis { -DataStream::DataStream(Endian stream) +ByteBuffer::ByteBuffer(Endian stream) : read_pos_(0), write_pos_(0), stream_endian_(stream), - machine_endian_(kLittle) { + machine_endian_(Endian::kLittle) { int32_t one(1); char e = (reinterpret_cast(&one))[0]; if (e == static_cast(1)) { - machine_endian_ = kLittle; + machine_endian_ = Endian::kLittle; } else { - machine_endian_ = kBig; + machine_endian_ = Endian::kBig; } } -DataStream::DataStream(const char* buffer, std::size_t length, Endian stream) +ByteBuffer::ByteBuffer(const char* buffer, std::size_t length, Endian stream) : read_pos_(0), write_pos_(0), stream_endian_(stream), - machine_endian_(kLittle) { + machine_endian_(Endian::kLittle) { int32_t one(1); char e = (reinterpret_cast(&one))[0]; if (e == static_cast(1)) { - machine_endian_ = kLittle; + machine_endian_ = Endian::kLittle; } else { - machine_endian_ = kBig; + machine_endian_ = Endian::kBig; } SetStream(buffer, length, stream); } -Endian DataStream::GetStreamEndian() const { return stream_endian_; } +Endian ByteBuffer::GetStreamEndian() const { return stream_endian_; } -Endian DataStream::GetMachineEndian() const { return machine_endian_; } +Endian ByteBuffer::GetMachineEndian() const { return machine_endian_; } -std::size_t DataStream::GetWritePos() const { return write_pos_; } +std::size_t ByteBuffer::GetWritePos() const { return write_pos_; } -std::size_t DataStream::GetReadPos() const { return read_pos_; } +std::size_t ByteBuffer::GetReadPos() const { return read_pos_; } -std::size_t DataStream::Size() const { return buffer_.size(); } +std::size_t ByteBuffer::Size() const { return buffer_.size(); } -void DataStream::Clear() { +void ByteBuffer::Clear() { write_pos_ = 0; read_pos_ = 0; buffer_.clear(); } -bool DataStream::Empty() const { return buffer_.empty(); } +bool ByteBuffer::Empty() const { return buffer_.empty(); } -const char& DataStream::operator[](uint32_t offset) const { +const char& ByteBuffer::operator[](uint32_t offset) const { return buffer_[read_pos_ + offset]; } // currently copies the source data. -void DataStream::SetStream(const char* buffer, std::size_t length, +void ByteBuffer::SetStream(const char* buffer, std::size_t length, Endian order) { // reassign the endian stream_endian_ = order; @@ -77,7 +77,7 @@ void DataStream::SetStream(const char* buffer, std::size_t length, } } -void DataStream::DoFlip(char* buf, std::size_t bufsize) { +void ByteBuffer::DoFlip(char* buf, std::size_t bufsize) { if (machine_endian_ == stream_endian_ || bufsize < 2) { return; } @@ -98,7 +98,7 @@ void DataStream::DoFlip(char* buf, std::size_t bufsize) { } } -void DataStream::DoWrite(const char* buf, std::size_t bufsize) { +void ByteBuffer::DoWrite(const char* buf, std::size_t bufsize) { for (uint32_t i = 0; i < bufsize; ++i) { // ignores the write_pos_ value currently, // this should allow for values to always be appended to the end of the @@ -107,110 +107,110 @@ void DataStream::DoWrite(const char* buf, std::size_t bufsize) { } } -void DataStream::DoRead(char* ch, std::size_t bufsize) { +void ByteBuffer::DoRead(char* ch, std::size_t bufsize) { for (uint32_t i = 0; i < bufsize; i++) { ch[i] = buffer_.at(read_pos_ + i); } } // write stuff -DataStream& DataStream::operator<<(char c) { +ByteBuffer& ByteBuffer::operator<<(char c) { WriteAlgorithm(c); return *this; } -DataStream& DataStream::operator<<(uint8_t c) { +ByteBuffer& ByteBuffer::operator<<(uint8_t c) { WriteAlgorithm(c); return *this; } -DataStream& DataStream::operator<<(float f) { +ByteBuffer& ByteBuffer::operator<<(float f) { WriteAlgorithm(f); return *this; } -DataStream& DataStream::operator<<(double d) { +ByteBuffer& ByteBuffer::operator<<(double d) { WriteAlgorithm(d); return *this; } -DataStream& DataStream::operator<<(int d) { +ByteBuffer& ByteBuffer::operator<<(int d) { WriteAlgorithm(d); return *this; } -DataStream& DataStream::operator<<(uint32_t d) { +ByteBuffer& ByteBuffer::operator<<(uint32_t d) { WriteAlgorithm(d); return *this; } -DataStream& DataStream::operator<<(int64_t d) { +ByteBuffer& ByteBuffer::operator<<(int64_t d) { WriteAlgorithm(d); return *this; } -DataStream& DataStream::operator<<(uint64_t d) { +ByteBuffer& ByteBuffer::operator<<(uint64_t d) { WriteAlgorithm(d); return *this; } -DataStream& DataStream::operator<<(uint16_t d) { +ByteBuffer& ByteBuffer::operator<<(uint16_t d) { WriteAlgorithm(d); return *this; } -DataStream& DataStream::operator<<(int16_t d) { +ByteBuffer& ByteBuffer::operator<<(int16_t d) { WriteAlgorithm(d); return *this; } // read stuff -DataStream& DataStream::operator>>(char& c) { +ByteBuffer& ByteBuffer::operator>>(char& c) { ReadAlgorithm(c); return *this; } -DataStream& DataStream::operator>>(uint8_t& c) { +ByteBuffer& ByteBuffer::operator>>(uint8_t& c) { ReadAlgorithm(c); return *this; } -DataStream& DataStream::operator>>(float& f) { +ByteBuffer& ByteBuffer::operator>>(float& f) { ReadAlgorithm(f); return *this; } -DataStream& DataStream::operator>>(double& d) { +ByteBuffer& ByteBuffer::operator>>(double& d) { ReadAlgorithm(d); return *this; } -DataStream& DataStream::operator>>(int& d) { +ByteBuffer& ByteBuffer::operator>>(int& d) { ReadAlgorithm(d); return *this; } -DataStream& DataStream::operator>>(uint32_t& d) { +ByteBuffer& ByteBuffer::operator>>(uint32_t& d) { ReadAlgorithm(d); return *this; } -DataStream& DataStream::operator>>(int64_t& d) { +ByteBuffer& ByteBuffer::operator>>(int64_t& d) { ReadAlgorithm(d); return *this; } -DataStream& DataStream::operator>>(uint64_t& d) { +ByteBuffer& ByteBuffer::operator>>(uint64_t& d) { ReadAlgorithm(d); return *this; } -DataStream& DataStream::operator>>(uint16_t& d) { +ByteBuffer& ByteBuffer::operator>>(uint16_t& d) { ReadAlgorithm(d); return *this; } -DataStream& DataStream::operator>>(int16_t& d) { +ByteBuffer& ByteBuffer::operator>>(int16_t& d) { ReadAlgorithm(d); return *this; } diff --git a/src/libsersi/utils/CMakeLists.txt b/src/libsersi/utils/CMakeLists.txt index baef737..7f89737 100644 --- a/src/libsersi/utils/CMakeLists.txt +++ b/src/libsersi/utils/CMakeLists.txt @@ -1,28 +1,10 @@ -# Create list of all headers -set(utils_hdr - Conversion.h - DataStream.h - Endian.h - IBufferProcessor.h - IncomingMessage.h - IPacketProcessor.h - IPduBank.h - Masks.h - PacketFactory.h - PduBank.h - PduType.h -) - # Create list of all source files set(utils_src Conversion.cpp - DataStream.cpp + ByteBuffer.cpp IncomingMessage.cpp PacketFactory.cpp PduBank.cpp ) -target_sources(sersi PRIVATE ${utils_src}) - -install(FILES ${utils_hdr} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/utils) +target_sources(${PROJECT_NAME} PRIVATE ${utils_src}) diff --git a/src/libsersi/utils/Conversion.cpp b/src/libsersi/utils/Conversion.cpp index ce2ec94..4efddb0 100644 --- a/src/libsersi/utils/Conversion.cpp +++ b/src/libsersi/utils/Conversion.cpp @@ -1,6 +1,6 @@ -#include "libsersi/utils/Conversion.h" +#include utils/Conversion.h" -#include "libsersi/utils/Masks.h" +#include utils/Masks.h" namespace dis { diff --git a/src/libsersi/utils/Endian.h b/src/libsersi/utils/Endian.h deleted file mode 100644 index b09ae7d..0000000 --- a/src/libsersi/utils/Endian.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef LIBSERSI_UTILS_ENDIAN_H_ -#define LIBSERSI_UTILS_ENDIAN_H_ - -namespace dis { -/// the order of bytes that are on the left -enum Endian { - kLittle = 1, - kBig = 0, -}; - -} // namespace dis - -#endif // LIBSERSI_UTILS_ENDIAN_H_ diff --git a/src/libsersi/utils/IncomingMessage.cpp b/src/libsersi/utils/IncomingMessage.cpp index c58ad7d..5b025ce 100644 --- a/src/libsersi/utils/IncomingMessage.cpp +++ b/src/libsersi/utils/IncomingMessage.cpp @@ -1,12 +1,9 @@ -#include "libsersi/utils/IncomingMessage.h" +#include utils/IncomingMessage.h" -#include - -#include "libsersi/common/Pdu.h" -#include "libsersi/entity_information/EntityStatePdu.h" -#include "libsersi/utils/DataStream.h" -#include "libsersi/utils/IPacketProcessor.h" -#include "libsersi/utils/PduBank.h" +#include common/Pdu.hpp" +#include utils/ByteBuffer.hpp" +#include utils/IPacketProcessor.h" +#include utils/PduBank.h" namespace dis { // the DIS specification says the type is known for all PDUs at the 3rd byte of @@ -22,7 +19,7 @@ void IncomingMessage::Process(const char* buf, uint32_t size, Endian e) { return; } - DataStream ds(buf, size, e); + ByteBuffer ds(buf, size, e); while (ds.GetReadPos() < ds.Size()) { uint8_t pdu_type = ds[kPduTypePosition]; @@ -30,28 +27,32 @@ void IncomingMessage::Process(const char* buf, uint32_t size, Endian e) { } } -void IncomingMessage::SwitchOnType(PduType pdu_type, DataStream& ds) { +void IncomingMessage::SwitchOnType(PduType pdu_type, ByteBuffer& ds) { Pdu* pdu = nullptr; PduBankContainer::iterator container_iter; // first, check if any custom PDU bank registered - auto pdu_bank_it = pdu_banks_.find(pdu_type); + auto pdu_bank_it = pdu_banks_.find(static_cast(pdu_type)); if (pdu_bank_it != pdu_banks_.end()) { - pdu = pdu_bank_it->second->GetStaticPDU(pdu_type, ds); + pdu = pdu_bank_it->second->GetStaticPDU(static_cast(pdu_type), ds); } else { pdu = PduBank::GetStaticPDU(pdu_type); } // if valid pdu point, and at least 1 processor - if ((pdu != nullptr) && (processors_.count(pdu_type) > 0)) { - pdu->Unmarshal(ds); - - // assumes the location in the buffer is the packet id. - typedef std::pair - RangePair; - RangePair rangepair = processors_.equal_range(pdu_type); + if ((pdu != nullptr) && + (processors_.count(static_cast(pdu_type)) > 0)) { + auto ret = pdu->Unmarshal(ds); + + if (ret.is_err()) { + // NOOP + } + + using RangePair = std::pair; + RangePair rangepair = + processors_.equal_range(static_cast(pdu_type)); auto processor_iter = rangepair.first; auto processor_end = rangepair.second; while (processor_iter != processor_end) { diff --git a/src/libsersi/utils/PacketFactory.cpp b/src/libsersi/utils/PacketFactory.cpp index aff41e2..74f16ed 100644 --- a/src/libsersi/utils/PacketFactory.cpp +++ b/src/libsersi/utils/PacketFactory.cpp @@ -1,8 +1,8 @@ -#include "libsersi/utils/PacketFactory.h" +#include utils/PacketFactory.h" #include -#include "libsersi/common/Pdu.h" +#include common/Pdu.hpp" namespace dis { Pdu* PacketFactory::CreatePacket(uint8_t id) { diff --git a/src/libsersi/utils/PduBank.cpp b/src/libsersi/utils/PduBank.cpp index a7804b4..89f93eb 100644 --- a/src/libsersi/utils/PduBank.cpp +++ b/src/libsersi/utils/PduBank.cpp @@ -1,35 +1,34 @@ -#include "libsersi/utils/PduBank.h" +#include utils/PduBank.h" -#include "libsersi/distributed_emissions/DesignatorPdu.h" -#include "libsersi/distributed_emissions/ElectromagneticEmissionsPdu.h" -#include "libsersi/entity_information/CollisionPdu.h" -#include "libsersi/entity_information/EntityStatePdu.h" -#include "libsersi/entity_management/AggregateStatePdu.h" -#include "libsersi/entity_management/IsGroupOfPdu.h" -#include "libsersi/entity_management/TransferControlRequestPdu.h" -#include "libsersi/logistics/RepairCompletePdu.h" -#include "libsersi/logistics/RepairResponsePdu.h" -#include "libsersi/logistics/ResupplyOfferPdu.h" -#include "libsersi/logistics/ResupplyReceivedPdu.h" -#include "libsersi/logistics/ServiceRequestPdu.h" -#include "libsersi/radio_communications/IntercomControlPdu.h" -#include "libsersi/radio_communications/IntercomSignalPdu.h" -#include "libsersi/radio_communications/ReceiverPdu.h" -#include "libsersi/radio_communications/SignalPdu.h" -#include "libsersi/radio_communications/TransmitterPdu.h" -#include "libsersi/simulation_management/AcknowledgePdu.h" -#include "libsersi/simulation_management/ActionRequestPdu.h" -#include "libsersi/simulation_management/ActionResponsePdu.h" -#include "libsersi/simulation_management/CommentPdu.h" -#include "libsersi/simulation_management/CreateEntityPdu.h" -#include "libsersi/simulation_management/DataQueryPdu.h" -#include "libsersi/simulation_management/EventReportPdu.h" -#include "libsersi/simulation_management/RemoveEntityPdu.h" -#include "libsersi/simulation_management/SetDataPdu.h" -#include "libsersi/simulation_management/StartResumePdu.h" -#include "libsersi/simulation_management/StopFreezePdu.h" -#include "libsersi/warfare/DetonationPdu.h" -#include "libsersi/warfare/FirePdu.h" +#include distributed_emissions/DesignatorPdu.h" +#include distributed_emissions/ElectromagneticEmissionsPdu.h" +#include entity_information/CollisionPdu.h" +#include entity_information/EntityStatePdu.h" +#include entity_management/AggregateStatePdu.h" +#include entity_management/IsGroupOfPdu.h" +#include entity_management/TransferControlRequestPdu.h" +#include logistics/RepairCompletePdu.h" +#include logistics/RepairResponsePdu.h" +#include logistics/ResupplyOfferPdu.h" +#include logistics/ResupplyReceivedPdu.h" +#include logistics/ServiceRequestPdu.h" +#include radio_communications/IntercomControlPdu.h" +#include radio_communications/IntercomSignalPdu.h" +#include radio_communications/ReceiverPdu.h" +#include radio_communications/SignalPdu.h" +#include radio_communications/TransmitterPdu.h" +#include simulation_management/AcknowledgePdu.h" +#include simulation_management/ActionRequestPdu.h" +#include simulation_management/ActionResponsePdu.h" +#include simulation_management/CommentPdu.h" +#include simulation_management/CreateEntityPdu.h" +#include simulation_management/DataQueryPdu.h" +#include simulation_management/EventReportPdu.h" +#include simulation_management/RemoveEntityPdu.h" +#include simulation_management/SetDataPdu.h" +#include simulation_management/StartResumePdu.h" +#include simulation_management/StopFreezePdu.h" +#include "Warfare.hpp" namespace dis { Pdu* PduBank::GetStaticPDU(PduType pdu_type) { @@ -66,97 +65,97 @@ Pdu* PduBank::GetStaticPDU(PduType pdu_type) { static TransferControlRequestPdu transfer_ownership_pdu; switch (pdu_type) { - case PduType::kEntityState: + case PduType::EntityState: return &entity_state_pdu; break; - case PduType::kFire: + case PduType::Fire: return &fire_pdu; break; - case PduType::kDetonation: + case PduType::Detonation: return &detonation_pdu; break; - case PduType::kCollision: + case PduType::Collision: return &collision_pdu; break; - case PduType::kServiceRequest: + case PduType::ServiceRequest: return &service_request_pdu; break; - case PduType::kResupplyOffer: + case PduType::ResupplyOffer: return &resupply_offer_pdu; break; - case PduType::kResupplyReceived: + case PduType::ResupplyReceived: return &resupply_received_pdu; break; - case PduType::kResupplyCancel: + case PduType::ResupplyCancel: return &resupply_cancel_pdu; break; - case PduType::kRepairComplete: + case PduType::RepairComplete: return &repair_complete_pdu; break; - case PduType::kRepairResponse: + case PduType::RepairResponse: return &repair_response_pdu; break; - case PduType::kCreateEntity: + case PduType::CreateEntity: return &create_entity_pdu; break; - case PduType::kRemoveEntity: + case PduType::RemoveEntity: return &remove_entity_pdu; break; - case PduType::kStartResume: + case PduType::StartResume: return &start_resume_pdu; break; - case PduType::kAcknowledge: + case PduType::Acknowledge: return &acknowledge_pdu; break; - case PduType::kActionRequest: + case PduType::ActionRequest: return &action_request_pdu; break; - case PduType::kActionResponse: + case PduType::ActionResponse: return &action_response_pdu; break; - case PduType::kDataQuery: + case PduType::DataQuery: return &data_query_pdu; break; - case PduType::kSetData: + case PduType::SetData: return &set_data_pdu; break; - case PduType::kEventReport: + case PduType::EventReport: return &event_report_pdu; break; - case PduType::kComment: + case PduType::Comment: return &comment_pdu; break; - case PduType::kStopFreeze: + case PduType::StopFreeze: return &stop_freeze_pdu; break; - case PduType::kElectronicEmmisions: + case PduType::ElectromagneticEmission: return &electromagnetic_emissions_pdu; break; - case PduType::kDesignator: + case PduType::Designator: return &designator_pdu; break; - case PduType::kTransmitter: + case PduType::Transmitter: return &transmitter_pdu; break; - case PduType::kSignal: + case PduType::Signal: return &signal_pdu; break; - case PduType::kReceiver: + case PduType::Receiver: return &receiver_pdu; break; - case PduType::kIntercomSignal: + case PduType::IntercomSignal: return &intercom_signal_pdu; break; - case PduType::kIntercomControl: + case PduType::IntercomControl: return &intercom_control_pdu; break; - case PduType::kAggregateState: + case PduType::AggregateState: return &aggregate_state_pdu; break; - case PduType::kIsGroupOf: + case PduType::IsGroupOf: return &is_group_of_pdu; break; - case PduType::kTransferOwnership: + case PduType::TransferOwnership: return &transfer_ownership_pdu; break; default: diff --git a/src/libsersi/utils/PduType.h b/src/libsersi/utils/PduType.h deleted file mode 100644 index 4c9d640..0000000 --- a/src/libsersi/utils/PduType.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef LIBSERSI_UTILS_PDUTYPE_H_ -#define LIBSERSI_UTILS_PDUTYPE_H_ - -namespace dis { -enum PduType { - kOther = 0, - kEntityState = 1, - kFire = 2, - kDetonation = 3, - kCollision = 4, - kServiceRequest = 5, - kResupplyOffer = 6, - kResupplyReceived = 7, - kResupplyCancel = 8, - kRepairComplete = 9, - kRepairResponse = 10, - kCreateEntity = 11, - kRemoveEntity = 12, - kStartResume = 13, - kStopFreeze = 14, - kAcknowledge = 15, - kActionRequest = 16, - kActionResponse = 17, - kDataQuery = 18, - kSetData = 19, - kData = 20, - kEventReport = 21, - kComment = 22, - kElectronicEmmisions = 23, - kDesignator = 24, - kTransmitter = 25, - kSignal = 26, - kReceiver = 27, - kIff = 28, - kUnderwaterAcoustic = 29, - kSupplementalEmissionEntity = 30, - kIntercomSignal = 31, - kIntercomControl = 32, - kAggregateState = 33, - kIsGroupOf = 34, - kTransferOwnership = 35, - kIsPartOf = 36, - kMinefieldState = 37, - kMinefieldQuery = 38, - kMinefieldData = 39, - kMinefieldResponseNack = 40, - kEnvironmentalProcess = 41, - kGriddedData = 42, - kPointObjectState = 43, - kLinearObjectState = 44, - kArealObjectState = 45, - kTspi = 46, - kAppearance = 47, - kArticulatedParts = 48 -}; -} - -#endif // LIBSERSI_UTILS_PDUTYPE_H_ diff --git a/src/libsersi/warfare/CMakeLists.txt b/src/libsersi/warfare/CMakeLists.txt deleted file mode 100644 index 097fc3f..0000000 --- a/src/libsersi/warfare/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -set(warfare_hdr - BurstDescriptor.h - DetonationPdu.h - FirePdu.h - WarfareFamilyPdu.h -) - -set(warfare_src - BurstDescriptor.cpp - DetonationPdu.cpp - FirePdu.cpp - WarfareFamilyPdu.cpp -) - -target_sources(sersi PRIVATE ${warfare_src}) - -install(FILES ${warfare_hdr} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libsersi/warfare -) diff --git a/src/libsersi/warfare/DetonationPdu.cpp b/src/libsersi/warfare/DetonationPdu.cpp deleted file mode 100644 index cbd0451..0000000 --- a/src/libsersi/warfare/DetonationPdu.cpp +++ /dev/null @@ -1,194 +0,0 @@ -#include "libsersi/warfare/DetonationPdu.h" - -namespace dis { -DetonationPdu::DetonationPdu() - : detonation_result_(0), number_of_articulation_parameters_(0), pad_(0) { - SetPduType(3); -} - -DetonationPdu::~DetonationPdu() { articulation_parameters_.clear(); } - -EntityID& DetonationPdu::GetMunitionId() { return munition_id_; } - -const EntityID& DetonationPdu::GetMunitionId() const { return munition_id_; } - -void DetonationPdu::SetMunitionId(const EntityID& value) { - munition_id_ = value; -} - -EventID& DetonationPdu::GetEventId() { return event_id_; } - -const EventID& DetonationPdu::GetEventId() const { return event_id_; } - -void DetonationPdu::SetEventId(const EventID& value) { event_id_ = value; } - -Vector3Float& DetonationPdu::GetVelocity() { return velocity_; } - -const Vector3Float& DetonationPdu::GetVelocity() const { return velocity_; } - -void DetonationPdu::SetVelocity(const Vector3Float& value) { - velocity_ = value; -} - -Vector3Double& DetonationPdu::GetLocationInWorldCoordinates() { - return location_in_world_coordinates_; -} - -const Vector3Double& DetonationPdu::GetLocationInWorldCoordinates() const { - return location_in_world_coordinates_; -} - -void DetonationPdu::SetLocationInWorldCoordinates(const Vector3Double& value) { - location_in_world_coordinates_ = value; -} - -BurstDescriptor& DetonationPdu::GetBurstDescriptor() { - return burst_descriptor_; -} - -const BurstDescriptor& DetonationPdu::GetBurstDescriptor() const { - return burst_descriptor_; -} - -void DetonationPdu::SetBurstDescriptor(const BurstDescriptor& value) { - burst_descriptor_ = value; -} - -Vector3Float& DetonationPdu::GetLocationInEntityCoordinates() { - return location_in_entity_coordinates_; -} - -const Vector3Float& DetonationPdu::GetLocationInEntityCoordinates() const { - return location_in_entity_coordinates_; -} - -void DetonationPdu::SetLocationInEntityCoordinates(const Vector3Float& value) { - location_in_entity_coordinates_ = value; -} - -uint8_t DetonationPdu::GetDetonationResult() const { - return detonation_result_; -} - -void DetonationPdu::SetDetonationResult(uint8_t value) { - detonation_result_ = value; -} - -uint8_t DetonationPdu::GetNumberOfArticulationParameters() const { - return articulation_parameters_.size(); -} - -int16_t DetonationPdu::GetPad() const { return pad_; } - -void DetonationPdu::SetPad(int16_t value) { pad_ = value; } - -std::vector& DetonationPdu::GetArticulationParameters() { - return articulation_parameters_; -} - -const std::vector& -DetonationPdu::GetArticulationParameters() const { - return articulation_parameters_; -} - -void DetonationPdu::SetArticulationParameters( - const std::vector& value) { - articulation_parameters_ = value; -} - -void DetonationPdu::Marshal(DataStream& data_stream) const { - WarfareFamilyPdu::Marshal(data_stream); - munition_id_.Marshal(data_stream); - event_id_.Marshal(data_stream); - velocity_.Marshal(data_stream); - location_in_world_coordinates_.Marshal(data_stream); - burst_descriptor_.Marshal(data_stream); - location_in_entity_coordinates_.Marshal(data_stream); - data_stream << detonation_result_; - data_stream << static_cast(articulation_parameters_.size()); - data_stream << pad_; - - for (auto x : articulation_parameters_) { - x.Marshal(data_stream); - } -} - -void DetonationPdu::Unmarshal(DataStream& data_stream) { - WarfareFamilyPdu::Unmarshal( - data_stream); // Unmarshal information in superclass first - munition_id_.Unmarshal(data_stream); - event_id_.Unmarshal(data_stream); - velocity_.Unmarshal(data_stream); - location_in_world_coordinates_.Unmarshal(data_stream); - burst_descriptor_.Unmarshal(data_stream); - location_in_entity_coordinates_.Unmarshal(data_stream); - data_stream >> detonation_result_; - data_stream >> number_of_articulation_parameters_; - data_stream >> pad_; - - articulation_parameters_.clear(); - for (std::size_t idx = 0; idx < number_of_articulation_parameters_; idx++) { - ArticulationParameter x; - x.Unmarshal(data_stream); - articulation_parameters_.push_back(x); - } -} - -bool DetonationPdu::operator==(const DetonationPdu& rhs) const { - bool ivars_equal = true; - - ivars_equal = WarfareFamilyPdu::operator==(rhs); - - if (!(munition_id_ == rhs.munition_id_)) { - ivars_equal = false; - } - if (!(event_id_ == rhs.event_id_)) { - ivars_equal = false; - } - if (!(velocity_ == rhs.velocity_)) { - ivars_equal = false; - } - if (!(location_in_world_coordinates_ == rhs.location_in_world_coordinates_)) { - ivars_equal = false; - } - if (!(burst_descriptor_ == rhs.burst_descriptor_)) { - ivars_equal = false; - } - if (!(location_in_entity_coordinates_ == - rhs.location_in_entity_coordinates_)) { - ivars_equal = false; - } - if (!(detonation_result_ == rhs.detonation_result_)) { - ivars_equal = false; - } - if (!(pad_ == rhs.pad_)) { - ivars_equal = false; - } - - for (std::size_t idx = 0; idx < articulation_parameters_.size(); idx++) { - if (!(articulation_parameters_[idx] == rhs.articulation_parameters_[idx])) { - ivars_equal = false; - } - } - - return ivars_equal; -} - -std::size_t DetonationPdu::GetMarshalledSize() const { - std::size_t marshal_size = - WarfareFamilyPdu::GetMarshalledSize() + munition_id_.GetMarshalledSize() + - event_id_.GetMarshalledSize() + velocity_.GetMarshalledSize() + - location_in_world_coordinates_.GetMarshalledSize() + - burst_descriptor_.GetMarshalledSize() + - location_in_entity_coordinates_.GetMarshalledSize() + - sizeof(detonation_result_) + sizeof(number_of_articulation_parameters_) + - sizeof(pad_); - - for (auto list_element : articulation_parameters_) { - marshal_size = marshal_size + list_element.GetMarshalledSize(); - } - - return marshal_size; -} - -} // namespace dis diff --git a/src/libsersi/warfare/DetonationPdu.h b/src/libsersi/warfare/DetonationPdu.h deleted file mode 100644 index 665f1d7..0000000 --- a/src/libsersi/warfare/DetonationPdu.h +++ /dev/null @@ -1,99 +0,0 @@ -#pragma once - -#include -#include - -#include "libsersi/common/ArticulationParameter.h" -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EventID.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/utils/DataStream.h" -#include "libsersi/warfare/BurstDescriptor.h" -#include "libsersi/warfare/WarfareFamilyPdu.h" - -namespace dis { -// Section 5.3.4.2. Information about stuff exploding. COMPLETE - -class DetonationPdu final : public WarfareFamilyPdu { - private: - /** ID of muntion that was fired */ - EntityID munition_id_; - - /** ID firing event */ - EventID event_id_; - - /** ID firing event */ - Vector3Float velocity_; - - /** where the detonation is, in world coordinates */ - Vector3Double location_in_world_coordinates_; - - /** Describes munition used */ - BurstDescriptor burst_descriptor_; - - /** location of the detonation or impact in the target entity's coordinate - * system. This information should be used for damage assessment. */ - Vector3Float location_in_entity_coordinates_; - - /** result of the explosion */ - uint8_t detonation_result_; - - /** How many articulation parameters we have */ - uint8_t number_of_articulation_parameters_; - - /** padding */ - int16_t pad_; - - std::vector articulation_parameters_; - - public: - DetonationPdu(); - ~DetonationPdu() final; - - void Marshal(DataStream& data_stream) const final; - void Unmarshal(DataStream& data_stream) final; - - EntityID& GetMunitionId(); - [[nodiscard]] const EntityID& GetMunitionId() const; - void SetMunitionId(const EntityID& value); - - EventID& GetEventId(); - [[nodiscard]] const EventID& GetEventId() const; - void SetEventId(const EventID& value); - - Vector3Float& GetVelocity(); - [[nodiscard]] const Vector3Float& GetVelocity() const; - void SetVelocity(const Vector3Float& value); - - Vector3Double& GetLocationInWorldCoordinates(); - [[nodiscard]] const Vector3Double& GetLocationInWorldCoordinates() const; - void SetLocationInWorldCoordinates(const Vector3Double& value); - - BurstDescriptor& GetBurstDescriptor(); - [[nodiscard]] const BurstDescriptor& GetBurstDescriptor() const; - void SetBurstDescriptor(const BurstDescriptor& value); - - Vector3Float& GetLocationInEntityCoordinates(); - [[nodiscard]] const Vector3Float& GetLocationInEntityCoordinates() const; - void SetLocationInEntityCoordinates(const Vector3Float& value); - - [[nodiscard]] uint8_t GetDetonationResult() const; - void SetDetonationResult(uint8_t value); - - [[nodiscard]] uint8_t GetNumberOfArticulationParameters() const; - - [[nodiscard]] int16_t GetPad() const; - void SetPad(int16_t value); - - std::vector& GetArticulationParameters(); - [[nodiscard]] const std::vector& - GetArticulationParameters() const; - void SetArticulationParameters( - const std::vector& value); - - [[nodiscard]] std::size_t GetMarshalledSize() const final; - - bool operator==(const DetonationPdu& rhs) const; -}; -} // namespace dis diff --git a/src/libsersi/warfare/FirePdu.cpp b/src/libsersi/warfare/FirePdu.cpp deleted file mode 100644 index 45a7077..0000000 --- a/src/libsersi/warfare/FirePdu.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "libsersi/warfare/FirePdu.h" - -namespace dis { -FirePdu::FirePdu() : fire_mission_index_(0), range_(0.0) { SetPduType(2); } - -FirePdu::~FirePdu() = default; - -EntityID& FirePdu::GetMunitionId() { return munition_id_; } - -const EntityID& FirePdu::GetMunitionId() const { return munition_id_; } - -void FirePdu::SetMunitionId(const EntityID& value) { munition_id_ = value; } - -EventID& FirePdu::GetEventId() { return event_id_; } - -const EventID& FirePdu::GetEventId() const { return event_id_; } - -void FirePdu::SetEventId(const EventID& value) { event_id_ = value; } - -int FirePdu::GetFireMissionIndex() const { return fire_mission_index_; } - -void FirePdu::SetFireMissionIndex(int value) { fire_mission_index_ = value; } - -Vector3Double& FirePdu::GetLocationInWorldCoordinates() { - return location_in_world_coordinates_; -} - -const Vector3Double& FirePdu::GetLocationInWorldCoordinates() const { - return location_in_world_coordinates_; -} - -void FirePdu::SetLocationInWorldCoordinates(const Vector3Double& value) { - location_in_world_coordinates_ = value; -} - -BurstDescriptor& FirePdu::GetBurstDescriptor() { return burst_descriptor_; } - -const BurstDescriptor& FirePdu::GetBurstDescriptor() const { - return burst_descriptor_; -} - -void FirePdu::SetBurstDescriptor(const BurstDescriptor& value) { - burst_descriptor_ = value; -} - -Vector3Float& FirePdu::GetVelocity() { return velocity_; } - -const Vector3Float& FirePdu::GetVelocity() const { return velocity_; } - -void FirePdu::SetVelocity(const Vector3Float& value) { velocity_ = value; } - -float FirePdu::GetRange() const { return range_; } - -void FirePdu::SetRange(float value) { range_ = value; } - -void FirePdu::Marshal(DataStream& data_stream) const { - WarfareFamilyPdu::Marshal( - data_stream); // Marshal information in superclass first - munition_id_.Marshal(data_stream); - event_id_.Marshal(data_stream); - data_stream << fire_mission_index_; - location_in_world_coordinates_.Marshal(data_stream); - burst_descriptor_.Marshal(data_stream); - velocity_.Marshal(data_stream); - data_stream << range_; -} - -void FirePdu::Unmarshal(DataStream& data_stream) { - WarfareFamilyPdu::Unmarshal( - data_stream); // Unmarshal information in superclass first - munition_id_.Unmarshal(data_stream); - event_id_.Unmarshal(data_stream); - data_stream >> fire_mission_index_; - location_in_world_coordinates_.Unmarshal(data_stream); - burst_descriptor_.Unmarshal(data_stream); - velocity_.Unmarshal(data_stream); - data_stream >> range_; -} - -bool FirePdu::operator==(const FirePdu& rhs) const { - bool ivars_equal = true; - - ivars_equal = WarfareFamilyPdu::operator==(rhs); - - if (!(munition_id_ == rhs.munition_id_)) { - ivars_equal = false; - } - if (!(event_id_ == rhs.event_id_)) { - ivars_equal = false; - } - if (!(fire_mission_index_ == rhs.fire_mission_index_)) { - ivars_equal = false; - } - if (!(location_in_world_coordinates_ == rhs.location_in_world_coordinates_)) { - ivars_equal = false; - } - if (!(burst_descriptor_ == rhs.burst_descriptor_)) { - ivars_equal = false; - } - if (!(velocity_ == rhs.velocity_)) { - ivars_equal = false; - } - if (!(range_ == rhs.range_)) { - ivars_equal = false; - } - - return ivars_equal; -} - -std::size_t FirePdu::GetMarshalledSize() const { - std::size_t marshal_size = - WarfareFamilyPdu::GetMarshalledSize() + munition_id_.GetMarshalledSize() + - event_id_.GetMarshalledSize() + sizeof(fire_mission_index_) + - location_in_world_coordinates_.GetMarshalledSize() + - burst_descriptor_.GetMarshalledSize() + velocity_.GetMarshalledSize() + - sizeof(range_); - return marshal_size; -} - -} // namespace dis diff --git a/src/libsersi/warfare/FirePdu.h b/src/libsersi/warfare/FirePdu.h deleted file mode 100644 index 58d9293..0000000 --- a/src/libsersi/warfare/FirePdu.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef LIBSERSI_WARFARE_FIREPDU_H_ -#define LIBSERSI_WARFARE_FIREPDU_H_ - -#include - -#include "libsersi/common/EntityID.h" -#include "libsersi/common/EventID.h" -#include "libsersi/common/Vector3Double.h" -#include "libsersi/common/Vector3Float.h" -#include "libsersi/utils/DataStream.h" -#include "libsersi/warfare/BurstDescriptor.h" -#include "libsersi/warfare/WarfareFamilyPdu.h" - -namespace dis { -// Sectioin 5.3.4.1. Information about someone firing something. COMPLETE - -class FirePdu : public WarfareFamilyPdu { - private: - /** ID of the munition that is being shot */ - EntityID munition_id_; - - /** ID of event */ - EventID event_id_; - - int fire_mission_index_; - - /** location of the firing event */ - Vector3Double location_in_world_coordinates_; - - /** Describes munitions used in the firing event */ - BurstDescriptor burst_descriptor_; - - /** Velocity of the ammunition */ - Vector3Float velocity_; - - /** range to the target */ - float range_; - - public: - FirePdu(); - ~FirePdu() override; - - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; - - EntityID& GetMunitionId(); - [[nodiscard]] const EntityID& GetMunitionId() const; - void SetMunitionId(const EntityID& value); - - EventID& GetEventId(); - [[nodiscard]] const EventID& GetEventId() const; - void SetEventId(const EventID& value); - - [[nodiscard]] int GetFireMissionIndex() const; - void SetFireMissionIndex(int value); - - Vector3Double& GetLocationInWorldCoordinates(); - [[nodiscard]] const Vector3Double& GetLocationInWorldCoordinates() const; - void SetLocationInWorldCoordinates(const Vector3Double& value); - - BurstDescriptor& GetBurstDescriptor(); - [[nodiscard]] const BurstDescriptor& GetBurstDescriptor() const; - void SetBurstDescriptor(const BurstDescriptor& value); - - Vector3Float& GetVelocity(); - [[nodiscard]] const Vector3Float& GetVelocity() const; - void SetVelocity(const Vector3Float& value); - - [[nodiscard]] float GetRange() const; - void SetRange(float value); - - [[nodiscard]] std::size_t GetMarshalledSize() const override; - - bool operator==(const FirePdu& rhs) const; -}; - -} // namespace dis - -#endif // LIBSERSI_WARFARE_FIREPDU_H_ diff --git a/src/libsersi/warfare/WarfareFamilyPdu.cpp b/src/libsersi/warfare/WarfareFamilyPdu.cpp deleted file mode 100644 index a516161..0000000 --- a/src/libsersi/warfare/WarfareFamilyPdu.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "libsersi/warfare/WarfareFamilyPdu.h" - -namespace dis { -WarfareFamilyPdu::WarfareFamilyPdu() { SetProtocolFamily(2); } - -EntityID& WarfareFamilyPdu::GetFiringEntityId() { return firing_entity_id_; } - -const EntityID& WarfareFamilyPdu::GetFiringEntityId() const { - return firing_entity_id_; -} - -void WarfareFamilyPdu::SetFiringEntityId(const EntityID& value) { - firing_entity_id_ = value; -} - -EntityID& WarfareFamilyPdu::GetTargetEntityId() { return target_entity_id_; } - -const EntityID& WarfareFamilyPdu::GetTargetEntityId() const { - return target_entity_id_; -} - -void WarfareFamilyPdu::SetTargetEntityId(const EntityID& value) { - target_entity_id_ = value; -} - -void WarfareFamilyPdu::Marshal(DataStream& data_stream) const { - Pdu::Marshal(data_stream); // Marshal information in superclass first - firing_entity_id_.Marshal(data_stream); - target_entity_id_.Marshal(data_stream); -} - -void WarfareFamilyPdu::Unmarshal(DataStream& data_stream) { - Pdu::Unmarshal(data_stream); // unmarshal information in superclass first - firing_entity_id_.Unmarshal(data_stream); - target_entity_id_.Unmarshal(data_stream); -} - -bool WarfareFamilyPdu::operator==(const WarfareFamilyPdu& rhs) const { - bool ivars_equal = true; - - ivars_equal = Pdu::operator==(rhs); - - if (!(firing_entity_id_ == rhs.firing_entity_id_)) { - ivars_equal = false; - } - if (!(target_entity_id_ == rhs.target_entity_id_)) { - ivars_equal = false; - } - - return ivars_equal; -} - -std::size_t WarfareFamilyPdu::GetMarshalledSize() const { - std::size_t marshal_size = Pdu::GetMarshalledSize() + - firing_entity_id_.GetMarshalledSize() + - target_entity_id_.GetMarshalledSize(); - return marshal_size; -} - -} // namespace dis diff --git a/src/libsersi/warfare/WarfareFamilyPdu.h b/src/libsersi/warfare/WarfareFamilyPdu.h deleted file mode 100644 index fa81e82..0000000 --- a/src/libsersi/warfare/WarfareFamilyPdu.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include "libsersi/common/EntityID.h" -#include "libsersi/common/Pdu.h" -#include "libsersi/utils/DataStream.h" - -namespace dis { -// Section 5.3.4. abstract superclass for fire and detonation pdus that have -// shared information. COMPLETE - -class WarfareFamilyPdu : public Pdu { - private: - /** ID of the entity that shot */ - EntityID firing_entity_id_; - - /** ID of the entity that is being shot at */ - EntityID target_entity_id_; - - public: - WarfareFamilyPdu(); - ~WarfareFamilyPdu() override = default; - - void Marshal(DataStream& data_stream) const override; - void Unmarshal(DataStream& data_stream) override; - - EntityID& GetFiringEntityId(); - [[nodiscard]] const EntityID& GetFiringEntityId() const; - void SetFiringEntityId(const EntityID& value); - - EntityID& GetTargetEntityId(); - [[nodiscard]] const EntityID& GetTargetEntityId() const; - void SetTargetEntityId(const EntityID& value); - - [[nodiscard]] std::size_t GetMarshalledSize() const override; - - bool operator==(const WarfareFamilyPdu& rhs) const; -}; -} // namespace dis