summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ue4/protokoll.pdfbin408797 -> 424450 bytes
-rw-r--r--ue4/protokoll/mycpu.pngbin0 -> 127987 bytes
-rw-r--r--ue4/protokoll/mycpu.vppbin0 -> 116228 bytes
-rw-r--r--ue4/protokoll/protokoll.tex98
4 files changed, 61 insertions, 37 deletions
diff --git a/ue4/protokoll.pdf b/ue4/protokoll.pdf
index 06311b9..b3dc60d 100644
--- a/ue4/protokoll.pdf
+++ b/ue4/protokoll.pdf
Binary files differ
diff --git a/ue4/protokoll/mycpu.png b/ue4/protokoll/mycpu.png
new file mode 100644
index 0000000..c394605
--- /dev/null
+++ b/ue4/protokoll/mycpu.png
Binary files differ
diff --git a/ue4/protokoll/mycpu.vpp b/ue4/protokoll/mycpu.vpp
new file mode 100644
index 0000000..14730dc
--- /dev/null
+++ b/ue4/protokoll/mycpu.vpp
Binary files differ
diff --git a/ue4/protokoll/protokoll.tex b/ue4/protokoll/protokoll.tex
index 87a556a..53f57df 100644
--- a/ue4/protokoll/protokoll.tex
+++ b/ue4/protokoll/protokoll.tex
@@ -1,4 +1,5 @@
1\documentclass[12pt,a4paper,titlepage,oneside]{article} 1\documentclass[12pt,a4paper,titlepage,oneside]{article}
2
2\usepackage[utf8]{inputenc} 3\usepackage[utf8]{inputenc}
3\usepackage{oop_prot} 4\usepackage{oop_prot}
4\usepackage{url} 5\usepackage{url}
@@ -37,31 +38,44 @@ Manuel Mausz, \matrnr 0728348\\
37 38
38Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. 39Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe.
39 40
40Wie gefordert, wurden die zwei zusätzliche Datentypen, \mbox{CDatSet} und \mbox{CDatN}, implementiert und der Programmcode generisch gestaltet. 41Wie gefordert wurden die zusätzliche Datentypen \mbox{CDatSet} und
41 42\mbox{CDatN} implementiert und der Programmcode generisch gestaltet.
42Dabei wurde \mbox{CDatSet} vom existierenden Typ \mbox{CDat} und boost::operators<\mbox{CDatSet}> mittels Mehrfachvererbung abgeleitet. 43
43So war es möglich die Implementierung, mittels Codewiederverwendung, auf das Überschreiben eines Kopierkonstruktors und des Operators \mbox{operator>>()} zu beschränken. 44Dabei wurde \mbox{CDatSet} vom existierenden Typ \mbox{CDat} und
44 45\mbox{boost::operators<CDatSet>} mittels Mehrfachvererbung abgeleitet. So war es
45Da der Typ \mbox{CDatN} Werte variabler Bitlänge repräsentiert, war es notwendig diesen vollständig neu zu implementieren. Es wurde von boost::operators<\mbox{CDatN}> abgeleitet und dabei eine zusätzliche 46möglich die Implementierung, mittels Codewiederverwendung, auf das Überschreiben
46Methode \mbox{align()} definiert, die sicherstellt, dass der transportierte Wert immer auf die geforderte Bitanzahl konvertiert wird. 47eines Kopierkonstruktors und des Operators \mbox{operator>>()} zu beschränken.
47Weiters wurde ein Kopierkonstruktor definiert, der einen Integerwert und einen vorzeichenlosen Integerwert als Argument erwartet. 48
48Letzterer ist mit dem Defaultwert 31 deklariert und repräsentiert die Bitanzahl, auf die ersterer konvertiert wird. Damit ist es möglich alle vorhandenen Datentypen einheitlich zu verarbeiten. 49Da der Typ \mbox{CDatN} Werte variabler Bitlänge repräsentiert, war es notwendig
49Der Defaultkonstruktor wurde wie gewünscht deaktiviert. 50diesen vollständig neu zu implementieren. Es wurde von
50 51\mbox{boost::operators<CDatN>} abgeleitet und dabei in jeder
51Um nun die Wahl des Datentyps zu ermöglichen, wurde die Synopsis des Programms mit \mbox{``-f''} erweitert. 52Methode sicherstellt, dass der transportierte Wert immer auf die geforderte
52Der Parameter dieser Option muss \mbox{``s''} oder ein Wert zwischen ``2'' und ``32'' sein. 53Bitanzahl beschränkt wird. Weiters wurde ein Kopierkonstruktor definiert, der
53Im Hauptprogramm wird nun anhand dieses Parameters der zuständige Datentyp instanziert und die Templatemethode 54einen Integerwert und einen vorzeichenlosen Integerwert als Argument erwartet.
54\mbox{cpu\_run()} aufgerufen, welche die Initialisierung und Abarbeitung des Programms anstößt. 55Letzterer ist mit dem Defaultwert 31 deklariert und repräsentiert die Bitanzahl,
55 56auf die Ersterer beschränkt wird. Damit ist es möglich alle vorhandenen
56Damit das Programm mit den verschiedenen Datentypen umgehen kann, wurden \mbox{CCPU}, \mbox{CMem}, \mbox{CProgram}, \mbox{CInstuction} und die abgeleiteten \mbox{Instructions} 57Datentypen einheitlich zu verarbeiten. Der Defaultkonstruktor wurde wie
57zu Templates umgewandelt, die als Typparameter den, im Hauptprogramm, instanzierten Datentyp erhalten. 58gewünscht deaktiviert.
59
60Um nun die Wahl des Datentyps zu ermöglichen, wurde die Synopsis des Programms
61mit \mbox{``-f''} erweitert. Der Parameter dieser Option muss \mbox{``s''} oder
62ein Wert zwischen ``2'' und ``32'' sein. Im Hauptprogramm wird anhand dieses
63Parameters der zuständige Datentyp instanziert und die Templatemethode
64\mbox{cpu\_run()} aufgerufen, welche die Initialisierung und Abarbeitung des
65Programms anstößt.
66
67Damit das Programm mit den verschiedenen Datentypen umgehen kann, wurden
68\mbox{CCPU}, \mbox{CMem}, \mbox{CProgram}, \mbox{CInstuction} und die
69abgeleiteten \mbox{Instructions} zu Templates umgewandelt, die als
70Template-Parameter den Typ des im Hauptprogramm instanzierten Datentyps,
71erwarten.
58 72
59\newpage 73\newpage
60 74
61%================================================================== 75%==================================================================
62\begin{center} 76\begin{center}
63 \begin{figure}[htb] 77 \begin{figure}[htb]
64 \epsfxsize=1.6\textwidth\epsfbox{mycpu.png} 78 \epsfxsize=1.1\textwidth\epsfbox{mycpu.png}
65 \caption{Klassendiagramm 1} 79 \caption{Klassendiagramm 1}
66 \label{fig:classdiagram1} 80 \label{fig:classdiagram1}
67 \end{figure} 81 \end{figure}
@@ -71,43 +85,53 @@ zu Templates umgewandelt, die als Typparameter den, im Hauptprogramm, instanzier
71\newpage 85\newpage
72\subsection{Verwaltung der Ressourcen} 86\subsection{Verwaltung der Ressourcen}
73 87
74Die Register von \mbox{CCPU} werden nun, anstatt in einem Array, in einem Vector verwaltet. 88Die Register von \mbox{CCPU} werden nun, anstatt in einem Array, in einem Vector
75Dieser wird mit der Anzahl der Register und dem, im Hauptprogramm, instanzierten Datentyp initialisiert. 89verwaltet. Dieser wird mit der Anzahl der Register und dem, im Hauptprogramm,
76Dadurch ist das Löschen der Register im Destruktor nicht mehr notwendig. 90instanzierten Datentyp initialisiert. Dadurch ist das eigenhändige Löschen der
91Register im Destruktor nicht mehr notwendig, da dies der Destruktor des Vectors
92erledigt.
77 93
78Siehe auch Punkt~\ref{Probleme und Fallstricke}.\\ 94Siehe auch Punkt~\ref{Probleme und Fallstricke}.\\
79 95
80\subsection{Fehlerbehandlung} 96\subsection{Fehlerbehandlung}
81 97
82Es wurden mehrere Exceptions, als Subklassen der jeweiligen Templateklassen, von Typ \mbox{std::invalid\_argument} abgeleitet. 98Es wurden mehrere Exceptions von der Klasse \mbox{std::invalid\_argument}
83Diese sind \mbox{CCPUError}, \mbox{CInstructionError}, \mbox{CMemError} und \mbox{CProgramError}. 99abgeleitet. Diese sind \mbox{CCPUError}, \mbox{CInstructionError},
100\mbox{CMemError} und \mbox{CProgramError} und werden von ihren
101zugehörigen Klassen entsprechend geworfen.
84 102
85Wird zB.: eine Exception von Typ \mbox{CInstructinError} geworfen, so wird sie in \mbox{CCPU} zu \mbox{CCPUError} umgewandelt und an das Hauptprogramm weitergereicht, 103Wird zB.: eine Exception von Typ \mbox{CInstructinError} geworfen, so wird sie
86wo wider eine Umwandlung in \mbox{runtime\_error()} stattfindet. Das Fangen einer \mbox{runtime\_error()} Exeption bewirkt eine fehlerbeschreibende Ausgabe auf \mbox{std::cerr} 104in \mbox{CCPU} zu \mbox{CCPUError} umgewandelt und an das Hauptprogramm
87und den Programmabbruch mit Exitstatus 1. 105weitergereicht, in dem wiederum eine Umwandlung in \mbox{runtime\_error()}
106stattfindet. Das Fangen einer \mbox{runtime\_error()} Exeption bewirkt eine
107fehlerbeschreibende Ausgabe auf \mbox{std::cerr} und den Programmabbruch mit
108Exitstatus 1.
88 109
89\subsection{Implementierung} 110\subsection{Implementierung}
90 111
91Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie 112Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie
92Punkt~\ref{Listings}.\\ 113Punkt~\ref{Listings}.\\
93 114
94
95
96\section{Projektverlauf} 115\section{Projektverlauf}
97 116
98\subsection{Probleme und Fallstricke}\label{Probleme und Fallstricke} 117\subsection{Probleme und Fallstricke}\label{Probleme und Fallstricke}
99 118
100\mbox{CDatN}: 119\mbox{CDatN}:
101 120
102Mit der, in der Angabe vorgeschlagenen Methode zur Begrenzung der Bitanzahl, ist es nur möglich positive Zahlen zu verarbeiten. 121Mit der in der Angabe vorgeschlagenen Methode zur Begrenzung der Bitanzahl, ist
103Somit entspricht -1 dem Maximum der, mit der Bitanzahl, darstellbaren positiven Zahl usw.. 122es nur möglich positive Zahlen zu verarbeiten. Somit entspricht -1 dem Maximum
123der, mit der Bitanzahl, darstellbaren positiven Zahl usw..
104 124
105Ein weiteres Problem besteht darin, wenn die Anzahl der Instruktionen in CProgram, den maximal darstellbaren Wert übersteigt. 125Ein weiteres Problem besteht darin, wenn Register nicht mehr gelesen werden
106In diesen Fall ist das Programmverhalten undefiniert. 126können, weil der Index des Registers ausserhalb des Bereichs des Datentyps
127liegt. In diesen Fall ist das Programmverhalten undefiniert.
107 128
108Auf Grund der Forderung, den Defaultkonstruktor von \mbox{CDatN} zu deaktivieren, wurden einige Probleme initiiert. 129Auf Grund der Forderung, den Defaultkonstruktor von \mbox{CDatN} zu
109Es war nicht weiter möglich, die Register von \mbox{CCPU} in einem Array zu organisieren, da zur Deklaration ein Defaultkonstruktor notwendig ist. 130deaktivieren, traten einige Probleme auf. So war es beispielsweise nicht weiter
110Weiters musste eine Alternative zum, nicht mehr anwendbaren \mbox{boost::lexical\_cast} in \mbox{CMem} implementiert werden. 131möglich, die Register von \mbox{CCPU} in einem Array zu organisieren, da zur
132Deklaration ein Defaultkonstruktor notwendig ist. Weiters musste eine
133Alternative zum nicht mehr anwendbaren \mbox{boost::lexical\_cast} in
134\mbox{CMem} implementiert werden.
111 135
112\subsection{Arbeitsaufwand} 136\subsection{Arbeitsaufwand}
113 137