From 87a3b3b466ebc0859bee7ffe0f5b461ce49227d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Neuwirth?= 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') 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