helics  3.5.2
flagOperations.hpp
Go to the documentation of this file.
1 /*
2 Copyright (c) 2017-2024,
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
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 
35  child_flag = 14
36 };
37 
39 enum InterfaceFlags : uint16_t {
54 
55  // 9,10,11,13,14 are interface specific
56 
59 
62 };
63 
68 
75 };
76 
85 };
86 
88 enum ConnectionFlags : uint16_t {
90  core_flag = 3,
93 
111  non_counting_flag = 15
112 
113 };
114 
116 enum MessageFlags : uint16_t {
128  empty_flag = 15,
129 };
130 
132 enum OperationFlags : uint16_t {
134  cancel_flag = 13
135 };
136 
137 // extra_flag1 = 7, //!< extra flag
138 
139 // extra_flag2 = 10, //!< extra flag
140 
141 // extra_flag3 = 13, //!< extra flag
142 // extra_flag4 = 14, //!< extra flag
143 
150 template<class FlagContainer, class FlagIndex>
151 inline void setActionFlag(FlagContainer& M, FlagIndex flag)
152 {
153  M.flags |= (static_cast<decltype(M.flags)>((1U) << (static_cast<uint16_t>((flag)))));
154 }
155 
158 template<class FlagIndex>
159 inline bool checkActionFlag(uint16_t flags, FlagIndex flag)
160 {
161  return ((flags & (static_cast<uint16_t>((1U) << (static_cast<uint16_t>((flag)))))) != 0U);
162 }
163 
165 template<class FlagContainer, class FlagIndex>
166 inline bool checkActionFlag(const FlagContainer& M, FlagIndex flag)
167 {
168  return ((M.flags & (static_cast<decltype(M.flags)>((1U) << (static_cast<uint16_t>((flag)))))) !=
169  0U);
170 }
171 
173 template<class FlagContainer, class FlagIndex>
174 inline void clearActionFlag(FlagContainer& M, FlagIndex flag)
175 {
176  M.flags &= static_cast<decltype(M.flags)>(~((1U) << (static_cast<uint16_t>((flag)))));
177 }
178 
180 template<class FlagContainer, class FlagIndex>
181 inline void toggleActionFlag(FlagContainer& M, FlagIndex flag)
182 {
183  if (checkActionFlag(M, flag)) {
184  clearActionFlag(M, flag);
185  } else {
186  setActionFlag(M, flag);
187  }
188 }
189 
191 inline constexpr uint16_t make_flags(unsigned int flag)
192 {
193  return static_cast<uint16_t>(1U << (flag));
194 }
195 
197 inline constexpr uint16_t make_flags(unsigned int flag1, unsigned int flag2)
198 {
199  return make_flags(flag1) | make_flags(flag2);
200 }
201 
203 inline constexpr uint16_t make_flags(unsigned int flag1, unsigned int flag2, unsigned int flag3)
204 {
205  return make_flags(flag1, flag2) | make_flags(flag3);
206 }
207 
209 inline constexpr uint16_t toggle_flag(uint16_t base, unsigned int flag)
210 {
211  return base ^ make_flags(flag);
212 }
213 } // namespace helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
constexpr uint16_t toggle_flag(uint16_t base, unsigned int flag)
Definition: flagOperations.hpp:209
OperationFlags
general flags used for other operations
Definition: flagOperations.hpp:132
@ cancel_flag
flag indicating an operation is canceled
Definition: flagOperations.hpp:134
void toggleActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:181
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:151
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:191
ConnectionFlags
flags used when connecting a federate/core/broker to a federation
Definition: flagOperations.hpp:88
@ disconnected_flag
flag indicating that a broker/federate is disconnected
Definition: flagOperations.hpp:105
@ dynamic_join_flag
flag indicating that the connection allows joining dynamically
Definition: flagOperations.hpp:101
@ global_timing_flag
flag indicating to use global timing (overload of indicator flag)
Definition: flagOperations.hpp:92
@ core_flag
flag indicating that message comes from a core vs a broker
Definition: flagOperations.hpp:90
@ async_timing_flag
flag indicating use of asynchronous timing on a global level
Definition: flagOperations.hpp:97
@ observer_flag
flag indicating that the connection is an observer only
Definition: flagOperations.hpp:99
@ test_connection_flag
flag indicating this is a test connection
Definition: flagOperations.hpp:107
@ non_counting_flag
flag indicating that a federate should not count in any totals
Definition: flagOperations.hpp:111
@ reentrant_flag
flag indicating that the connection may be reentrant
Definition: flagOperations.hpp:103
@ slow_responding_flag
flag indicating a federate, core or broker is slow responding
Definition: flagOperations.hpp:109
@ use_json_serialization_flag
flag to indicate it should use the json packetization
Definition: flagOperations.hpp:95
MessageFlags
flags used for messages
Definition: flagOperations.hpp:116
@ filter_processing_required_flag
flag indicating that the message requires processing for filters yet
Definition: flagOperations.hpp:118
@ user_custom_message_flag2
Definition: flagOperations.hpp:125
@ user_custom_message_flag1
custom message flag 1
Definition: flagOperations.hpp:120
@ user_custom_message_flag3
custom message flag 3
Definition: flagOperations.hpp:127
@ destination_processing_flag
flag indicating the message is for destination processing
Definition: flagOperations.hpp:122
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:159
void clearActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:174
TimingFlags
flags used in timing messages
Definition: flagOperations.hpp:22
@ iteration_requested_flag
Definition: flagOperations.hpp:23
@ non_granting_flag
flag to indicate the request is from a non-granting federate
Definition: flagOperations.hpp:25
@ delayed_timing_flag
flag to indicate the request is from federate with delayed timing
Definition: flagOperations.hpp:30
@ parent_flag
flag indicating the message is from a parent object
Definition: flagOperations.hpp:32
@ child_flag
flag indicating a message is from a child object
Definition: flagOperations.hpp:35
@ interrupted_flag
flag to mark an interrupted event
Definition: flagOperations.hpp:28
InterfaceFlags
flags used on handles
Definition: flagOperations.hpp:39
@ nameless_interface_flag
flag to indicate an interface is nameless
Definition: flagOperations.hpp:61
@ only_transmit_on_change_flag
indicator that the interface should only transmit on change
Definition: flagOperations.hpp:58
@ only_update_on_change_flag
flag indicating that the values should only be updated on change
Definition: flagOperations.hpp:49
@ buffer_data_flag
indicator that the interface should buffer data
Definition: flagOperations.hpp:41
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:43
@ single_connection_flag
flag indicating that the interface accepts only a single connection
Definition: flagOperations.hpp:47
@ reconnectable_flag
flag indicating that the target is mapped
Definition: flagOperations.hpp:51
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:53
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:45
EndpointFlags
enumeration of endpoint specific flags
Definition: flagOperations.hpp:65
@ receive_only_flag
indicator that an endpoint is receive only
Definition: flagOperations.hpp:74
@ targeted_flag
flag indicating an endpoint is targeted
Definition: flagOperations.hpp:67
@ source_only_flag
indicator that an endpoint is source only
Definition: flagOperations.hpp:72
@ has_source_filter_flag
indicator that an endpoint or message has a source filter
Definition: flagOperations.hpp:70
FilterFlags
enumeration of filter specific flags
Definition: flagOperations.hpp:78
@ has_non_cloning_dest_filter_flag
indicator that the endpoint or filter has a destination filter that alters the message
Definition: flagOperations.hpp:84
@ clone_flag
flag indicating the filter is a clone filter or the data needs to be cloned
Definition: flagOperations.hpp:80
@ has_dest_filter_flag
indicator that an endpoint or message has a destination filter
Definition: flagOperations.hpp:82
GeneralFlags
Definition: flagOperations.hpp:16
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:18
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:17