119 lines
1.9 KiB
C++
119 lines
1.9 KiB
C++
#include <iostream>
|
|
using namespace std;
|
|
|
|
#define ERROR_RINGPUFFER_EMPTY -1
|
|
#define ERROR_RINGPUFFER_FULL -2
|
|
#define RINGPUFFER_SIZE 8
|
|
|
|
class ringpuffer {
|
|
|
|
private:
|
|
unsigned int uispos; //schreib
|
|
unsigned int uirpos; //lese
|
|
unsigned int uinumelements;
|
|
int iArray[RINGPUFFER_SIZE];
|
|
|
|
public:
|
|
ringpuffer() {
|
|
cout << "Init\n" << endl;
|
|
uispos = 0;
|
|
uirpos = 0;
|
|
uinumelements = 0;
|
|
}
|
|
|
|
int storeelement(int ielement) {
|
|
|
|
if ((uispos + 1 == uirpos)
|
|
|| (uirpos == 0 && uispos + 1 == uinumelements)) {
|
|
printf("ERROR_RINGPUFFER_FULL\n");
|
|
return ERROR_RINGPUFFER_FULL;
|
|
}
|
|
|
|
iArray[uispos] = ielement;
|
|
uinumelements++;
|
|
|
|
uispos++;
|
|
|
|
if (uispos >= RINGPUFFER_SIZE) {
|
|
uispos = 0;
|
|
}
|
|
return 0;
|
|
}
|
|
int readelement(int& ielement) {
|
|
|
|
if (uirpos == uispos) {
|
|
printf("ERROR_RINGPUFFER_EMPTY\n");
|
|
return ERROR_RINGPUFFER_EMPTY;
|
|
}
|
|
ielement = iArray[uirpos];
|
|
uinumelements--;
|
|
uirpos++;
|
|
|
|
if (uirpos >= RINGPUFFER_SIZE) {
|
|
uirpos = 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void printArray() {
|
|
cout << "Print Array" << endl;
|
|
for (unsigned int i = 0; i < RINGPUFFER_SIZE; i++) {
|
|
printf("Index: %i --> %i", i, iArray[i]);
|
|
if (i == uirpos) {
|
|
printf(" --> Lesezeiger");
|
|
}
|
|
if (i == uispos) {
|
|
printf(" --> Schreibzeiger");
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
}
|
|
cout << endl;
|
|
}
|
|
};
|
|
|
|
class IOChannel {
|
|
|
|
private:
|
|
|
|
ringpuffer rpA[3];
|
|
|
|
public:
|
|
|
|
IOChannel() {
|
|
//rpA[0] = new ringpuffer();
|
|
}
|
|
|
|
int storeelement(unsigned int uichannel, int ielement) {
|
|
return rpA[uichannel].storeelement(ielement);
|
|
|
|
}
|
|
|
|
int readelement(unsigned int uichannel, int& ielement) {
|
|
return rpA[uichannel].readelement(ielement);
|
|
}
|
|
|
|
};
|
|
|
|
int main() {
|
|
int res;
|
|
int* i = &res;
|
|
|
|
IOChannel* ioc = new IOChannel();
|
|
|
|
ioc->storeelement(0, 5);
|
|
ioc->storeelement(1, 10);
|
|
ioc->storeelement(2, 15);
|
|
|
|
ioc->readelement(0, res);
|
|
printf("Read: %i\n\n", res); //5
|
|
|
|
ioc->readelement(2, res);
|
|
printf("Read: %i\n\n", res); //15
|
|
|
|
ioc->readelement(1, res);
|
|
printf("Read: %i\n\n", res); //10
|
|
|
|
}
|