From 87a3b3b466ebc0859bee7ffe0f5b461ce49227d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCnther=20Neuwirth?= <e0626638@student.tuwien.ac.at>
Date: Fri, 29 May 2009 19:43:29 +0200
Subject: Protocoll, conditions

---
 ue4/protokoll/protokoll.tex | 103 ++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 95 insertions(+), 8 deletions(-)

(limited to 'ue4/protokoll/protokoll.tex')

diff --git a/ue4/protokoll/protokoll.tex b/ue4/protokoll/protokoll.tex
index 3db10b0..6131cdb 100644
--- a/ue4/protokoll/protokoll.tex
+++ b/ue4/protokoll/protokoll.tex
@@ -37,7 +37,26 @@ Manuel Mausz, \matrnr 0728348\\
 
 Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe.
 
-TODO
+Wie gefordert, wurden die zwei zusätzliche Datentypen, \mbox{CDatSet} und \mbox{CDatN},  implementiert und der Programmcode generisch gestaltet. 
+
+Dabei wurde \mbox{CDatSet} vom existierenden Typ \mbox{CDat} und boost::operators<\mbox{CDatSet}> mittels Mehrfachvererbung abgeleitet.
+So war es möglich die Implemntierung, mittels Codewiederverwendung, auf das Überschreiben eines Kopierkonstruktors und des Operators \mbox{operator>>()} zu beschränken.  
+
+Da der Typ \mbox{CDatN} Werte variabler Bitlänge representiert, war es notwendig diesen vollständig neu zu implementieren. Es wurde von boost::operators<\mbox{CDatN}> abgeleitet und dabei eine zusätzliche 
+Methode  \mbox{align()} definiert, die sicherstellt, dass der transportierte Wert immer auf die geforderte Bitanzahl konvertiert wird.
+Weiters wurde ein Kopierkonstruktor definiert, der einen Integerwert und einen vorzeichenlosen Integerwert als Argument erwartet.
+Letzterer 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.
+Der Defaultkonstruktor wurde wie gewünscht deaktiviert.
+
+Um nun die Wahl des Datentyps zu ermöglichen, wurde die Synopsis des Programms mit \mbox{``-f''} erweitert.
+Der Parameter dieser Option muß \mbox{``s''} oder ein Wert zwischen ``2'' und ``32'' sein. 
+Im Hauptprogramm wird nun anhand dieses Parameters der zuständige Datentyp instanziert und die template Methode
+\mbox{cpu\_run()} aufgerufen, welche die Initialisierung und Abarbeitung des Programms anstößt.
+
+Damit das Programm mit den verschiedenen Datentypen umgehen kann, wurden \mbox{CCPU}, \mbox{CMem}, \mbox{CProgram}, \mbox{CInstuction} und die abgeleiteten  \mbox{Instructions}
+zu Templates umgewandelt, die als Typparameter den, im Hauptprogramm, instanzierten Datentyp erhalten.
+
+\newpage
 
 %==================================================================
 \begin{center}
@@ -49,23 +68,46 @@ TODO
 \end{center}
 %==================================================================
 
+\newpage
 \subsection{Verwaltung der Ressourcen}
 
-TODO
+Die Register von \mbox{CCPU} werden nun, anstatt in einem Array, in einem Vector verwaltet. 
+Dieser wird mit der Anzahl der Register und dem, im Hauptprogramm, instanzierten Datentyp initialisiert.
+Dadurch ist das Löschen der register im Destruktor nicht mehr notwendig.
+
+Siehe auch Punkt~\ref{Probleme und Fallstricke}.\\ 
 
 \subsection{Fehlerbehandlung}
 
