.. _program_listing_file__tmp_ws_src_rmf_task_rmf_task_include_rmf_task_CompositeData.hpp: Program Listing for File CompositeData.hpp ========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/rmf_task/rmf_task/include/rmf_task/CompositeData.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /* * Copyright (C) 2021 Open Source Robotics Foundation * * 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 RMF_TASK__COMPOSITEDATA_HPP #define RMF_TASK__COMPOSITEDATA_HPP #include #include #include namespace rmf_task { //============================================================================== // // TODO(MXG): Should this class move to rmf_utils? It is not very specific to // task planning or management. class CompositeData { public: CompositeData(); template struct InsertResult { bool inserted; T* value; }; template InsertResult insert(T&& value); template InsertResult insert_or_assign(T&& value); template CompositeData& with(T&& value); template T* get(); template const T* get() const; template bool erase(); void clear(); class Implementation; private: std::any* _get(std::type_index type); const std::any* _get(std::type_index type) const; InsertResult _insert(std::any value, bool or_assign); bool _erase(std::type_index type); rmf_utils::impl_ptr _pimpl; }; } // namespace rmf_task //============================================================================== #define RMF_TASK_DEFINE_COMPONENT(Type, Name) \ struct Name { Type value; Name(Type input) : value(input) {} } #include #endif // RMF_TASK__COMPOSITEDATA_HPP