.. _program_listing_file__tmp_ws_src_sick_safetyscanners_base_include_sick_safetyscanners_base_Types.h: Program Listing for File Types.h ================================ |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/sick_safetyscanners_base/include/sick_safetyscanners_base/Types.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*- // -- BEGIN LICENSE BLOCK ---------------------------------------------- // -- END LICENSE BLOCK ------------------------------------------------ //---------------------------------------------------------------------- //---------------------------------------------------------------------- #ifndef SICK_SAFETYSCANNERS_BASE_TYPES_H #define SICK_SAFETYSCANNERS_BASE_TYPES_H #include "sick_safetyscanners_base/datastructure/Data.h" #include "sick_safetyscanners_base/datastructure/PacketBuffer.h" #include #include #include namespace sick { namespace types { using ScanDataCb = std::function; using PacketHandler = std::function; using ip_address_t = boost::asio::ip::address_v4; using port_t = uint16_t; using time_duration_t = boost::posix_time::time_duration; using SensorFeatures = uint16_t; } // namespace types // Namespace containing sensor feature flags as constants. namespace SensorDataFeatures { constexpr uint16_t ALL = 0b11111; constexpr uint16_t NONE = 0; constexpr uint16_t GENERAL_SYSTEM_STATE = 1 << 0; constexpr uint16_t DERIVED_SETTINGS = 1 << 1; constexpr uint16_t MEASUREMENT_DATA = 1 << 2; constexpr uint16_t INTRUSION_DATA = 1 << 3; constexpr uint16_t APPLICATION_DATA = 1 << 4; constexpr bool isFlagSet(uint16_t bitset, uint16_t flag) { return (bitset & flag) == flag; }; constexpr uint16_t toFeatureFlags(bool general_system_state, bool derived_settings, bool measurement_data, bool intursion_data, bool application_data) { // In C++11 constexpr functions are restricted to a function-body that contains a single // return-statement only. bool * int gets promoted to either 1 * int or 0 * int, so this is works // to avoid if-statements. return (general_system_state * sick::SensorDataFeatures::GENERAL_SYSTEM_STATE) + (derived_settings * sick::SensorDataFeatures::DERIVED_SETTINGS) + (measurement_data * sick::SensorDataFeatures::MEASUREMENT_DATA) + (intursion_data * sick::SensorDataFeatures::INTRUSION_DATA) + (application_data * sick::SensorDataFeatures::APPLICATION_DATA); } } // namespace SensorDataFeatures } // namespace sick #endif // SICK_SAFETYSCANNERS_TYPES_H