.. _program_listing_file_include_rcl_context.h: Program Listing for File context.h ================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/rcl/context.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp | | +--> uninitialized +---> rcl_get_zero_initialized_context() + | | | | | +---------------+ | | | | +-----------------------------------------------+ | | | +--------v---------+ +-----------------------+ | | | | | | | zero-initialized +-> rcl_init() +-> initialized and valid +-> rcl_shutdown() + | | | | | | | +------------------+ +-----------------------+ | | | | +-----------------------------------------------------------------+ | | | +------------v------------+ | | | | | initialized but invalid +---> finalize all entities, then rcl_context_fini() + | | | | | +-------------------------+ | | | +---------------------------------------------------------------------------------+ // Copyright 2018 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 RCL__CONTEXT_H_ #define RCL__CONTEXT_H_ #ifdef __cplusplus extern "C" { #endif #include "rmw/init.h" #include "rcl/allocator.h" #include "rcl/arguments.h" #include "rcl/init_options.h" #include "rcl/macros.h" #include "rcl/types.h" #include "rcl/visibility_control.h" #ifdef _MSC_VER #define RCL_ALIGNAS(N) __declspec(align(N)) #else #include #define RCL_ALIGNAS(N) alignas(N) #endif typedef uint64_t rcl_context_instance_id_t; typedef struct rcl_context_impl_s rcl_context_impl_t; typedef struct rcl_context_s { rcl_arguments_t global_arguments; rcl_context_impl_t * impl; // The assumption that this is big enough for an atomic_uint_least64_t is // ensured with a static_assert in the context.c file. // In most cases it should just be a plain uint64_t. #if !defined(RCL_CONTEXT_ATOMIC_INSTANCE_ID_STORAGE_SIZE) #define RCL_CONTEXT_ATOMIC_INSTANCE_ID_STORAGE_SIZE sizeof(uint_least64_t) #endif RCL_ALIGNAS(8) uint8_t instance_id_storage[RCL_CONTEXT_ATOMIC_INSTANCE_ID_STORAGE_SIZE]; } rcl_context_t; RCL_PUBLIC RCL_WARN_UNUSED rcl_context_t rcl_get_zero_initialized_context(void); RCL_PUBLIC RCL_WARN_UNUSED rcl_ret_t rcl_context_fini(rcl_context_t * context); RCL_PUBLIC RCL_WARN_UNUSED const rcl_init_options_t * rcl_context_get_init_options(const rcl_context_t * context); RCL_PUBLIC RCL_WARN_UNUSED rcl_context_instance_id_t rcl_context_get_instance_id(const rcl_context_t * context); RCL_PUBLIC RCL_WARN_UNUSED rcl_ret_t rcl_context_get_domain_id(rcl_context_t * context, size_t * domain_id); RCL_PUBLIC RCL_WARN_UNUSED bool rcl_context_is_valid(const rcl_context_t * context); RCL_PUBLIC RCL_WARN_UNUSED rmw_context_t * rcl_context_get_rmw_context(rcl_context_t * context); #ifdef __cplusplus } #endif #endif // RCL__CONTEXT_H_