helics  3.3.0
flagOperations.hpp
Go to the documentation of this file.
1 /*
2 Copyright (c) 2017-2022,
3 Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Sustainable
4 Energy, LLC. See the top-level NOTICE for additional details. All rights reserved.
5 SPDX-License-Identifier: BSD-3-Clause
6 */
7 #pragma once
8 
12 #include <cstdint>
13 
14 namespace helics {
16 enum GeneralFlags : uint16_t {
17  error_flag = 4,
19 };
20 
22 enum TimingFlags : uint16_t {
26 
33 
36 };
37 
39 enum InterfaceFlags : uint16_t {
58 
69 };
70 
72 enum ConnectionFlags : uint16_t {
74  core_flag = 3,
77 
86 
91 
92 };
93 
95 enum MessageFlags : uint16_t {
107  empty_flag = 15,
108 };
109 
111 enum OperationFlags : uint16_t {
114 };
115 
116 // extra_flag1 = 7, //!< extra flag
117 
118 // extra_flag2 = 10, //!< extra flag
119 
120 // extra_flag3 = 13, //!< extra flag
121 // extra_flag4 = 14, //!< extra flag
122 
129 template<class FlagContainer, class FlagIndex>
130 inline void setActionFlag(FlagContainer& M, FlagIndex flag)
131 {
132  M.flags |= (static_cast<decltype(M.flags)>((1U) << (static_cast<uint16_t>((flag)))));
133 }
134 
137 template<class FlagIndex>
138 inline bool checkActionFlag(uint16_t flags, FlagIndex flag)
139 {
140  return ((flags & (static_cast<uint16_t>((1U) << (static_cast<uint16_t>((flag)))))) != 0U);
141 }
142 
144 template<class FlagContainer, class FlagIndex>
145 inline bool checkActionFlag(const FlagContainer& M, FlagIndex flag)
146 {
147  return ((M.flags & (static_cast<decltype(M.flags)>((1U) << (static_cast<uint16_t>((flag)))))) !=
148  0U);
149 }
150 
152 template<class FlagContainer, class FlagIndex>
153 inline void clearActionFlag(FlagContainer& M, FlagIndex flag)
154 {
155  M.flags &= static_cast<decltype(M.flags)>(~((1U) << (static_cast<uint16_t>((flag)))));
156 }
157 
159 template<class FlagContainer, class FlagIndex>
160 inline void toggleActionFlag(FlagContainer& M, FlagIndex flag)
161 {
162  if (checkActionFlag(M, flag)) {
163  clearActionFlag(M, flag);
164  } else {
165  setActionFlag(M, flag);
166  }
167 }
168 
170 inline constexpr uint16_t make_flags(unsigned int flag)
171 {
172  return static_cast<uint16_t>(1U << (flag));
173 }
174 
176 inline constexpr uint16_t make_flags(unsigned int flag1, unsigned int flag2)
177 {
178  return make_flags(flag1) | make_flags(flag2);
179 }
180 
182 inline constexpr uint16_t make_flags(unsigned int flag1, unsigned int flag2, unsigned int flag3)
183 {
184  return make_flags(flag1, flag2) | make_flags(flag3);
185 }
186 
187 } // namespace helics
helics::destination_target
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:43
helics::targeted_flag
@ targeted_flag
flag indicating an endpoint is targeted
Definition: flagOperations.hpp:57
helics::indicator_flag
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:18
helics::has_non_cloning_dest_filter_flag
@ has_non_cloning_dest_filter_flag
indicator that the endpoint or filter has a destination filter that alters the message
Definition: flagOperations.hpp:66
helics::optional_flag
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:53
helics::core_flag
@ core_flag
flag indicating that message comes from a core vs a broker
Definition: flagOperations.hpp:74
helics::user_custom_message_flag1
@ user_custom_message_flag1
custom message flag 1
Definition: flagOperations.hpp:99
helics::cancel_flag
@ cancel_flag
flag indicating an operation is canceled
Definition: flagOperations.hpp:113
helics::filter_processing_required_flag
@ filter_processing_required_flag
flag indicating that the message requires processing for filters yet
Definition: flagOperations.hpp:97
helics::async_timing_flag
@ async_timing_flag
flag indicating use of asynchronous timing on a global level
Definition: flagOperations.hpp:81
helics::has_dest_filter_flag
@ has_dest_filter_flag
indicator that an endpoint or message has a destination filter
Definition: flagOperations.hpp:64
helics::InterfaceFlags
InterfaceFlags
flags used on handles
Definition: flagOperations.hpp:39
helics::only_transmit_on_change_flag
@ only_transmit_on_change_flag
indicator that the interface should only transmit on change
Definition: flagOperations.hpp:62
helics::user_custom_message_flag2
@ user_custom_message_flag2
Definition: flagOperations.hpp:104
helics::destination_processing_flag
@ destination_processing_flag
flag indicating the message is for destination processing
Definition: flagOperations.hpp:101
helics::only_update_on_change_flag
@ only_update_on_change_flag
flag indicating that the values should only be updated on change
Definition: flagOperations.hpp:49
helics::toggleActionFlag
void toggleActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:160
helics::user_custom_message_flag3
@ user_custom_message_flag3
custom message flag 3
Definition: flagOperations.hpp:106
helics::disconnected_flag
@ disconnected_flag
flag indicating that a broker/federate is disconnected
Definition: flagOperations.hpp:85
helics::has_source_filter_flag
@ has_source_filter_flag
indicator that an endpoint or message has a source filter
Definition: flagOperations.hpp:60
helics::MessageFlags
MessageFlags
flags used for messages
Definition: flagOperations.hpp:95
helics::delayed_timing_flag
@ delayed_timing_flag
flag to indicate the request is from federate with delayed timing
Definition: flagOperations.hpp:30
helics::setActionFlag
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:130
helics::non_counting_flag
@ non_counting_flag
flag indicating that a federate should not count in any totals
Definition: flagOperations.hpp:90
helics::mapped_flag
@ mapped_flag
flag indicating that the target is mapped
Definition: flagOperations.hpp:51
helics::ConnectionFlags
ConnectionFlags
flags used when connecting a federate/core/broker to a federation
Definition: flagOperations.hpp:72
helics::GeneralFlags
GeneralFlags
Definition: flagOperations.hpp:16
helics::single_connection_flag
@ single_connection_flag
flag indicating that the interface accepts only a single connection
Definition: flagOperations.hpp:47
helics::observer_flag
@ observer_flag
flag indicating that a federate is an observer only
Definition: flagOperations.hpp:83
helics::make_flags
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:170
helics::non_granting_flag
@ non_granting_flag
flag to indicate the request is from a non-granting federate
Definition: flagOperations.hpp:25
helics::nameless_interface_flag
@ nameless_interface_flag
flag to indicate an interface is nameless
Definition: flagOperations.hpp:68
helics::parent_flag
@ parent_flag
flag indicating the message is from a parent object
Definition: flagOperations.hpp:32
helics::interrupted_flag
@ interrupted_flag
flag to mark an interrupted event
Definition: flagOperations.hpp:28
helics::slow_responding_flag
@ slow_responding_flag
flag indicating a federate, core or broker is slow responding
Definition: flagOperations.hpp:88
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::buffer_data_flag
@ buffer_data_flag
indicator that the target is a destination target
Definition: flagOperations.hpp:41
helics::clearActionFlag
void clearActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:153
helics::iteration_requested_flag
@ iteration_requested_flag
Definition: flagOperations.hpp:23
helics::global_timing_flag
@ global_timing_flag
flag indicating to use global timing (overload of indicator flag)
Definition: flagOperations.hpp:76
helics::checkActionFlag
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:138
helics::OperationFlags
OperationFlags
general flags used for other operations
Definition: flagOperations.hpp:111
helics::use_json_serialization_flag
@ use_json_serialization_flag
flag to indicate it should use the json packetization
Definition: flagOperations.hpp:79
helics::clone_flag
@ clone_flag
flag indicating the filter is a clone filter or the data needs to be cloned
Definition: flagOperations.hpp:55
helics::required_flag
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:45
helics::TimingFlags
TimingFlags
flags used in timing messages
Definition: flagOperations.hpp:22
helics::error_flag
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:17
helics::child_flag
@ child_flag
flag indicating a message is from a child object
Definition: flagOperations.hpp:35