From 384539f7cc9feaa7ef7cee385cce472c6966c843 Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 27 Apr 2009 00:24:16 +0200 Subject: Adding ue1 --- ue1/protokoll/ClassDiagram1.png | Bin 0 -> 45422 bytes ue1/protokoll/Makefile | 19 ++++ ue1/protokoll/fancyheadings.sty | 166 +++++++++++++++++++++++++++++ ue1/protokoll/imgsynth.vpp | Bin 0 -> 53886 bytes ue1/protokoll/oop_prot.sty | 222 +++++++++++++++++++++++++++++++++++++++ ue1/protokoll/protokoll.tex | 226 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 633 insertions(+) create mode 100644 ue1/protokoll/ClassDiagram1.png create mode 100644 ue1/protokoll/Makefile create mode 100644 ue1/protokoll/fancyheadings.sty create mode 100644 ue1/protokoll/imgsynth.vpp create mode 100644 ue1/protokoll/oop_prot.sty create mode 100644 ue1/protokoll/protokoll.tex (limited to 'ue1/protokoll') diff --git a/ue1/protokoll/ClassDiagram1.png b/ue1/protokoll/ClassDiagram1.png new file mode 100644 index 0000000..8347d6f Binary files /dev/null and b/ue1/protokoll/ClassDiagram1.png differ diff --git a/ue1/protokoll/Makefile b/ue1/protokoll/Makefile new file mode 100644 index 0000000..a56bff6 --- /dev/null +++ b/ue1/protokoll/Makefile @@ -0,0 +1,19 @@ +# Makefile for protokoll +# Author: Manuel Mausz (0728348) +# Created: 14.04.2009 + +TEXFILE= protokoll.tex +PDFFILE= $(shell echo $(TEXFILE) | sed -e 's/\.tex$$/\.pdf/') +PDFLATEX= pdflatex +TMPDIR= tmp + +all: tex + +tex: + @echo $(PDFFILE)" lala" + @mkdir -p $(TMPDIR) + @$(PDFLATEX) -interaction=nonstopmode -output-directory=$(TMPDIR) $(TEXFILE) + @mv $(TMPDIR)/$(PDFFILE) ../ + @rm -rf $(TMPDIR) + +# vim600: noet sw=8 ts=8 diff --git a/ue1/protokoll/fancyheadings.sty b/ue1/protokoll/fancyheadings.sty new file mode 100644 index 0000000..c1e706e --- /dev/null +++ b/ue1/protokoll/fancyheadings.sty @@ -0,0 +1,166 @@ +% fancyheadings.sty version 1.94 +% Fancy headers and footers. +% Piet van Oostrum, Dept of Computer Science, University of Utrecht +% Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands +% Telephone: +31 30 2531806. Email: piet@cs.ruu.nl +% Sep 16, 1994 +% version 1.4: Correction for use with \reversemargin +% Sep 29, 1994: +% version 1.5: Added the \iftopfloat, \ifbotfloat and \iffloatpage commands +% Oct 4, 1994: +% version 1.6: Reset single spacing in headers/footers for use with +% setspace.sty or doublespace.sty +% Oct 4, 1994: +% version 1.7: changed \let\@mkboth\markboth to +% \def\@mkboth{\protect\markboth} to make it more robust +% Dec 5, 1994: +% version 1.8: corrections for amsbook/amsart: define \@chapapp and (more +% importantly) use the \chapter/sectionmark definitions from ps@headings if +% they exist (which should be true for all standard classes). +% May 31, 1995: +% version 1.9: The proposed \renewcommand{\headrulewidth}{\iffloatpage... +% construction in the doc did not work properly with the fancyplain style. +% June 1, 1995: +% version 1.91: The definition of \@mkboth wasn't restored on subsequent +% \pagestyle{fancy}'s. +% June 1, 1995: +% version 1.92: The sequence \pagestyle{fancyplain} \pagestyle{plain} +% \pagestyle{fancy} would erroneously select the plain version. +% June 1, 1995: +% version 1.93: \fancypagestyle command added. +% Dec 11, 1995: +% version 1.94: suggested by Conrad Hughes +% CJCH, Dec 11, 1995: added \footruleskip to allow control over footrule +% position (old hardcoded value of .3\normalbaselineskip is far too high +% when used with very small footer fonts). +% Jan 31, 1996: +% version 1.95: call \@normalsize in the reset code if that is defined, +% otherwise \normalsize. +% this is to solve a problem with ucthesis.cls, as this doesn't +% define \@currsize. Unfortunately for latex209 calling \normalsize doesn't +% work as this is optimized to do very little, so there \@normalsize should +% be called. Hopefully this code works for all versions of LaTeX known to +% mankind. + +\let\fancy@def\gdef +\def\lhead{\@ifnextchar[{\@xlhead}{\@ylhead}} +\def\@xlhead[#1]#2{\fancy@def\@elhead{#1}\fancy@def\@olhead{#2}} +\def\@ylhead#1{\fancy@def\@elhead{#1}\fancy@def\@olhead{#1}} + +\def\chead{\@ifnextchar[{\@xchead}{\@ychead}} +\def\@xchead[#1]#2{\fancy@def\@echead{#1}\fancy@def\@ochead{#2}} +\def\@ychead#1{\fancy@def\@echead{#1}\fancy@def\@ochead{#1}} + +\def\rhead{\@ifnextchar[{\@xrhead}{\@yrhead}} +\def\@xrhead[#1]#2{\fancy@def\@erhead{#1}\fancy@def\@orhead{#2}} +\def\@yrhead#1{\fancy@def\@erhead{#1}\fancy@def\@orhead{#1}} + +\def\lfoot{\@ifnextchar[{\@xlfoot}{\@ylfoot}} +\def\@xlfoot[#1]#2{\fancy@def\@elfoot{#1}\fancy@def\@olfoot{#2}} +\def\@ylfoot#1{\fancy@def\@elfoot{#1}\fancy@def\@olfoot{#1}} + +\def\cfoot{\@ifnextchar[{\@xcfoot}{\@ycfoot}} +\def\@xcfoot[#1]#2{\fancy@def\@ecfoot{#1}\fancy@def\@ocfoot{#2}} +\def\@ycfoot#1{\fancy@def\@ecfoot{#1}\fancy@def\@ocfoot{#1}} + +\def\rfoot{\@ifnextchar[{\@xrfoot}{\@yrfoot}} +\def\@xrfoot[#1]#2{\fancy@def\@erfoot{#1}\fancy@def\@orfoot{#2}} +\def\@yrfoot#1{\fancy@def\@erfoot{#1}\fancy@def\@orfoot{#1}} + +\newdimen\headrulewidth +\newdimen\footrulewidth +\newdimen\plainheadrulewidth +\newdimen\plainfootrulewidth +\newdimen\headwidth +\newdimen\footruleskip +\newif\if@fancyplain \@fancyplainfalse +\def\fancyplain#1#2{\if@fancyplain#1\else#2\fi} + +% Command to reset various things in the headers: +% a.o. single spacing (taken from setspace.sty) +% and the catcode of ^^M (so that epsf files in the header work if a +% verbatim crosses a page boundary) +\def\fancy@reset{\restorecr + \def\baselinestretch{1}% + \ifx\undefined\@newbaseline% NFSS not present; 2.09 or 2e + \ifx\@normalsize\undefined \normalsize % for ucthesis.cls + \else \@normalsize \fi + \else% NFSS (2.09) present + \@newbaseline% + \fi} + +% Initialization of the head and foot text. + +\headrulewidth 0.4pt +\footrulewidth\z@ +\plainheadrulewidth\z@ +\plainfootrulewidth\z@ +\footruleskip .3\normalbaselineskip + +\lhead[\fancyplain{}{\sl\rightmark}]{\fancyplain{}{\sl\leftmark}} +% i.e. empty on ``plain'' pages, \rightmark on even, \leftmark on odd pages +\chead{} +\rhead[\fancyplain{}{\sl\leftmark}]{\fancyplain{}{\sl\rightmark}} +% i.e. empty on ``plain'' pages, \leftmark on even, \rightmark on odd pages +\lfoot{} +\cfoot{\rm\thepage} % page number +\rfoot{} + +% Put together a header or footer given the left, center and +% right text, fillers at left and right and a rule. +% The \lap commands put the text into an hbox of zero size, +% so overlapping text does not generate an errormessage. + +\def\@fancyhead#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset\vbox{\hbox +{\rlap{\parbox[b]{\headwidth}{\raggedright#2\strut}}\hfill +\parbox[b]{\headwidth}{\centering#3\strut}\hfill +\llap{\parbox[b]{\headwidth}{\raggedleft#4\strut}}}\headrule}}#5} + + +\def\@fancyfoot#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset\vbox{\footrule +\hbox{\rlap{\parbox[t]{\headwidth}{\raggedright#2\strut}}\hfill +\parbox[t]{\headwidth}{\centering#3\strut}\hfill +\llap{\parbox[t]{\headwidth}{\raggedleft#4\strut}}}}}#5} + +\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi +\hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}} + +\def\footrule{{\if@fancyplain\let\footrulewidth\plainfootrulewidth\fi +\vskip-\footruleskip\vskip-\footrulewidth +\hrule\@width\headwidth\@height\footrulewidth\vskip\footruleskip}} + +\def\ps@fancy{% +\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}%for amsbook +\@ifundefined{chapter}{\def\sectionmark##1{\markboth +{\uppercase{\ifnum \c@secnumdepth>\z@ + \thesection\hskip 1em\relax \fi ##1}}{}}% +\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne + \thesubsection\hskip 1em\relax \fi ##1}}}% +{\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth>\m@ne + \@chapapp\ \thechapter. \ \fi ##1}}{}} +\def\sectionmark##1{\markright{\uppercase{\ifnum \c@secnumdepth >\z@ + \thesection. \ \fi ##1}}}}% +\csname ps@headings\endcsname % use \ps@headings defaults if they exist +\ps@@fancy +\gdef\ps@fancy{\@fancyplainfalse\ps@@fancy}% +\headwidth\textwidth} +\def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy} +\def\ps@plain@fancy{\@fancyplaintrue\ps@@fancy} +\def\ps@@fancy{% +\def\@mkboth{\protect\markboth}% +\def\@oddhead{\@fancyhead\@lodd\@olhead\@ochead\@orhead\@rodd}% +\def\@oddfoot{\@fancyfoot\@lodd\@olfoot\@ocfoot\@orfoot\@rodd}% +\def\@evenhead{\@fancyhead\@rodd\@elhead\@echead\@erhead\@lodd}% +\def\@evenfoot{\@fancyfoot\@rodd\@elfoot\@ecfoot\@erfoot\@lodd}% +} +\def\@lodd{\if@reversemargin\hss\else\relax\fi} +\def\@rodd{\if@reversemargin\relax\else\hss\fi} + +\let\latex@makecol\@makecol +\def\@makecol{\let\topfloat\@toplist\let\botfloat\@botlist\latex@makecol} +\def\iftopfloat#1#2{\ifx\topfloat\empty #2\else #1\fi} +\def\ifbotfloat#1#2{\ifx\botfloat\empty #2\else #1\fi} +\def\iffloatpage#1#2{\if@fcolmade #1\else #2\fi} + +\newcommand{\fancypagestyle}[2]{% + \@namedef{ps@#1}{\let\fancy@def\def#2\relax\ps@fancy}} diff --git a/ue1/protokoll/imgsynth.vpp b/ue1/protokoll/imgsynth.vpp new file mode 100644 index 0000000..b94b9e4 Binary files /dev/null and b/ue1/protokoll/imgsynth.vpp differ diff --git a/ue1/protokoll/oop_prot.sty b/ue1/protokoll/oop_prot.sty new file mode 100644 index 0000000..26a66e6 --- /dev/null +++ b/ue1/protokoll/oop_prot.sty @@ -0,0 +1,222 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% OOP_prot.sty +% +% +% 13.03.07 +% +% Institut f"ur Technische Informatik (182/1) +% Real Time Systems Group +% Technische Universit"at Wien +% 1040 Treitlstr. 3, 3. Stk. +% (www.vmars.tuwien.ac.at) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% packages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{fancyheadings} +\usepackage{german} +\usepackage{graphicx} +\usepackage{listings} +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{times} +\usepackage{epsfig} + +%in order to get the source code in a really good shape +\lstset{%backgroundcolor=\color[gray]{.9}, + extendedchars=true, + basicstyle=\scriptsize, +% frame={tb}, +% morekeywords={outp,inp,bit_is_clear,bit_is_set,sei,cli,sbi,cbi,INTERRUPT,SIGNAL,uint8,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t,memptr}, + language=C++, + breaklines=true, +% lineskip=2pt, +% numbers=left, +% stepnumber=5, + } + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% user-defined commands +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% typeset pin numbers +\newcommand{\pin}[1]{\emph{\textbf{#1}}\ } +%\renewcommand{\chaptername}{Aufgabe} + +\newcommand{\matrnr}{Matr. Nr.} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% some size definitions and counter settings +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\oddsidemargin 1cm +\evensidemargin 1cm +\topmargin 0pt +\headsep 50pt +\textheight 21.5cm +\textwidth 14.1cm + +\renewcommand{\floatpagefraction}{0.9} +\renewcommand{\textfraction}{0.05} +\renewcommand{\topfraction}{1.0} +\renewcommand{\bottomfraction}{1.0} + +\setcounter{totalnumber}{3} +\setcounter{bottomnumber}{3} +\setcounter{topnumber}{3} + +\setlength{\unitlength}{1mm} +\setlength{\parindent}{6mm} +\setlength{\parskip}{12pt plus2pt minus2pt} + +\sloppy + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% define variables used on titlepage +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% heading +\def\headline#1{\gdef\@headline{#1}} +% authors +\def\vornamea#1{\gdef\@vornamea{#1}} +\def\nachnamea#1{\gdef\@nachnamea{#1}} +\def\matrikela#1{\gdef\@matrikela{#1}} +\def\emaila#1{\gdef\@emaila{#1}} + +\def\vornameb#1{\gdef\@vornameb{#1}} +\def\nachnameb#1{\gdef\@nachnameb{#1}} +\def\matrikelb#1{\gdef\@matrikelb{#1}} +\def\emailb#1{\gdef\@emailb{#1}} + +\def\vornamec#1{\gdef\@vornamec{#1}} +\def\nachnamec#1{\gdef\@nachnamec{#1}} +\def\matrikelc#1{\gdef\@matrikelc{#1}} +\def\emailc#1{\gdef\@emailc{#1}} + +\def\vornamed#1{\gdef\@vornamed{#1}} +\def\nachnamed#1{\gdef\@nachnamed{#1}} +\def\matrikeld#1{\gdef\@matrikeld{#1}} +\def\emaild#1{\gdef\@emaild{#1}} + +% address of department +\def\address#1{\gdef\@address{#1}} +% LVA-Nr. +\def\lvanr#1{\gdef\@aufgabe{#1}} + +\setcounter{footnote}{0} + +% initialize variables +\gdef\@headline{Object-Oriented Programming VL} +%\gdef\@title{Laborprotokoll} + +\gdef\@vornamea{VStud1} +\gdef\@nachnamea{NStud1} +\gdef\@matrikela{000000} +\gdef\@emaila{e000000@student.tuwien.ac.at} + +\gdef\@vornameb{VStud2} +\gdef\@nachnameb{NStud2} +\gdef\@matrikelb{000000} +\gdef\@emailb{e000000@student.tuwien.ac.at} + +\gdef\@vornamec{VStud3} +\gdef\@nachnamec{NStud3} +\gdef\@matrikelc{0000000} +\gdef\@emailc{e000000@student.tuwien.ac.at} + +\gdef\@aufgabe{zu Aufgabe 1} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% titlepage +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\maketitle{ +\begin{titlepage} + +% enlarge page +\setlength{\topmargin}{0pt} +\setlength{\headheight}{0pt} +\setlength{\headsep}{0pt} +\setlength{\footskip}{0pt} + +\let\footnotesize\small \let\footnoterule\relax \setcounter{page}{1} +\null +\vfill +\large +\vskip -4 cm + +\begin{center} +% heading +{\LARGE\bf \@headline \par} \vskip 2cm + +\vskip 1cm + +% title +{\LARGE\bf Laborprotokoll \par} +\vskip 0.5cm +{\Huge\bf \@title \par} +\vskip 1cm +%{\Large \bf \@aufgabe \par} +\vskip 4cm + +\begin{flushright} +\@author +\vskip 1cm +Wien, am~\today{} +\end{flushright} +\end{center} \par +\vskip 1.5cm + +\end{titlepage} + +\setcounter{footnote}{0} +\let\thanks\relax +} % \def\maketitle + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newenvironment{Ventry}[1]% +{\begin{list}{}{\renewcommand{\makelabel}[1]{\textbf{##1:}\hfill}% +\settowidth{\labelwidth}{\textbf{#1:}}% +\setlength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}}}% +{\end{list}} + +\newcommand{\tablesize}{\fontsize{8}{10}\selectfont} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% layout of non-title pages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\pagenumbering{roman} +\setlength{\parskip}{5pt plus2pt minus2pt} + +\setlength{\parskip}{1mm} +\clearpage +\setlength{\parskip}{5pt plus2pt minus2pt} + +\pagestyle{fancy} +%\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}} +\renewcommand{\sectionmark}[1]{\markboth{\thesection\ #1}{}} +\addtolength{\headheight}{2pt} + +\pagenumbering{arabic} +\setcounter{page} {1} diff --git a/ue1/protokoll/protokoll.tex b/ue1/protokoll/protokoll.tex new file mode 100644 index 0000000..a8c7928 --- /dev/null +++ b/ue1/protokoll/protokoll.tex @@ -0,0 +1,226 @@ +\documentclass[12pt,a4paper,titlepage,oneside]{article} +\usepackage[utf8]{inputenc} +\usepackage{oop_prot} +\usepackage{url} +\usepackage{pdfpages} +\usepackage{booktabs} + +\title{Beispiel 1} + +\author{Manuel Mausz, \matrnr 0728348\\ + {\small manuel-tu@mausz.at} +} + +\begin{document} + +% create titlepage +\maketitle + +\tableofcontents +\newpage + +%------------------------------------------------------------------ +%------------------------------------------------------------------ + +\section{Aufgabenstellung - Beispiel 1} +\includegraphics[width=\textwidth,page=1]{../angabe.pdf} +\includegraphics[width=\textwidth,page=2]{../angabe.pdf} + +%------------------------------------------------------------------ +%------------------------------------------------------------------ + +\section{Beispiel 1} + +\subsection{Design}\label{Design} + +Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe. + + +Die Klasse CScriptParser übernimmt das Parsen der per Commandlineparameter +übergebenen Scriptdatei als String, wobei dieser bereits im Konstruktor +übergeben werden muss. Zum Anstoßen des Parsen dient die Funktion parse(). +Der (simple) Parser arbeitet Zeilenbasiert und erwartet pro Zeile einen +Funktionsaufruf im Syntax: funktionsname(param1, ... paramX). Schachteln von +Funktionen ist nicht erlaubt. Der erste Befehl eines Blocks muss der Befehl +``read'' sein, der Befehl ``write'' beendet einen Block. Alle Funktionsparameter +werden zusammen in einer Liste gespeichert und den entsprechenden Funktionen +übergeben. Whitespaces und Anführungszeichen werden bereits vorab gelöscht. + + +Tritt ein Fehler während des Parsens auf, werden Instanzen der Klasse +\mbox{CSriptError::ParserError} als Exception geworfen. Über die Methode +\mbox{getLine()} der Exception kann die aktuelle Zeile der Scriptdatei, die den +Fehler erzeugt hat, ausgelesen werden.\\ + + +Da der Scriptbefehl ``read'' und ``write'' einen Dateitypparameter enthält, +ist es potentiell möglich verschiedene Dateitypen zu öffnen und zu bearbeiten. +Um dies aus der Sicht des Parsers generisch durchzuführen, müssen alle Klassen, +die Dateioperationen durchführen können, von der Abstrakten Klasse \mbox{CFile} +abgeleitet sein und somit mindestens dessen virtuelle Methoden implementieren. +Alle Implementation müssen weiters im Konstruktor die unterstützten Dateitypen +in die Membervariable m\_types hinzufügen, damit der Parser die jeweils +zuständige Implementation verwenden kann. + + +Die Methode \mbox{callFunc(...)} dient zum Aufruf von dateitypspezifische +Scriptfunktionen. Hierzu übergibt der Parser automatisch alle unbekannten +Funktionen und dessen Parameter innerhalb eines Block (abgesehen von ``read'' +und ``write'') der jeweils zuständigen Instanz. + + +Zur Fehlerbehandlung sollen Implementationen von CFile Instanzen der +Klasse \mbox{CFile::FileError} als Exception werfen. Diese werden vom Parser +gefangen und in Instanzen der eigenen Exception des Parsers +\mbox{CSriptError::ParserError} übersetzt.\\ + + +Die Klasse \mbox{CBitmap} implementiert die Abstrakte Klasse \mbox{CFile} und +kann Dateien des Types ``BMP'' (Windows Bitmap) bearbeiten. Beim Lesen der +Datei werden rudimentäre Checks des Dateiheaders durchgeführt. Der Speicher der +Pixel, wird wie gewünscht dynamisch alloziert. Um aber die verschiedenen +möglichen Farbtiefen von Windows Bitmap zu unterstützen, werden die +Schreiboperationen auf die Pixeldaten an eine Instanz der je nach Farbtiefe +zuständigen Implementation der Abstrakten Klasse \mbox{CPixelFormat} delegiert. +Diese Instanz wird während der Analyse des Dateiheaders ebenfalls dynamisch +allokiert.\\ + + +Damit Implementationen der abstrakten Klasse \mbox{CPixelFormat} direkt auf die +Daten des Windows Bitmap zugreifen können, wird im Konstruktor ein Pointer auf +die Instanz von \mbox{CBitmap} übergeben. Über die Public Getter-Methoden von +\mbox{CBitmap} erfolgt der direkt Zugriff. Fehlerbehandlung erfolgt +Exceptions der Klasse \mbox{CPixelFormat::PixelFormatError}. + +%================================================================== +\begin{figure}[htb] +\begin{center} +\epsfxsize=0.9\textwidth\epsfbox{ClassDiagram1.png} +\end{center} +\caption{Klassendiagramm 1} +\label{fig:classdiagram1} +\end{figure} +%================================================================== + + +\subsection{Verwaltung der Ressourcen} + +Alle Klassen, die im Laufe ihrer Existenz Ressourcen dynamische +allozieren, initialisieren die jeweiligen Membervariablen im Konstruktor auf +NULL und geben diese, sofern tatsächlich alloziert, im spätestens Destruktor +wieder frei.\\ +Alle Dateien, die geöffnet werden, werden nach dem Abfangen der Exception auch +wieder geschlossen, sofern alle möglichen, auftretenden Exceptions +(\mbox{std::bad\_alloc} ausgenommen) auch vorab übersetzt wurden. + +\subsection{Fehlerbehandlung} + +Alle Implementationen der abstrakten Klasse \mbox{CPixelFormat} werfen +Exceptions der Klasse \mbox{CPixelFormat::PixelFormatError}. Diese werden von +\mbox{CBitmap} gefangen und in Exceptions der Klasse \mbox{CFile::FileError} +übersetzt, welche wiederum von der Klasse \mbox{CScriptParser} gefangen und in +Exceptions der Klasse \mbox{CScriptParser::ParserError} übersetzt werden.\\ +Diese Exceptions sowie Exceptions des Typs \mbox{std::exception} werden +schlussendlich vom Hauptprogramm gefangen und geben eine entsprechende +Fehlermeldung an den Benutzer auf stderr aus. + +\subsection{Implementierung} +Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie +Punkt~\ref{Listings}. + + +Alle Exceptions wurden von \mbox{std::invalid\_argument} abgeleitet und der +Konstruktor gemäß den üblichen Konventionen implementiert: + +%================================================================== +\begin{lstlisting}{} +ParserError(const std::string& what) + : std::invalid_argument(what) +{} +\end{lstlisting} +%================================================================== + + +%------------------------------------------------------------------ +%------------------------------------------------------------------ + +\section{Projektverlauf} + + +\subsection{Probleme und Fallstricke} + +In der Hoffnung das in der nächsten Aufgabe weitere Funktionen, Dateitypen +und/oder Farbtiefen des Windows Bitmaps-Formats verlangt werden, wurden +diese sehr generisch implementiert.\\ +Ursprünglich wollte ich die jeweilig unterstützen Scriptfunktionen mittels +\mbox{std::map} an den Scriptparser zurückgeben, +sodass dieser direkt die jeweilige Methode (per Pointer) aufrufen kann. Dies +funktioniert jedoch logischerweise nur bei statischen Methoden. Daher die +einfacher Methode über die callFunc-Methoden, die die Parameter an die +jeweiligen internen Methoden weiterdelegieren. + + +Da sich \mbox{CBitmap} und \mbox{CPixelFormat} gegenseitig referenzieren, +müssen die jeweiligen Klassen im Headerfile der anderen Klasse vorab deklariert +werden. Andernfalls kann der Compiler die Klasse aufgrund der rekursiven +Inklusion nicht finden. + +\subsection{Arbeitsaufwand} + +\begin{tabular}{ll} + \toprule + Entwicklungsschritt / Meilenstein & Arbeitsaufwand in Stunden\\ + \midrule + Erstes Design & 15 Minuten\\ + \hline + Implementierung (und leichte Anpassung des Designs) & 1 Tag\\ + \hline + Dokumentation (Doxygen) und Überprüfung alle\\ + Anforderungen gemäß der Programmierrichtlinien & 2 Tage\\ + \hline + Erstellung des Protokolls & 1 Tag\\ + \bottomrule +\end{tabular} + +%------------------------------------------------------------------ +%------------------------------------------------------------------ + +\section{Listings}\label{Listings} + +\subsection{imgsynth.cpp} +\lstinputlisting{../imgsynth/imgsynth.cpp} + +\newpage +\subsection{cscriptparser.h} +\lstinputlisting{../imgsynth/cscriptparser.h} + +\newpage +\subsection{cscriptparser.cpp} +\lstinputlisting{../imgsynth/cscriptparser.cpp} + +\newpage +\subsection{cfile.h} +\lstinputlisting{../imgsynth/cfile.h} + +\newpage +\subsection{cbitmap.h} +\lstinputlisting{../imgsynth/cbitmap.h} + +\newpage +\subsection{cbitmap.cpp} +\lstinputlisting{../imgsynth/cbitmap.cpp} + +\newpage +\subsection{cpixelformat.h} +\lstinputlisting{../imgsynth/cpixelformat.h} + +\newpage +\subsection{cpixelformat\_24.h} +\lstinputlisting{../imgsynth/cpixelformat_24.h} + +\newpage +\subsection{cpixelformat\_24.cpp} +\lstinputlisting{../imgsynth/cpixelformat_24.cpp} + +\end{document} + -- cgit v1.2.3