www.cemf.ir
message.hpp
Go to the documentation of this file.
1 /*------------------------------- phasicFlow ---------------------------------
2  O C enter of
3  O O E ngineering and
4  O O M ultiscale modeling of
5  OOOOOOO F luid flow
6 ------------------------------------------------------------------------------
7  Copyright (C): www.cemf.ir
8  email: hamid.r.norouzi AT gmail.com
9 ------------------------------------------------------------------------------
10 Licence:
11  This file is part of phasicFlow code. It is a free software for simulating
12  granular and multiphase flows. You can redistribute it and/or modify it under
13  the terms of GNU General Public License v3 or any other later versions.
14 
15  phasicFlow is distributed to help others in their research in the field of
16  granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
17  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 
19 -----------------------------------------------------------------------------*/
20 #ifndef __message_hpp__
21 #define __message_hpp__
22 
23 #include <bitset>
24 #include <array>
25 
26 #include "types.hpp"
27 #include "iOstream.hpp"
28 
29 
30 namespace pFlow
31 {
32 
33 class message
34 {
35 public:
36  enum EVENT : size_t
37  {
38  DEFAULT = 0,
39  CAP_CHANGED = 1, // internal points capacity changed
40  SIZE_CHANGED = 2, // internal points size changed
41  ITEM_DELETE = 3, // internal points item deleted
42  ITEM_INSERT = 4, // internal points item inserted
43  RANGE_CHANGED = 5, // internal points range changed
44  ITEM_REARRANGE = 6, // internal points item rearrange
45  ITEM_FLAGCHANGED= 7, // internal points item flag changed, this occurs when transfer occurs
46  BNDR_REARRANGE = 8, // boundary indices rearrange
47  BNDR_TRANSFER = 9, // boundary indices transfered
48  BNDR_RESET = 10, // boundary indices reset entirely
49  BNDR_DELETE = 11, // boundary indices deleted
50  BNDR_APPEND = 12, //
51  BNDR_PROCTRANSFER_SEND = 13, // transfer of data between processors step 1
52  BNDR_PROCTRANSFER_RECIEVE = 14, // transfer of data between processors step 2
53  BNDR_PROCTRANSFER_WAITFILL = 15, // wait for data and fill the field
55  };
56 
57 
58 private:
59 
60  static constexpr size_t numberOfEvents_ = 17;
61 
62  std::bitset<numberOfEvents_> events_{0x0000};
63 
64  static
65  inline const std::array<word,numberOfEvents_> eventNames_
66  {
67  "",
68  "capacity",
69  "size",
70  "deletedIndices",
71  "insertedIndices",
72  "range",
73  "rearrangedIndices",
74  "transferredIndices",
75  "rearrangedIndices",
76  "transferredIndices",
77  "",
78  "deletedIndices",
79  "appendedIndices",
80  "transferredIndices",
81  "numToRecieve",
82  "insertedIndices",
83  "size"
84  };
85 
86 public:
87 
88  message()=default;
89 
90  message(EVENT evnt)
91  {
92  add(evnt);
93  }
94 
95  message(size_t i )
96  {
97  if(i<numberOfEvents_)
98  {
99  events_.set(i);
100  }
101  }
102 
103  message(const message&) = default;
104 
105  message(message&&) = default;
106 
107  message& operator=(const message&) = default;
108 
109  message& operator=(message&&) = default;
110 
111  ~message()=default;
112 
113  inline message& add( EVENT evnt)
114  {
115  events_.set(static_cast<size_t>(evnt));
116  return *this;
117  }
118 
119  inline const word& addAndName(EVENT evnt)
120  {
121  add(evnt);
122  return eventName(static_cast<size_t>(evnt));
123  }
124 
125  inline message& remove(EVENT evnt)
126  {
127  events_.set(static_cast<size_t>(evnt), false);
128  return *this;
129  }
130 
131  inline bool equivalentTo( EVENT evnt )const
132  {
133  return equivalentTo(static_cast<size_t>(evnt));
134  }
135 
136  inline bool equivalentTo(size_t i)const
137  {
138  return events_.test(i);
139  }
140 
141  inline bool isNull()const
142  {
143  return events_.none();
144  }
145 
146  inline auto size()const
147  {
148  return events_.size();
149  }
150 
151  inline
153  {
154  return add(evnt);
155  }
156 
157  inline
159  {
160  return remove(evnt);
161  }
162 
163  inline
164  message& operator+(const message& msg)
165  {
166  for(size_t i=0uL; i< events_.size(); i++)
167  {
168  if(msg.equivalentTo(i))
169  {
170  events_.set(i);
171  }
172  }
173  return *this;
174  }
175 
176  static
177  auto constexpr numEvents()
178  {
179  return numberOfEvents_;
180  }
181  static
183  {
184  message msg;
185  return msg+DEFAULT;
186  }
187 
188  static
190  {
191  message msg;
192  return msg;
193  }
194 
195  static
196  const word& eventName(size_t event)
197  {
198  return eventNames_[event];
199  }
200 
201 };
202 
203 inline
205 {
206  for(size_t i=msg.size(); i>0; i--)
207  {
208  os<< msg.equivalentTo(i-1)? '1':0;
209  }
210  os<<endl;
211 
212  return os;
213 }
214 
215 inline
217 {
218  message msg = message::Empty().add(evnt1).add(evnt2);
219  return msg;
220 }
221 
222 }
223 
224 #endif // __eventMessage_hpp__
pFlow::message::equivalentTo
bool equivalentTo(EVENT evnt) const
Definition: message.hpp:131
pFlow::message
Definition: message.hpp:33
pFlow::message::Default
static message Default()
Definition: message.hpp:182
pFlow::message::events_
std::bitset< numberOfEvents_ > events_
Definition: message.hpp:62
pFlow::message::operator-
message & operator-(EVENT evnt)
Definition: message.hpp:158
types.hpp
pFlow::message::BNDR_PROCTRANSFER_RECIEVE
@ BNDR_PROCTRANSFER_RECIEVE
Definition: message.hpp:52
pFlow::message::operator=
message & operator=(const message &)=default
pFlow::message::operator+
message & operator+(EVENT evnt)
Definition: message.hpp:152
pFlow::word
std::string word
Definition: builtinTypes.hpp:64
pFlow::message::numEvents
static constexpr auto numEvents()
Definition: message.hpp:177
pFlow::message::size
auto size() const
Definition: message.hpp:146
pFlow::message::eventNames_
static const std::array< word, numberOfEvents_ > eventNames_
Definition: message.hpp:66
pFlow::message::message
message(size_t i)
Definition: message.hpp:95
pFlow::endl
iOstream & endl(iOstream &os)
Add newline and flush stream.
Definition: iOstream.hpp:341
pFlow::message::SIZE_CHANGED
@ SIZE_CHANGED
Definition: message.hpp:40
pFlow::message::BNDR_REARRANGE
@ BNDR_REARRANGE
Definition: message.hpp:46
pFlow::message::BNDR_PROC_SIZE_CHANGED
@ BNDR_PROC_SIZE_CHANGED
Definition: message.hpp:54
pFlow::message::ITEM_REARRANGE
@ ITEM_REARRANGE
Definition: message.hpp:44
pFlow::message::BNDR_APPEND
@ BNDR_APPEND
Definition: message.hpp:50
pFlow::message::~message
~message()=default
pFlow::message::EVENT
EVENT
Definition: message.hpp:36
pFlow
Definition: demGeometry.hpp:27
pFlow::message::BNDR_RESET
@ BNDR_RESET
Definition: message.hpp:48
pFlow::message::equivalentTo
bool equivalentTo(size_t i) const
Definition: message.hpp:136
pFlow::message::numberOfEvents_
static constexpr size_t numberOfEvents_
Definition: message.hpp:60
pFlow::operator<<
INLINE_FUNCTION iOstream & operator<<(iOstream &str, const AB3History &ab3)
Definition: AdamsBashforth3.hpp:57
pFlow::message::message
message(EVENT evnt)
Definition: message.hpp:90
pFlow::message::ITEM_INSERT
@ ITEM_INSERT
Definition: message.hpp:42
pFlow::message::RANGE_CHANGED
@ RANGE_CHANGED
Definition: message.hpp:43
pFlow::message::operator+
message & operator+(const message &msg)
Definition: message.hpp:164
pFlow::message::ITEM_DELETE
@ ITEM_DELETE
Definition: message.hpp:41
pFlow::message::addAndName
const word & addAndName(EVENT evnt)
Definition: message.hpp:119
pFlow::message::message
message()=default
pFlow::message::BNDR_PROCTRANSFER_SEND
@ BNDR_PROCTRANSFER_SEND
Definition: message.hpp:51
pFlow::message::CAP_CHANGED
@ CAP_CHANGED
Definition: message.hpp:39
pFlow::message::remove
message & remove(EVENT evnt)
Definition: message.hpp:125
pFlow::message::Empty
static message Empty()
Definition: message.hpp:189
pFlow::message::BNDR_DELETE
@ BNDR_DELETE
Definition: message.hpp:49
iOstream.hpp
pFlow::message::isNull
bool isNull() const
Definition: message.hpp:141
pFlow::message::BNDR_TRANSFER
@ BNDR_TRANSFER
Definition: message.hpp:47
pFlow::iOstream
Interface class for any output stream.
Definition: iOstream.hpp:59
pFlow::message::BNDR_PROCTRANSFER_WAITFILL
@ BNDR_PROCTRANSFER_WAITFILL
Definition: message.hpp:53
pFlow::message::DEFAULT
@ DEFAULT
Definition: message.hpp:38
pFlow::operator+
message operator+(message::EVENT evnt1, message::EVENT evnt2)
Definition: message.hpp:216
pFlow::message::ITEM_FLAGCHANGED
@ ITEM_FLAGCHANGED
Definition: message.hpp:45
pFlow::message::add
message & add(EVENT evnt)
Definition: message.hpp:113
pFlow::message::eventName
static const word & eventName(size_t event)
Definition: message.hpp:196