rllib  1
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
Public Member Functions | Public Attributes | Private Attributes | List of all members
rlPlcState Class Reference

#include <rlplc.h>

Collaboration diagram for rlPlcState:
Collaboration graph
[legend]

Public Member Functions

 rlPlcState (int numInt=100, int numFloat=100, int numDouble=0, const char *shared_memory=NULL)
 
virtual ~rlPlcState ()
 
void clear ()
 
void rememberState ()
 
int intChanged (int index)
 
int floatChanged (int index)
 
int doubleChanged (int index)
 
int intHasIncreased (int index)
 
int floatHasIncreased (int index)
 
int doubleHasIncreased (int index)
 
int intHasDecreased (int index)
 
int floatHasDecreased (int index)
 
int doubleHasDecreased (int index)
 
int deltaInt (int index)
 
float deltaFloat (int index)
 
double deltaDouble (int index)
 
void set (int index, int bit)
 
void clear (int index, int bit)
 
int isSet (int index, int bit)
 
int isClear (int index, int bit)
 
int hasBeenSet (int index, int bit)
 
int hasBeenCleared (int index, int bit)
 
int maxInt ()
 
int maxFloat ()
 
int maxDouble ()
 

Public Attributes

int * i
 
int * i_old
 
float * f
 
float * f_old
 
double * d
 
double * d_old
 
rlSharedMemoryshm
 

Private Attributes

int max_int
 
int max_float
 
int max_double
 

Detailed Description

Definition at line 22 of file rlplc.h.

Constructor & Destructor Documentation

rlPlcState::rlPlcState ( int  numInt = 100,
int  numFloat = 100,
int  numDouble = 0,
const char *  shared_memory = NULL 
)

Definition at line 19 of file rlplc.cpp.

{
max_int = numInt;
if(max_int <= 0) max_int = 1;
max_float = numFloat;
if(max_float <= 0) max_float = 1;
max_double = numDouble;
if(max_double <= 0) max_double = 1;
if(shared_memory == NULL)
{ // use local memory
i = new int[max_int];
i_old = new int[max_int];
f = new float[max_float];
f_old = new float[max_float];
d = new double[max_double];
d_old = new double[max_double];
memset(i ,0,sizeof(int)*max_int);
memset(i_old,0,sizeof(int)*max_int);
memset(f ,0,sizeof(float)*max_float);
memset(f_old,0,sizeof(float)*max_float);
memset(d ,0,sizeof(double)*max_double);
memset(d_old,0,sizeof(double)*max_double);
}
else
{ // map memory to shared memory
shm = new rlSharedMemory(shared_memory, sizeof(int)*max_int*2 + sizeof(float)*max_float*2 + sizeof(double)*max_double*2 );
{
void *ptr = shm->getUserAdr();
i = (int *) ptr;
i_old = (int *) ptr + sizeof(int)*max_int;
f = (float *) ptr + sizeof(int)*max_int*2;
f_old = (float *) ptr + sizeof(int)*max_int*2 + sizeof(float)*max_float;
d = (double *) ptr + sizeof(int)*max_int*2 + sizeof(float)*max_float*2;
d_old = (double *) ptr + sizeof(int)*max_int*2 + sizeof(float)*max_float*2 + sizeof(double)*max_double;
}
else
{
printf("ERROR: rlPlcState sharedMemoryStatus(%s) is not OK\n", shared_memory);
}
}
}
rlPlcState::~rlPlcState ( )
virtual

Definition at line 62 of file rlplc.cpp.

{
if(shm == NULL)
{
delete [] i;
delete [] i_old;
delete [] f;
delete [] f_old;
delete [] d;
delete [] d_old;
}
else
{
delete shm;
}
}

Member Function Documentation

void rlPlcState::clear ( )

Definition at line 79 of file rlplc.cpp.

{
if(i != NULL) memset(i ,0,sizeof(int)*max_int);
if(i_old != NULL) memset(i_old,0,sizeof(int)*max_int);
if(f != NULL) memset(f ,0,sizeof(float)*max_float);
if(f_old != NULL) memset(f_old,0,sizeof(float)*max_float);
if(d != NULL) memset(d ,0,sizeof(double)*max_double);
if(d_old != NULL) memset(d_old,0,sizeof(double)*max_double);
}
void rlPlcState::clear ( int  index,
int  bit 
)

Definition at line 183 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return;
i[index] = i[index] & ~bit;
}
double rlPlcState::deltaDouble ( int  index)

Definition at line 171 of file rlplc.cpp.

{
if(index<0 || index >= max_double) return 0;
return d[index] - d_old[index];
}
float rlPlcState::deltaFloat ( int  index)

