helics  3.0.1
flagOperations.hpp
Go to the documentation of this file.
1 /*
2 Copyright (c) 2017-2021,
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 
15 enum operation_flags : uint16_t {
19  core_flag = 3,
20  error_flag = 4,
26  9,
27  extra_flag2 = 10,
29  11,
31  extra_flag3 = 13,
32  extra_flag4 = 14,
33  empty_flag = 15,
34 };
35 
37 constexpr uint16_t slow_responding_flag = extra_flag4;
38 
40 constexpr uint16_t cancel_flag = extra_flag3;
41 
43 constexpr uint16_t observer_flag = optional_flag;
44 
46 constexpr uint16_t parent_flag = extra_flag3;
47 
49 constexpr uint16_t child_flag = extra_flag4;
50 
52 constexpr uint16_t non_counting_flag = empty_flag;
53 
55 constexpr uint16_t targetted_flag = extra_flag2;
56 
57 constexpr uint16_t filter_processing_required_flag =
58  extra_flag1; // overload of extra_flag1 indicating that the message requires processing for
59  // filters yet
60 
62 constexpr uint16_t non_granting_flag = extra_flag1;
63 
65 constexpr uint16_t delayed_timing_flag = extra_flag2;
66 
68 constexpr uint16_t nameless_interface_flag = empty_flag;
69 
76 template<class FlagContainer, class FlagIndex>
77 inline void setActionFlag(FlagContainer& M, FlagIndex flag)
78 {
79  M.flags |= (static_cast<decltype(M.flags)>((1U) << (static_cast<uint16_t>((flag)))));
80 }
81 
84 template<class FlagIndex>
85 inline bool checkActionFlag(uint16_t flags, FlagIndex flag)
86 {
87  return ((flags & (static_cast<uint16_t>((1U) << (static_cast<uint16_t>((flag)))))) != 0U);
88 }
89 
91 template<class FlagContainer, class FlagIndex>
92 inline bool checkActionFlag(const FlagContainer& M, FlagIndex flag)
93 {
94  return ((M.flags & (static_cast<decltype(M.flags)>((1U) << (static_cast<uint16_t>((flag)))))) !=
95  0U);
96 }
97 
99 template<class FlagContainer, class FlagIndex>
100 inline void clearActionFlag(FlagContainer& M, FlagIndex flag)
101 {
102  M.flags &= static_cast<decltype(M.flags)>(~((1U) << (static_cast<uint16_t>((flag)))));
103 }
104 
106 template<class FlagContainer, class FlagIndex>
107 inline void toggleActionFlag(FlagContainer& M, FlagIndex flag)
108 {
109  if (checkActionFlag(M, flag)) {
110  clearActionFlag(M, flag);
111  } else {
112  setActionFlag(M, flag);
113  }
114 }
115 
117 inline constexpr uint16_t make_flags(unsigned int flag)
118 {
119  return static_cast<uint16_t>(1U << (flag));
120 }
121 
123 inline constexpr uint16_t make_flags(unsigned int flag1, unsigned int flag2)
124 {
125  return make_flags(flag1) | make_flags(flag2);
126 }
127 
129 inline constexpr uint16_t make_flags(unsigned int flag1, unsigned int flag2, unsigned int flag3)
130 {
131  return make_flags(flag1, flag2) | make_flags(flag3);
132 }
extra_flag3
@ extra_flag3
extra flag
Definition: flagOperations.hpp:31
delayed_timing_flag
constexpr uint16_t delayed_timing_flag
overload of extra_flag2 to indicate the request is from federate with delayed timing
Definition: flagOperations.hpp:65
slow_responding_flag
constexpr uint16_t slow_responding_flag
overload of extra_flag4 indicating a federate, core or broker is slow responding
Definition: flagOperations.hpp:37
operation_flags
operation_flags
Definition: flagOperations.hpp:15
extra_flag2
@ extra_flag2
extra flag
Definition: flagOperations.hpp:27
nameless_interface_flag
constexpr uint16_t nameless_interface_flag
overload of flag to indicate an interface is nameless
Definition: flagOperations.hpp:68
iteration_requested_flag
@ iteration_requested_flag
indicator that an iteration has been requested
Definition: flagOperations.hpp:16
disconnected_flag
@ disconnected_flag
flag indicating that a broker/federate is disconnected
Definition: flagOperations.hpp:30
checkActionFlag
bool checkActionFlag(uint16_t flags, FlagIndex flag)
Definition: flagOperations.hpp:85
child_flag
constexpr uint16_t child_flag
overload of extra_flag4 indicating a message is from a child object
Definition: flagOperations.hpp:49
clone_flag
@ clone_flag
flag indicating the filter is a clone filter or the data needs to be cloned
Definition: flagOperations.hpp:25
destination_processing_flag
@ destination_processing_flag
flag indicating the message is for destination processing
Definition: flagOperations.hpp:28
clearActionFlag
void clearActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:100
observer_flag
constexpr uint16_t observer_flag
overload of optional_flag indicating that a federate is an observer only
Definition: flagOperations.hpp:43
extra_flag1
@ extra_flag1
extra flag
Definition: flagOperations.hpp:23
indicator_flag
@ indicator_flag
flag used for setting values
Definition: flagOperations.hpp:21
use_json_serialization_flag
@ use_json_serialization_flag
flag to indicate it should use the json packetization
Definition: flagOperations.hpp:22
non_granting_flag
constexpr uint16_t non_granting_flag
overload of extra_flag1 to indicate the request is from a non-granting federate
Definition: flagOperations.hpp:62
setActionFlag
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:77
cancel_flag
constexpr uint16_t cancel_flag
overload of extra_flag3 indicating an operation is canceled
Definition: flagOperations.hpp:40
empty_flag
@ empty_flag
flag indicating the message is empty
Definition: flagOperations.hpp:33
parent_flag
constexpr uint16_t parent_flag
overload of extra_flag3 indicating the message is from a parent object
Definition: flagOperations.hpp:46
error_flag
@ error_flag
flag indicating an error condition associated with the command
Definition: flagOperations.hpp:20
non_counting_flag
constexpr uint16_t non_counting_flag
overload of nameless_interface_flag indicating that a federate should not count in any totals
Definition: flagOperations.hpp:52
destination_target
@ destination_target
indicator that the target is a destination target
Definition: flagOperations.hpp:17
required_flag
@ required_flag
flag indicating that an action or match is required
Definition: flagOperations.hpp:18
optional_flag
@ optional_flag
flag indicating that a connection is optional and may not be matched
Definition: flagOperations.hpp:24
extra_flag4
@ extra_flag4
extra flag
Definition: flagOperations.hpp:32
targetted_flag
constexpr uint16_t targetted_flag
overload of extra_flag2 indicating an endpoint is targeted
Definition: flagOperations.hpp:55
core_flag
@ core_flag
flag indicating that message comes from a core vs a broker
Definition: flagOperations.hpp:19
toggleActionFlag
void toggleActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:107
make_flags
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:117