.. _program_listing_file_include_rosidl_runtime_c_type_description_utils.h: Program Listing for File type_description_utils.h ================================================= |exhale_lsh| :ref:`Return to documentation for file ` (``include/rosidl_runtime_c/type_description_utils.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright 2023 Open Source Robotics Foundation, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef ROSIDL_RUNTIME_C__TYPE_DESCRIPTION_UTILS_H_ #define ROSIDL_RUNTIME_C__TYPE_DESCRIPTION_UTILS_H_ #include #include #include #include #include #include #include "rosidl_runtime_c/type_description/field__functions.h" #include "rosidl_runtime_c/type_description/field__struct.h" #include "rosidl_runtime_c/type_description/individual_type_description__functions.h" #include "rosidl_runtime_c/type_description/individual_type_description__struct.h" #include "rosidl_runtime_c/type_description/type_description__functions.h" #include "rosidl_runtime_c/type_description/type_description__struct.h" #ifdef __cplusplus extern "C" { #endif static const uint8_t ROSIDL_RUNTIME_C_TYPE_DESCRIPTION_UTILS_SEQUENCE_TYPE_ID_MASK = 48; // ================================================================================================= // GET BY NAME // ================================================================================================= ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_find_field( const rosidl_runtime_c__type_description__Field__Sequence * fields, const char * name, rosidl_runtime_c__type_description__Field ** field); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_find_referenced_type_description( const rosidl_runtime_c__type_description__IndividualTypeDescription__Sequence * referenced_types, const char * type_name, rosidl_runtime_c__type_description__IndividualTypeDescription ** referenced_type); // ================================================================================================= // HASH MAPS // ================================================================================================= ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_get_field_map( const rosidl_runtime_c__type_description__IndividualTypeDescription * individual_description, const rcutils_allocator_t * allocator, rcutils_hash_map_t ** hash_map); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_get_referenced_type_description_map( const rosidl_runtime_c__type_description__IndividualTypeDescription__Sequence * referenced_types, const rcutils_allocator_t * allocator, rcutils_hash_map_t ** hash_map); // ================================================================================================= // DESCRIPTION VALIDITY // ================================================================================================= ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_get_necessary_referenced_type_descriptions_map( const rosidl_runtime_c__type_description__IndividualTypeDescription * main_type_description, const rcutils_hash_map_t * referenced_types_map, const rcutils_allocator_t * allocator, rcutils_hash_map_t ** seen_map); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_copy_init_sequence_from_referenced_type_descriptions_map( const rcutils_hash_map_t * hash_map, rosidl_runtime_c__type_description__IndividualTypeDescription__Sequence ** sequence, bool sort); ROSIDL_GENERATOR_C_PUBLIC int rosidl_runtime_c_type_description_utils_referenced_type_description_sequence_sort_compare( const void * lhs, const void * rhs); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_sort_referenced_type_descriptions_in_place( rosidl_runtime_c__type_description__IndividualTypeDescription__Sequence * sequence); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_prune_referenced_type_descriptions_in_place( const rosidl_runtime_c__type_description__IndividualTypeDescription * main_type_description, rosidl_runtime_c__type_description__IndividualTypeDescription__Sequence * referenced_types); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_field_is_valid( const rosidl_runtime_c__type_description__Field * field); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_individual_type_description_is_valid( const rosidl_runtime_c__type_description__IndividualTypeDescription * description); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_type_description_is_valid( const rosidl_runtime_c__type_description__TypeDescription * description); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_coerce_to_valid_type_description_in_place( rosidl_runtime_c__type_description__TypeDescription * type_description); // ================================================================================================= // DESCRIPTION CONSTRUCTION // ================================================================================================= ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_create_field( const char * name, size_t name_length, uint8_t type_id, uint64_t capacity, uint64_t string_capacity, const char * nested_type_name, size_t nested_type_name_length, const char * default_value, size_t default_value_length, rosidl_runtime_c__type_description__Field ** field); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_create_individual_type_description( const char * type_name, size_t type_name_length, rosidl_runtime_c__type_description__IndividualTypeDescription ** individual_description); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_create_type_description( const char * type_name, size_t type_name_length, rosidl_runtime_c__type_description__TypeDescription ** type_description); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_append_field( rosidl_runtime_c__type_description__IndividualTypeDescription * individual_type_description, rosidl_runtime_c__type_description__Field * field); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_append_referenced_individual_type_description( rosidl_runtime_c__type_description__TypeDescription * type_description, rosidl_runtime_c__type_description__IndividualTypeDescription * referenced_type_description, bool sort); // This adds the type description's main description as a referenced type, and all necessary // referenced types. Then it prunes and sorts the resulting referenced types sequence. ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_append_referenced_type_description( rosidl_runtime_c__type_description__TypeDescription * type_description, rosidl_runtime_c__type_description__TypeDescription * type_description_to_append, bool coerce_to_valid); // Create a type description from a referenced description, then validate if coerce_to_valid is true // This is done by copy!! This allocates memory and the caller is responsible for deallocating the // output ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_get_referenced_type_description_as_type_description( const rosidl_runtime_c__type_description__IndividualTypeDescription__Sequence * referenced_descriptions, const rosidl_runtime_c__type_description__IndividualTypeDescription * referenced_description, rosidl_runtime_c__type_description__TypeDescription ** output_description, bool coerce_to_valid); // Create a type description from a referenced description, then validate if coerce_to_valid is true // This is done by copy!! This allocates memory and the caller is responsible for deallocating the // output ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_get_referenced_type_description_as_type_description( const rosidl_runtime_c__type_description__IndividualTypeDescription__Sequence * referenced_descriptions, const rosidl_runtime_c__type_description__IndividualTypeDescription * referenced_description, rosidl_runtime_c__type_description__TypeDescription ** output_description, bool coerce_to_valid); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_repl_individual_type_description_type_names_in_place( rosidl_runtime_c__type_description__IndividualTypeDescription * individual_type_description, const char * from, const char * to); ROSIDL_GENERATOR_C_PUBLIC rcutils_ret_t rosidl_runtime_c_type_description_utils_repl_all_type_description_type_names_in_place( rosidl_runtime_c__type_description__TypeDescription * type_description, const char * from, const char * to); #ifdef __cplusplus } #endif #endif // ROSIDL_RUNTIME_C__TYPE_DESCRIPTION_UTILS_H_