-TODO
+Es wurden mehrere Exceptions, als Subklassen der jeweiligen Templateklassen, von Typ \mbox{std::invalid\_argument} abgeleitet.
+Diese sind \mbox{CCPUError}, \mbox{CInstructionError}, \mbox{CMemError} und \mbox{CProgramError}.
+
+Wird zB.: eine Exception von Typ \mbox{CInstructinError} geworfen, so wird sie in \mbox{CCPU} zu \mbox{CCPUError} umgewandelt und an das Hauptprogramm weitergereicht, 
+wo wider eine Umwandlung in \mbox{runtime\_error()} stattfindet. Das Fangen einer \mbox{runtime\_error()} Exeption bewirkt eine fehlerbeschreibende Ausgabe auf \mbox{std::cerr}
+und den Programmabbruch mit Exitstatus 1. 
 
 \subsection{Implementierung}
 
-TODO
+Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie
+Punkt~\ref{Listings}.\\
+
+
 
 \section{Projektverlauf}
 
-\subsection{Probleme und Fallstricke}
+\subsection{Probleme und Fallstricke}\label{Probleme und Fallstricke}
+
+\mbox{CDatN}:
+
+Mit der, in der Angabe vorgeschlagenen Methode zur Begrenzung der Bitanzahl,  ist es nur möglich positive Zahlen zu verarbeiten.
+Somit entspricht -1 dem Maximum der, mit der Bitanzahl, darstellbaren positiven Zahl usw..
+
+Ein weiteres Problem besteht darin, dass die Anzahl der Instruktionen in CProgram, den maximal darstellbaren Wert übersteigt.
+In diesen Fall ist das Programmverhalten undefiniert.
 
-TODO
+Auf Grund der Forderung, den Defaultkonstruktor von \mbox{CDatN} zu deaktivieren, wurden einige Probleme initiiert.
+Es war nicht weiter möglich, die Register von \mbox{CCPU} in einem Array zu organisieren, da zur Deklaration ein Defaultkonstruktor notwendig ist. 
+Weiters musste eine Alternative zum, nicht mehr anwendbaren \mbox{boost::lexical\_cast} in \mbox{CMem} implementiert werden.
 
 \subsection{Arbeitsaufwand}
 
@@ -73,9 +115,14 @@ TODO
   \toprule
   Entwicklungsschritt / Meilenstein & Arbeitsaufwand\\
   \midrule
-  TODO & TODO\\
+  Erstes Design & 1 Tage\\
   \hline
-  TODO & TODO\\
+  Implementierung & 2 Tage\\
+  \hline
+  Dokumentation (Doxygen) und Überprüfung aller\\
+  Anforderungen gemäß der Programmierrichtlinien & 4 Stunden\\
+  \hline
+  Erstellung des Protokolls & 2 Stunden\\
   \bottomrule
 \end{tabular}
 
@@ -88,5 +135,45 @@ TODO
 \subsection{mycpu.cpp}
 \lstinputlisting{../mycpu/mycpu.cpp}
 
+\newpage
+\subsection{cdat.h}
+\lstinputlisting{../mycpu/cdat.h}
+
+\newpage
+\subsection{cdatset.h}
+\lstinputlisting{../mycpu/cdatset.h}
+
+\newpage
+\subsection{cdatn.h}
+\lstinputlisting{../mycpu/cdatn.h}
+
+\newpage
+\subsection{cmem.h}
+\lstinputlisting{../mycpu/cmem.h}
+
+\newpage
+\subsection{cinstruction.h}
+\lstinputlisting{../mycpu/cinstruction.h}
+
+\newpage
+\subsection{instructions.h}
+\lstinputlisting{../mycpu/instructions.h}
+
+\newpage
+\subsection{cdisplay.h}
+\lstinputlisting{../mycpu/cdisplay.h}
+
+\newpage
+\subsection{displays.h}
+\lstinputlisting{../mycpu/displays.h}
+
+\newpage
+\subsection{cprogram.h}
+\lstinputlisting{../mycpu/cprogram.h}
+
+\newpage
+\subsection{ccpu.h}
+\lstinputlisting{../mycpu/ccpu.h}
+
 \end{document}
 
-- 
cgit v1.2.3

