Gazebo Physics

API Reference

7.4.0
CompositeData.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 
18 #ifndef GZ_PHYSICS_COMPOSITEDATA_HH_
19 #define GZ_PHYSICS_COMPOSITEDATA_HH_
20 
21 #include <string>
22 #include <map>
23 #include <set>
24 
25 #include <gz/utils/SuppressWarning.hh>
26 
27 #include "gz/physics/Cloneable.hh"
28 #include "gz/physics/Export.hh"
29 
30 namespace gz
31 {
32  namespace physics
33  {
34  // Forward declarations
35  namespace detail
36  {
37  template <typename> class PrivateExpectData;
38  template <typename> class PrivateRequireData;
39  }
40 
43  class GZ_PHYSICS_VISIBLE CompositeData
44  {
46  public: CompositeData();
47 
49  public: virtual ~CompositeData() = default;
50 
99  public: template <typename Data>
100  Data &Get();
101 
105  public: template <typename Data>
107  {
110  public: Data &data;
111 
118  public: const bool inserted;
119 
120  // We explicitly delete the copy assignment operator, because we don't
121  // want someone to inadvertently assign a value to the data that's being
122  // referenced (users must do so explicitly by calling on the `data`
123  // member variable). Note that this operator is already implicitly
124  // deleted by having the const bool member variable, but we are also
125  // deleting it explicitly for clarity.
126  public: InsertResult &operator=(const InsertResult&) = delete;
127  };
128 
211  public: template <typename Data, typename... Args>
212  InsertResult<Data> Insert(Args &&..._args);
213 
288  public: template <typename Data, typename... Args>
290 
352  public: template <typename Data>
353  bool Remove();
354 
359  enum class QueryMode : int
360  {
364  NORMAL = 0,
365 
368  SILENT
369  };
370 
465  public: template <typename Data>
466  Data *Query(const QueryMode _mode = QueryMode::NORMAL);
467 
539  public: template <typename Data>
540  const Data *Query(const QueryMode mode = QueryMode::NORMAL) const;
541 
550  public: template <typename Data>
551  bool Has() const;
552 
554  struct GZ_PHYSICS_VISIBLE DataStatus
555  {
558  public: bool exists;
559 
563  public: bool queried;
564 
567  public: bool required;
568 
571  };
572 
580  public: template <typename Data>
582 
640  public: template <typename Data>
641  bool Unquery() const;
642 
697  public: template <typename Data, typename... Args>
698  Data &MakeRequired(Args &&..._args);
699 
710  public: template <typename Data>
711  bool Requires() const;
712 
723  public: template <typename Data>
724  static constexpr bool Expects();
725 
743  public: template <typename Data>
744  static constexpr bool AlwaysRequires();
745 
751  public: std::size_t EntryCount() const;
752 
760 
770  public: void ResetQueries() const;
771 
823 
901 
916  public: CompositeData &Copy(const CompositeData &_other,
917  const bool _mergeRequirements = false);
918 
921  public: CompositeData &Copy(CompositeData &&_other,
922  const bool _mergeRequirements = false);
923 
937  public: CompositeData &Merge(const CompositeData &_other,
938  const bool _mergeRequirements = false);
939 
942  public: CompositeData &Merge(CompositeData &&_other,
943  const bool _mergeRequirements = false);
944 
946  public: CompositeData(const CompositeData &_other);
947 
949  public: CompositeData(CompositeData &&_other);
950 
952  public: CompositeData &operator=(const CompositeData &_other);
953 
956 
962  public: struct DataEntry;
963 
964  // We make this typedef public so that helper functions can use it without
965  // being friends of the class.
967 
968  GZ_UTILS_WARN_IGNORE__DLL_INTERFACE_MISSING
970  protected: MapOfData dataMap;
971  GZ_UTILS_WARN_RESUME__DLL_INTERFACE_MISSING
972 
977 
980  protected: mutable std::size_t numQueries;
981 
982  // Declare friendship
983  template <typename> friend class detail::PrivateExpectData;
984  template <typename> friend class detail::PrivateRequireData;
985  };
986  }
987 }
988 
989 #include "gz/physics/detail/CompositeData.hh"
990 
991 #endif