Definition at line 165 of file rlplc.cpp.

{
if(index<0 || index >= max_float) return 0;
return f[index] - f_old[index];
}
int rlPlcState::deltaInt ( int  index)

Definition at line 159 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return 0;
return i[index] - i_old[index];
}
int rlPlcState::doubleChanged ( int  index)

Definition at line 110 of file rlplc.cpp.

{
if(index<0 || index >= max_double) return 0;
if(d[index] == d_old[index]) return 0;
else return 1;
}
int rlPlcState::doubleHasDecreased ( int  index)

Definition at line 152 of file rlplc.cpp.

{
if(index<0 || index >= max_double) return 0;
if(d[index] < d_old[index]) return 1;
else return 0;
}
int rlPlcState::doubleHasIncreased ( int  index)

Definition at line 131 of file rlplc.cpp.

{
if(index<0 || index >= max_double) return 0;
if(d[index] > d_old[index]) return 1;
else return 0;
}
int rlPlcState::floatChanged ( int  index)

Definition at line 103 of file rlplc.cpp.

{
if(index<0 || index >= max_float) return 0;
if(f[index] == f_old[index]) return 0;
else return 1;
}
int rlPlcState::floatHasDecreased ( int  index)

Definition at line 145 of file rlplc.cpp.

{
if(index<0 || index >= max_float) return 0;
if(f[index] < f_old[index]) return 1;
else return 0;
}
int rlPlcState::floatHasIncreased ( int  index)

Definition at line 124 of file rlplc.cpp.

{
if(index<0 || index >= max_float) return 0;
if(f[index] > f_old[index]) return 1;
else return 0;
}
int rlPlcState::hasBeenCleared ( int  index,
int  bit 
)

Definition at line 214 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return 0;
if((i[index] & bit) == 0) // is bit clear ?
{
if((i_old[index] & bit) == 0) return 0; // both are clear
else return 1; // old one was set
}
return 0;
}
int rlPlcState::hasBeenSet ( int  index,
int  bit 
)

Definition at line 203 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return 0;
if(i[index] & bit) // is bit set ?
{
if(i_old[index] & bit) return 0; // both are set
else return 1; // old one was not set
}
return 0;
}
int rlPlcState::intChanged ( int  index)

Definition at line 96 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return 0;
if(i[index] == i_old[index]) return 0;
else return 1;
}
int rlPlcState::intHasDecreased ( int  index)

Definition at line 138 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return 0;
if(i[index] < i_old[index]) return 1;
else return 0;
}
int rlPlcState::intHasIncreased ( int  index)

Definition at line 117 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return 0;
if(i[index] > i_old[index]) return 1;
else return 0;
}
int rlPlcState::isClear ( int  index,
int  bit 
)

Definition at line 196 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return 0;
if(i[index] & bit) return 0;
else return 1;
}
int rlPlcState::isSet ( int  index,
int  bit 
)

Definition at line 189 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return 0;
if(i[index] & bit) return 1;
else return 0;
}
int rlPlcState::maxDouble ( )

Definition at line 235 of file rlplc.cpp.

{
return max_float - 1;
}
int rlPlcState::maxFloat ( )

Definition at line 230 of file rlplc.cpp.

{
return max_float - 1;
}
int rlPlcState::maxInt ( )

Definition at line 225 of file rlplc.cpp.

{
return max_int - 1;
}
void rlPlcState::rememberState ( )

Definition at line 89 of file rlplc.cpp.

{
memcpy(i_old,i,sizeof(int)*max_int);
memcpy(f_old,f,sizeof(float)*max_float);
memcpy(d_old,d,sizeof(double)*max_double);
}
void rlPlcState::set ( int  index,
int  bit 
)

Definition at line 177 of file rlplc.cpp.

{
if(index<0 || index >= max_int) return;
i[index] = i[index] | bit;
}

Member Data Documentation

double* rlPlcState::d

Definition at line 29 of file rlplc.h.

double * rlPlcState::d_old

Definition at line 29 of file rlplc.h.

float* rlPlcState::f

Definition at line 28 of file rlplc.h.

float * rlPlcState::f_old

Definition at line 28 of file rlplc.h.

int* rlPlcState::i

Definition at line 27 of file rlplc.h.

int * rlPlcState::i_old

Definition at line 27 of file rlplc.h.

int rlPlcState::max_double
private

Definition at line 56 of file rlplc.h.

int rlPlcState::max_float
private

Definition at line 56 of file rlplc.h.

int rlPlcState::max_int
private

Definition at line 56 of file rlplc.h.

rlSharedMemory* rlPlcState::shm

Definition at line 53 of file rlplc.h.


The documentation for this class was generated from the following files: