summaryrefslogblamecommitdiffstats
path: root/cpukit/rtems/inline/rtems/rtems/message.inl
blob: 18d793d2fe7e8eaeddaacf6844e21435c23460f6 (plain) (tree)


















                                                                          

                          






                                               


                         

 
                                    








                                            


                                            

                                          
                                                         








                                                       

                                                    

 
                                                                             




























































                                                                            










                                          





                                                                   



















                                                                           
/*  message.inl
 *
 *  This include file contains the static inline implementation of all
 *  inlined routines in the Message Manager.
 *
 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
 *  On-Line Applications Research Corporation (OAR).
 *  All rights assigned to U.S. Government, 1994.
 *
 *  This material may be reproduced by or for the U.S. Government pursuant
 *  to the copyright license under the clause at DFARS 252.227-7013.  This
 *  notice must appear in all copies of this file and its derivatives.
 *
 *  $Id$
 */

#ifndef __MESSAGE_QUEUE_inl
#define __MESSAGE_QUEUE_inl

#include <rtems/wkspace.h>

/*PAGE
 *
 *  _Message_queue_Copy_buffer
 *
 */

STATIC INLINE void _Message_queue_Copy_buffer (
  void      *source,
  void      *destination,
  unsigned32 size
)
{
  memcpy(destination, source, size);
}

/*PAGE
 *
 *  _Message_queue_Allocate_message_buffer
 *
 */

STATIC INLINE Message_queue_Buffer_control *
_Message_queue_Allocate_message_buffer (
    Message_queue_Control *the_message_queue
)
{
   return (Message_queue_Buffer_control *)
     _Chain_Get( &the_message_queue->Inactive_messages );
}

/*PAGE
 *
 *  _Message_queue_Free_message_buffer
 *
 */

STATIC INLINE void _Message_queue_Free_message_buffer (
    Message_queue_Control        *the_message_queue,
    Message_queue_Buffer_control *the_message
)
{
  _Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node );
}

/*PAGE
 *
 *  _Message_queue_Get_pending_message
 *
 */

STATIC INLINE
  Message_queue_Buffer_control *_Message_queue_Get_pending_message (
  Message_queue_Control *the_message_queue
)
{
  return (Message_queue_Buffer_control *)
    _Chain_Get_unprotected( &the_message_queue->Pending_messages );
}

/*PAGE
 *
 *  _Message_queue_Append
 *
 */

STATIC INLINE void _Message_queue_Append (
  Message_queue_Control        *the_message_queue,
  Message_queue_Buffer_control *the_message
)
{
  _Chain_Append( &the_message_queue->Pending_messages, &the_message->Node );
}

/*PAGE
 *
 *  _Message_queue_Prepend
 *
 */

STATIC INLINE void _Message_queue_Prepend (
  Message_queue_Control        *the_message_queue,
  Message_queue_Buffer_control *the_message
)
{
  _Chain_Prepend(
    &the_message_queue->Pending_messages,
    &the_message->Node
  );
}

/*PAGE
 *
 *  _Message_queue_Is_null
 *
 */

STATIC INLINE boolean _Message_queue_Is_null (
  Message_queue_Control *the_message_queue
)
{
  return ( the_message_queue == NULL  );
}


/*PAGE
 *
 *  _Message_queue_Free
 *
 */

STATIC INLINE void _Message_queue_Free (
  Message_queue_Control *the_message_queue
)
{
  if (the_message_queue->message_buffers)
  {
      _Workspace_Free((void *) the_message_queue->message_buffers);
      the_message_queue->message_buffers = 0;
  }
  
  _Objects_Free( &_Message_queue_Information, &the_message_queue->Object );
}

/*PAGE
 *
 *  _Message_queue_Get
 *
 */

STATIC INLINE Message_queue_Control *_Message_queue_Get (
  Objects_Id         id,
  Objects_Locations *location
)
{
  return (Message_queue_Control *)
     _Objects_Get( &_Message_queue_Information, id, location );
}

#endif
/* end of include file */