helics  2.8.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 parent_flag = extra_flag3;
44 
46 constexpr uint16_t child_flag = extra_flag4;
47 
49 constexpr uint16_t non_counting_flag = empty_flag;
50 
52 constexpr uint16_t non_granting_flag = extra_flag1;
53 
55 constexpr uint16_t delayed_timing_flag = extra_flag2;
56 
58 constexpr uint16_t nameless_interface_flag = empty_flag;
59 
66 template<class FlagContainer, class FlagIndex>
67 inline void setActionFlag(FlagContainer& M, FlagIndex flag)
68 {
69  M.flags |= (static_cast<decltype(M.flags)>((1U) << (static_cast<uint16_t>((flag)))));
70 }
71 
74 template<class FlagIndex>
75 inline bool checkActionFlag(uint16_t flags, FlagIndex flag)
76 {
77  return ((flags & (static_cast<uint16_t>((1U) << (static_cast<uint16_t>((flag)))))) != 0U);
78 }
79 
81 template<class FlagContainer, class FlagIndex>
82 inline bool checkActionFlag(const FlagContainer& M, FlagIndex flag)
83 {
84  return ((M.flags & (static_cast<decltype(M.flags)>((1U) << (static_cast<uint16_t>((flag)))))) !=
85  0U);
86 }
87 
89 template<class FlagContainer, class FlagIndex>
90 inline void clearActionFlag(FlagContainer& M, FlagIndex flag)
91 {
92  M.flags &= static_cast<decltype(M.flags)>(~((1U) << (static_cast<uint16_t>((flag)))));
93 }
94 
96 inline constexpr uint16_t make_flags(unsigned int flag)
97 {
98  return static_cast<uint16_t>(1U << (flag));
99 }
100 
102 inline constexpr uint16_t make_flags(unsigned int flag1, unsigned int flag2)
103 {
104  return make_flags(flag1) | make_flags(flag2);
105 }
106 
108 inline constexpr uint16_t make_flags(unsigned int flag1, unsigned int flag2, unsigned int flag3)
109 {
110  return make_flags(flag1, flag2) | make_flags(flag3);
111 }
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:55
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:58
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:75
child_flag
constexpr uint16_t child_flag
overload of extra_flag4 indicating a message is from a child object
Definition: flagOperations.hpp:46
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:90
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:52
setActionFlag
void setActionFlag(FlagContainer &M, FlagIndex flag)
Definition: flagOperations.hpp:67
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 interface is nameless
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:43
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:49
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
core_flag
@ core_flag
flag indicating that message comes from a core vs a broker
Definition: flagOperations.hpp:19
make_flags
constexpr uint16_t make_flags(unsigned int flag)
Definition: flagOperations.hpp:96