Go to the documentation of this file.00001
00002
00003 #include "ace/Message_Queue_Vx.h"
00004 #include "ace/Log_Msg.h"
00005
00006 #if !defined (__ACE_INLINE__)
00007 #include "ace/Message_Queue_Vx.inl"
00008 #endif
00009
00010 ACE_RCSID (ace,
00011 Message_Queue_Vx,
00012 "$Id: Message_Queue_Vx.cpp 80826 2008-03-04 14:51:23Z wotte $")
00013
00014
00015 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00016
00017 #if defined (ACE_VXWORKS)
00018
00019
00020
00021
00022
00023 void
00024 ACE_Message_Queue_Vx::dump (void) const
00025 {
00026 #if defined (ACE_HAS_DUMP)
00027 ACE_TRACE ("ACE_Message_Queue_Vx::dump");
00028 ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
00029 switch (this->state_)
00030 {
00031 case ACE_Message_Queue_Base::ACTIVATED:
00032 ACE_DEBUG ((LM_DEBUG,
00033 ACE_TEXT ("state = ACTIVATED\n")));
00034 break;
00035 case ACE_Message_Queue_Base::DEACTIVATED:
00036 ACE_DEBUG ((LM_DEBUG,
00037 ACE_TEXT ("state = DEACTIVATED\n")));
00038 break;
00039 case ACE_Message_Queue_Base::PULSED:
00040 ACE_DEBUG ((LM_DEBUG,
00041 ACE_TEXT ("state = PULSED\n")));
00042 break;
00043 }
00044 ACE_DEBUG ((LM_DEBUG,
00045 ACE_TEXT ("low_water_mark = %d\n")
00046 ACE_TEXT ("high_water_mark = %d\n")
00047 ACE_TEXT ("cur_bytes = %d\n")
00048 ACE_TEXT ("cur_length = %d\n")
00049 ACE_TEXT ("cur_count = %d\n")
00050 ACE_TEXT ("head_ = %u\n")
00051 ACE_TEXT ("MSG_Q_ID = %u\n"),
00052 this->low_water_mark_,
00053 this->high_water_mark_,
00054 this->cur_bytes_,
00055 this->cur_length_,
00056 this->cur_count_,
00057 this->head_,
00058 this->tail_));
00059 ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
00060 #endif
00061 }
00062
00063 ACE_Message_Queue_Vx::ACE_Message_Queue_Vx (size_t max_messages,
00064 size_t max_message_length,
00065 ACE_Notification_Strategy *ns)
00066 : ACE_Message_Queue<ACE_NULL_SYNCH> (0, 0, ns),
00067 max_messages_ (static_cast<int> (max_messages)),
00068 max_message_length_ (static_cast<int> (max_message_length))
00069 {
00070 ACE_TRACE ("ACE_Message_Queue_Vx::ACE_Message_Queue_Vx");
00071
00072 if (this->open (max_messages_, max_message_length_, ns) == -1)
00073 ACE_ERROR ((LM_ERROR, ACE_TEXT ("open")));
00074 }
00075
00076 ACE_Message_Queue_Vx::~ACE_Message_Queue_Vx (void)
00077 {
00078 ACE_TRACE ("ACE_Message_Queue_Vx::~ACE_Message_Queue_Vx");
00079
00080 if (this->tail_ != 0 && this->close () == -1)
00081 ACE_ERROR ((LM_ERROR, ACE_TEXT ("close")));
00082 }
00083
00084
00085
00086
00087
00088 int
00089 ACE_Message_Queue_Vx::open (size_t max_messages,
00090 size_t max_message_length,
00091 ACE_Notification_Strategy *ns)
00092 {
00093 ACE_TRACE ("ACE_Message_Queue_Vx::open");
00094 this->high_water_mark_ = 0;
00095 this->low_water_mark_ = 0;
00096 this->cur_bytes_ = 0;
00097 this->cur_length_ = 0;
00098 this->cur_count_ = 0;
00099 this->head_ = 0;
00100 this->notification_strategy_ = ns;
00101 this->max_messages_ = static_cast<int> (max_messages);
00102 this->max_message_length_ = static_cast<int> (max_message_length);
00103
00104 if (tail_)
00105 {
00106
00107 close ();
00108 activate_i ();
00109 }
00110
00111 return (this->tail_ =
00112 reinterpret_cast<ACE_Message_Block *> (
00113 ::msgQCreate (max_messages_,
00114 max_message_length_,
00115 MSG_Q_FIFO))) == 0 ? -1 : 0;
00116 }
00117
00118
00119
00120 int
00121 ACE_Message_Queue_Vx::close (void)
00122 {
00123 ACE_TRACE ("ACE_Message_Queue_Vx::close");
00124
00125
00126
00127 this->deactivate_i ();
00128
00129
00130
00131
00132
00133 return ::msgQDelete (msgq ());
00134 }
00135
00136 bool
00137 ACE_Message_Queue_Vx::is_empty_i (void)
00138 {
00139 ACE_TRACE ("ACE_Message_Queue_Vx::is_empty_i");
00140 return ::msgQNumMsgs (msgq ()) == 0;
00141 }
00142
00143 bool
00144 ACE_Message_Queue_Vx::is_full_i (void)
00145 {
00146 ACE_TRACE ("ACE_Message_Queue_Vx::is_full_i");
00147 return ::msgQNumMsgs (msgq ()) >= max_messages_;
00148 }
00149
00150 size_t
00151 ACE_Message_Queue_Vx::high_water_mark (void)
00152 {
00153 ACE_TRACE ("ACE_Message_Queue_Vx::high_water_mark");
00154 ACE_NOTSUP_RETURN ((size_t) -1);
00155 }
00156
00157 void
00158 ACE_Message_Queue_Vx::high_water_mark (size_t)
00159 {
00160 ACE_TRACE ("ACE_Message_Queue_Vx::high_water_mark");
00161 ACE_NOTSUP;
00162 }
00163
00164 size_t
00165 ACE_Message_Queue_Vx::low_water_mark (void)
00166 {
00167 ACE_TRACE ("ACE_Message_Queue_Vx::low_water_mark");
00168
00169
00170 ACE_NOTSUP_RETURN ((size_t) -1);
00171 }
00172
00173 void
00174 ACE_Message_Queue_Vx::low_water_mark (size_t)
00175 {
00176 ACE_TRACE ("ACE_Message_Queue_Vx::low_water_mark");
00177 ACE_NOTSUP;
00178 }
00179
00180 size_t
00181 ACE_Message_Queue_Vx::message_bytes (void)
00182 {
00183 ACE_TRACE ("ACE_Message_Queue_Vx::message_bytes");
00184 ACE_NOTSUP_RETURN ((size_t) -1);
00185 }
00186
00187 size_t
00188 ACE_Message_Queue_Vx::message_length (void)
00189 {
00190 ACE_TRACE ("ACE_Message_Queue_Vx::message_length");
00191 ACE_NOTSUP_RETURN ((size_t) -1);
00192 }
00193
00194 size_t
00195 ACE_Message_Queue_Vx::message_count (void)
00196 {
00197 ACE_TRACE ("ACE_Message_Queue_Vx::message_count");
00198
00199
00200 return ::msgQNumMsgs (msgq ());
00201 }
00202
00203 void
00204 ACE_Message_Queue_Vx::message_bytes (size_t)
00205 {
00206 ACE_TRACE ("ACE_Message_Queue_Vx::message_bytes");
00207 ACE_NOTSUP;
00208 }
00209
00210 void
00211 ACE_Message_Queue_Vx::message_length (size_t)
00212 {
00213 ACE_TRACE ("ACE_Message_Queue_Vx::message_length");
00214 ACE_NOTSUP;
00215 }
00216
00217 int
00218 ACE_Message_Queue_Vx::signal_enqueue_waiters (void)
00219 {
00220
00221 return 0;
00222 }
00223
00224 int
00225 ACE_Message_Queue_Vx::signal_dequeue_waiters (void)
00226 {
00227
00228 return 0;
00229 }
00230
00231 int
00232 ACE_Message_Queue_Vx::enqueue_tail_i (ACE_Message_Block *new_item)
00233 {
00234 ACE_TRACE ("ACE_Message_Queue_Vx::enqueue_tail_i");
00235
00236 if (new_item == 0)
00237 return -1;
00238
00239
00240
00241
00242 ++this->cur_count_;
00243
00244
00245 if (::msgQSend (msgq (),
00246 new_item->rd_ptr (),
00247 new_item->size (),
00248 WAIT_FOREVER,
00249 MSG_PRI_NORMAL) == OK)
00250 return ::msgQNumMsgs (msgq ());
00251 else
00252 return -1;
00253 }
00254
00255 int
00256 ACE_Message_Queue_Vx::enqueue_head_i (ACE_Message_Block *new_item)
00257 {
00258 ACE_TRACE ("ACE_Message_Queue_Vx::enqueue_head_i");
00259
00260
00261 return enqueue_tail_i (new_item);
00262 }
00263
00264 int
00265 ACE_Message_Queue_Vx::enqueue_i (ACE_Message_Block *new_item)
00266 {
00267 ACE_TRACE ("ACE_Message_Queue_Vx::enqueue_i");
00268
00269 if (new_item == 0)
00270 return -1;
00271
00272 if (this->head_ == 0)
00273
00274 return this->enqueue_head_i (new_item);
00275 else
00276 ACE_NOTSUP_RETURN (-1);
00277 }
00278
00279 int
00280 ACE_Message_Queue_Vx::enqueue_deadline_i (ACE_Message_Block *new_item)
00281 {
00282 ACE_TRACE ("ACE_Message_Queue_Vx::enqueue_deadline_i");
00283
00284
00285 return enqueue_tail_i (new_item);
00286 }
00287
00288
00289
00290
00291
00292 int
00293 ACE_Message_Queue_Vx::dequeue_head_i (ACE_Message_Block *&first_item)
00294 {
00295 ACE_TRACE ("ACE_Message_Queue_Vx::dequeue_head_i");
00296
00297
00298
00299
00300 if (first_item == 0 || first_item->wr_ptr () == 0)
00301 return -1;
00302
00303 if (::msgQReceive (msgq (),
00304 first_item->wr_ptr (),
00305 first_item->size (),
00306 WAIT_FOREVER) == ERROR)
00307 return -1;
00308 else
00309 return ::msgQNumMsgs (msgq ());
00310 }
00311
00312 int
00313 ACE_Message_Queue_Vx::dequeue_prio_i (ACE_Message_Block *& )
00314 {
00315 ACE_TRACE ("ACE_Message_Queue_Vx::dequeue_prio_i");
00316 ACE_NOTSUP_RETURN (-1);
00317 }
00318
00319 int
00320 ACE_Message_Queue_Vx::dequeue_tail_i (ACE_Message_Block *& )
00321 {
00322 ACE_TRACE ("ACE_Message_Queue_Vx::dequeue_tail_i");
00323 ACE_NOTSUP_RETURN (-1);
00324 }
00325
00326 int
00327 ACE_Message_Queue_Vx::dequeue_deadline_i (ACE_Message_Block *& )
00328 {
00329 ACE_TRACE ("ACE_Message_Queue_Vx::dequeue_deadline_i");
00330 ACE_NOTSUP_RETURN (-1);
00331 }
00332
00333
00334
00335 int
00336 ACE_Message_Queue_Vx::wait_not_full_cond (ACE_Guard<ACE_Null_Mutex> &mon,
00337 ACE_Time_Value *tv)
00338 {
00339
00340 ACE_UNUSED_ARG (mon);
00341 ACE_UNUSED_ARG (tv);
00342
00343 return 0;
00344 }
00345
00346 int
00347 ACE_Message_Queue_Vx::wait_not_empty_cond (ACE_Guard<ACE_Null_Mutex> &mon,
00348 ACE_Time_Value *tv)
00349 {
00350
00351 ACE_UNUSED_ARG (mon);
00352 ACE_UNUSED_ARG (tv);
00353
00354 return 0;
00355 }
00356
00357 #if ! defined (ACE_NEEDS_FUNC_DEFINITIONS)
00358 int
00359 ACE_Message_Queue_Vx::peek_dequeue_head (ACE_Message_Block *&,
00360 ACE_Time_Value *)
00361 {
00362 ACE_NOTSUP_RETURN (-1);
00363 }
00364 #endif
00365
00366 #endif
00367
00368 ACE_END_VERSIONED_NAMESPACE_DECL