#ifndef SHMEM_HH
#define SHMEM_HH
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <stddef.h>
#include <sys/types.h>
#ifdef __cplusplus
}
#endif
#include "cms.hh"
#include "shm.hh"
#include "memsem.hh"
class SHMEM:public CMS {
public:
SHMEM(const char *name, long size, int neutral, key_t key, int m = 0);
SHMEM(const char *bufline, const char *procline, int set_to_server = 0,
int set_to_master = 0);
virtual ~ SHMEM();
CMS_STATUS main_access(void *_local, int *serial_number);
private:
int fast_mode;
int open();
int close();
key_t key;
key_t bsem_key; int second_read; RCS_SHAREDMEM *shm;
RCS_SEMAPHORE *sem;
int master;
double sem_delay;
struct mem_access_object mao;
enum SHMEM_MUTEX_TYPE {
NO_MUTEX,
MAO_MUTEX,
MAO_MUTEX_W_OS_SEM,
OS_SEM_MUTEX,
NO_INTERRUPTS_MUTEX,
NO_SWITCHING_MUTEX
};
int use_os_sem;
int use_os_sem_only;
SHMEM_MUTEX_TYPE mutex_type;
void *shm_addr_offset;
RCS_SEMAPHORE *bsem; int autokey_table_size;
};
#endif