Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

LOCMEM Class Reference

#include <locmem.hh>

Inheritance diagram for LOCMEM:

Inheritance graph
[legend]
Collaboration diagram for LOCMEM:

Collaboration graph
[legend]

Public Methods

 LOCMEM (char *bufline, char *procline, int set_to_server=0, int set_to_master=0)
virtual ~LOCMEM ()
CMS_STATUS main_access (void *_local)

Protected Attributes

void * lm_addr
int buffer_id
BUFFERS_LIST_NODEmy_node

Static Protected Attributes

RCS_LINKED_LISTbuffers_list = (RCS_LINKED_LIST *) NULL

Constructor & Destructor Documentation

LOCMEM::LOCMEM char *    bufline,
char *    procline,
int    set_to_server = 0,
int    set_to_master = 0
 

Definition at line 32 of file locmem.cc.

00033                                   :
00034 CMS (bufline, procline, set_to_server)
00035 {
00036   my_node = (BUFFERS_LIST_NODE *) NULL;
00037   lm_addr = NULL;
00038 
00039   if (set_to_master == 1)
00040     {
00041       is_local_master = 1;
00042     }
00043   if (set_to_master == -1)
00044     {
00045       is_local_master = 0;
00046     }
00047 
00048   if (is_local_master)
00049     {
00050       if (buffers_list == NULL)
00051         {
00052           buffers_list = new RCS_LINKED_LIST;
00053         }
00054       if (buffers_list == NULL)
00055         {
00056           rcs_print_error ("LOCMEM: Can't create buffers_list.\n");
00057           status = CMS_CREATE_ERROR;
00058           return;
00059         }
00060       my_node = new BUFFERS_LIST_NODE;
00061       lm_addr = my_node->addr = DEBUG_MALLOC (size);
00062       if (my_node == NULL || lm_addr == NULL)
00063         {
00064           rcs_print_error ("Can't malloc needed space.\n");
00065           status = CMS_CREATE_ERROR;
00066           return;
00067         }
00068       my_node->size = size;
00069       strcpy (my_node->name, BufferName);
00070       memset (my_node->addr, 0, size);
00071       buffer_id = buffers_list->store_at_tail (my_node, sizeof (my_node), 0);
00072       return;
00073     }
00074 
00075   if (buffers_list == NULL)
00076     {
00077       rcs_print_error ("LOCMEM: buffers_list is NULL.\n");
00078       status = CMS_NO_MASTER_ERROR;
00079       return;
00080     }
00081 
00082   /* Search for a matching buffer name. */
00083   my_node = (BUFFERS_LIST_NODE *) buffers_list->get_head ();
00084   while (my_node != NULL)
00085     {
00086       if (!strcmp (BufferName, my_node->name))
00087         {
00088           /* Found it!!! */
00089           if (my_node->size != size)
00090             {
00091               rcs_print_error ("LOCMEM - size mismatch for buffer %s.\n",
00092                                BufferName);
00093               status = CMS_CONFIG_ERROR;
00094               return;
00095             }
00096           buffer_id = buffers_list->get_current_id ();
00097           lm_addr = my_node->addr;
00098           return;
00099         }
00100       my_node = (BUFFERS_LIST_NODE *) buffers_list->get_next ();
00101     }
00102   rcs_print_error ("LOCMEM: buffer not found on buffers_list.\n");
00103   status = CMS_NO_MASTER_ERROR;
00104   return;
00105 
00106 }

LOCMEM::~LOCMEM   [virtual]
 

Definition at line 109 of file locmem.cc.

00110 {
00111   if (NULL != buffers_list)
00112     {
00113       buffers_list->delete_node (buffer_id);
00114       if (0 == buffers_list->list_size)
00115         {
00116           delete buffers_list;
00117           buffers_list = (RCS_LINKED_LIST *) NULL;
00118         }
00119     }
00120 }


Member Function Documentation

CMS_STATUS LOCMEM::main_access void *    local_address [virtual]
 

Reimplemented from CMS.

Definition at line 123 of file locmem.cc.

00124 {
00125   internal_access (lm_addr, size, local_address);
00126   return status;
00127 }


Field Documentation

void* LOCMEM::lm_addr [protected]
 

Definition at line 34 of file locmem.hh.

int LOCMEM::buffer_id [protected]
 

Definition at line 35 of file locmem.hh.

BUFFERS_LIST_NODE* LOCMEM::my_node [protected]
 

Definition at line 36 of file locmem.hh.

RCS_LINKED_LIST * LOCMEM::buffers_list = (RCS_LINKED_LIST *) NULL [static, protected]
 

Definition at line 30 of file locmem.cc.


The documentation for this class was generated from the following files:
Generated on Sun Dec 2 15:58:44 2001 for rcslib by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001