-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfutter.h
More file actions
96 lines (78 loc) · 3.4 KB
/
Copy pathfutter.h
File metadata and controls
96 lines (78 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#ifndef FUTTER
#define FUTTER
// Beschreibt einen Futterdatensatz
// Futter wird den Zellen von aussen zugefuehrt
// Das Problem des Zellsystems besteht darin, dass es ohne Futter
// keine es limitierenden Umweltbedingungen vorfindet und das Zellsystem
// daher unkontrolliert wachsen wuerde.
// Letztendlich ist das Ganze eine Art Computervirus nur, dass das Zellsystem
// zumindest nicht mit dem primaeren Ziel programmiert wird eben solches zu erreichen
// auf Grund dessen, dass das System aber mutieren wird kann es sein, dass es virale
// Aspekte entwickeln wird. Um dem Herr zu werden wird der Futtertyp gebraucht.
// Ohne Futter stirbt der Organismus und ohne die Kenntnis des Aufbaus von Futter wird
// dieser auch kein Futter selbst schaffen koennen.
#include <constants.h>
#include <fstream>
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
class futtern
{
typedef struct futter
{
long vitamin_a;
long fett;
long kohlehydrate;
std::ostream& serialize(std::ostream& os) const {
char null = '\0';
os.write((char*)&vitamin_a, sizeof(vitamin_a));
os.write((char*)&fett, sizeof(fett));
os.write((char*)&kohlehydrate, sizeof(kohlehydrate));
os.write(&null, 1);
return os;
}
std::istream& deserialize(std::istream& is) {
is.read((char*)&vitamin_a, sizeof(vitamin_a));
is.read((char*)&fett, sizeof(fett));
is.read((char*)&kohlehydrate, sizeof(kohlehydrate));
return is;
}
void visualize(void)
{
cout << "Futtervorrat"<<endl;
cout << "Vitamin_A="<<vitamin_a<<endl;
cout << "Fett="<<fett<<endl;
cout << "Kohlehydrate="<<kohlehydrate<<endl;
cout << "-----------------------------------------------"<<endl;
}
};
private:
futter futter;
char* semaphore;
public:
bool lock; //Nur eine Zelle kann zu einem Zeitpunkt Futter entnehmen
futtern();
~futtern();
void anzeigen() { futter.visualize();};
void initialisiere_futter(long vitamin_a, long fett, long kohlehydrate)
{
futtern::futter.vitamin_a=vitamin_a;
futtern::futter.fett=fett;
futtern::futter.kohlehydrate=kohlehydrate;
}
void erzeuge_futter(void); // Zum erzeugen eines Futtervorrates
void hole_futter (void); // Futter aus dem Futtervorrat hohlen.
// Jede Zelle kann einen maximalen Futtervorrat aufnehmen
// der Parameter gibt an wieviel Futter geholt werden soll.
// Die Funktion liefert aber nicht so viel Futter zurueck
// wie angefordert wird sondern in Abhaengigkeit vom realen Futtervorrat eine Futtermenge
// bis zur maximal angeforderten.
// Der Futtervorrat wird jeweils um die entnommene Menge verringert.
long gibVitamin_A() {hole_futter();long i=(futter.vitamin_a>10?10:0); futter.vitamin_a-=i; erzeuge_futter(); return i;};
long gibFett() {hole_futter();long i=(futter.fett>10?10:0); futter.fett-=i; erzeuge_futter(); return i;};
long gibKohlehydrate() {hole_futter();long i=(futter.kohlehydrate>10?10:0); futter.kohlehydrate-=i; erzeuge_futter(); return i;};
bool futtern::exists (const std::string& name);
void warte_auf_futter(const std::string& name); // Serialisiert die Zugriffe auf die Futterquelle. Es darf nur eine Zelle zu einem Zeitpunkt Futter entnehmen
};
#endif