Go to the documentation of this file.00001 #ifndef OMG_DDS_SUB_READERSTATE_HPP_
00002 #define OMG_DDS_SUB_READERSTATE_HPP_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <bitset>
00023
00024 #include <dds/core/types.hpp>
00025 #include <dds/sub/subfwd.hpp>
00026
00027
00028 namespace dds { namespace sub { namespace status {
00029
00030
00031 class SampleState : public std::bitset<OMG_DDS_STATE_BIT_COUNT> {
00032 public:
00033 typedef std::bitset<OMG_DDS_STATE_BIT_COUNT> MaskType;
00034
00035 public:
00036 SampleState() : MaskType() { }
00037 SampleState(const SampleState& src) : MaskType(src) { }
00038 SampleState(const MaskType& src) : MaskType(src) { }
00039
00040 public:
00041 inline static const SampleState read() {
00042 return SampleState(0x0001 << 0u);
00043 }
00044
00045 inline static const SampleState not_read() {
00046 return SampleState(0x0001 << 1u);
00047 }
00048
00049 inline static const SampleState any() {
00050 return SampleState(~0u);
00051 }
00052
00053 private:
00054 SampleState(uint32_t i) : MaskType(i) { }
00055 };
00056
00057
00058 class ViewState : public std::bitset<OMG_DDS_STATE_BIT_COUNT> {
00059 public:
00060 typedef std::bitset<OMG_DDS_STATE_BIT_COUNT> MaskType;
00061
00062 public:
00063 ViewState() : MaskType() { }
00064 ViewState(const ViewState& src) : MaskType(src) { }
00065 ViewState(const MaskType& src) : MaskType(src) { }
00066
00067 public:
00068 inline static const ViewState new_view() {
00069 return ViewState(0x0001 << 0u);
00070 }
00071
00072 inline static const ViewState not_new_view() {
00073 return ViewState(0x0001 << 1u);
00074 }
00075
00076 inline static const ViewState any() {
00077 return ViewState(~0u);
00078 }
00079 private:
00080 ViewState(uint32_t m) : MaskType(m) { }
00081
00082 };
00083
00084
00085 class InstanceState : public std::bitset<OMG_DDS_STATE_BIT_COUNT> {
00086 public:
00087 typedef std::bitset<OMG_DDS_STATE_BIT_COUNT> MaskType;
00088
00089 public:
00090 InstanceState() : MaskType() { }
00091 InstanceState(const InstanceState& src) : MaskType(src) { }
00092 InstanceState(const MaskType& src) : MaskType(src) { }
00093
00094 public:
00095 inline static const InstanceState alive() {
00096 return InstanceState(0x0001 << 0u);
00097 }
00098
00099 inline static const InstanceState not_alive_disposed() {
00100 return InstanceState(0x0001 << 1u);
00101 }
00102
00103 inline static const InstanceState not_alive_no_writers() {
00104 return InstanceState(0x0001 << 2u);
00105 }
00106
00107 inline static const InstanceState not_alive_mask() {
00108 return not_alive_disposed() | not_alive_no_writers();
00109 }
00110
00111 inline static const InstanceState any() {
00112 return InstanceState(~0u);
00113 }
00114 private:
00115 InstanceState(uint32_t m) : MaskType(m) { }
00116
00117 };
00118
00119 class ReaderState {
00120 public:
00121 ReaderState();
00122
00123 ReaderState(const dds::sub::status::SampleState& ss)
00124 : ss_(ss),
00125 vs_(dds::sub::status::ViewState::any()),
00126 is_(dds::sub::status::InstanceState::any())
00127 { }
00128
00129 ReaderState(const dds::sub::status::ViewState& vs)
00130 : ss_(dds::sub::status::SampleState::any()),
00131 vs_(vs),
00132 is_(dds::sub::status::InstanceState::any())
00133 { }
00134
00135 ReaderState(const dds::sub::status::InstanceState& is)
00136 : ss_(dds::sub::status::SampleState::any()),
00137 vs_(dds::sub::status::ViewState::any()),
00138 is_(is)
00139 { }
00140
00141 ReaderState(const dds::sub::status::SampleState& ss,
00142 const dds::sub::status::ViewState& vs,
00143 const dds::sub::status::InstanceState& is)
00144 : ss_(ss), vs_(vs), is_(is)
00145 { }
00146
00147 ReaderState& operator << (const dds::sub::status::SampleState& ss) {
00148 ss_ = ss;
00149 return *this;
00150 }
00151 ReaderState& operator << (const dds::sub::status::InstanceState& is) {
00152 is_ = is;
00153 return *this;
00154 }
00155 ReaderState& operator << (const dds::sub::status::ViewState& vs) {
00156 vs_ = vs;
00157 return *this;
00158 }
00159
00160 const ReaderState& operator >> (dds::sub::status::SampleState& ss) const {
00161 ss = ss_;
00162 return *this;
00163 }
00164
00165 const ReaderState& operator >> (dds::sub::status::InstanceState& is) const {
00166 is = is_;
00167 return *this;
00168 }
00169
00170 const ReaderState& operator >> (dds::sub::status::ViewState& vs) const {
00171 vs = vs_;
00172 return *this;
00173 }
00174
00175 const dds::sub::status::SampleState& sample_state() const {
00176 return ss_;
00177 }
00178
00179 const void sample_state(const dds::sub::status::SampleState& ss) {
00180 *this << ss;
00181 }
00182
00183 const dds::sub::status::InstanceState& instance_state() const{
00184 return is_;
00185 }
00186 void instance_state(const dds::sub::status::InstanceState& is) {
00187 *this << is;
00188 }
00189
00190 const dds::sub::status::ViewState& view_state() const {
00191 return vs_;
00192 }
00193 void view_state(const dds::sub::status::ViewState& vs) {
00194 *this << vs;
00195 }
00196
00197 static ReaderState any() {
00198 return ReaderState(dds::sub::status::SampleState::any(),
00199 dds::sub::status::ViewState::any(),
00200 dds::sub::status::InstanceState::any());
00201 }
00202
00203 static ReaderState new_data() {
00204 return ReaderState(dds::sub::status::SampleState::not_read(),
00205 dds::sub::status::ViewState::any(),
00206 dds::sub::status::InstanceState::alive());
00207 }
00208
00209 static ReaderState any_data() {
00210 return ReaderState(dds::sub::status::SampleState::any(),
00211 dds::sub::status::ViewState::any(),
00212 dds::sub::status::InstanceState::alive());
00213 }
00214
00215 static ReaderState new_instance() {
00216 return ReaderState(dds::sub::status::SampleState::any(),
00217 dds::sub::status::ViewState::new_view(),
00218 dds::sub::status::InstanceState::alive());
00219 }
00220 private:
00221 dds::sub::status::SampleState ss_;
00222 dds::sub::status::ViewState vs_;
00223 dds::sub::status::InstanceState is_;
00224
00225 };
00226
00227 } } }
00228
00229
00230 #endif