|
Almetare 1.20
Alle meine Taschenrechner - Eine C++-Bibliothek zur Entwicklung von Taschenrechnern
|
Basisklasse aller Computer. Mehr ...
#include <calculator.h>
Öffentliche Methoden | |
| ComputerBase () | |
| Konstruktor erzeugt Symboltabelle, initialisiert Symbol- und Nummern-Stack. | |
| virtual | ~ComputerBase () |
| Die mit new angelegten Symbole muessen wieder geloescht werden. | |
| void | createSymTabBase () |
| Erzeugt Symboltabelle mit allen Symbolen des "minimalen" Taschenrechners. Mehr ... | |
| void | showSymTab () |
| Schreibt alle Symbole in die Log-Datei. | |
| void | initStacks () |
| Initialisiert die beiden Stack-Listen. Mehr ... | |
| void | initMembers (bool clrMem=true) |
| Initialisiert die Members von ComputerBase. Mehr ... | |
| void | clearNum () |
| Number | getConstVal () const |
| Number | getPrcWhole () const |
| Number | getMemory () const |
| int | getBraLev () const |
| int | getParam () const |
| SymOperator * | getConstOpP () const |
| SymOperator * | getLastOpP () const |
| SymOperator * | getLastButOneOpP () const |
| Symbol * | getLastInP () const |
| Symbol * | getLastButOneInP () const |
| Symbol * | getSymP (const string &sym) |
| void | setDsplP (DisplayBase *dsplP) |
| void | setConstVal (const Number &val) |
| void | setPrcWhole (const Number &val) |
| void | setMemory (const Number &val) |
| void | setParam (const int val) |
| void | setLastOpP (SymOperator *soP) |
| Speichert die Zeiger auf die beiden zuletzt eingegebene Operator-Symbole. Mehr ... | |
| void | setConstOpP (SymOperator *soP) |
| void | setLastInPisNotToSet (bool is) |
| void | setLastInP (Symbol *sP) |
| Speichert den Zeiger auf das zuletzt eingegebene Symbol. Mehr ... | |
| void | setIsToInit (bool in) |
| void | pushNewStacks () |
| Wirft neue Stacks auf die Stack-Listen. Mehr ... | |
| void | popStacks () |
| Holt die letzten Stacks von den Stack-Listen. Mehr ... | |
| void | pushNum (const Number &n) |
| void | pushSym (SymOperator *sP) |
| Number | getTopButOneNum () |
| void | setTopButOneNum (const Number &n) |
| bool | isNumEmpty () |
| bool | isSymEmpty () |
| Number | popNum () |
| Number | topNum () |
| SymOperator * | popSym () |
| SymOperator * | topSym () |
| void | incBraLev () |
| void | decBraLev () |
| void | printSymHelp () |
| Gibt alle Symbole der Symboltabelle auf die Konsole aus. | |
| string | getAllSyms () |
| Gibt saemtliche Symbole und Infos im String zurueck. | |
| bool | isSym (const string &sym) |
| Prueft, ob Symbol sym in der Symboltabelle ist, und gibt true oder false zurueck. Mehr ... | |
| Error | compute () |
| Berechnet den letzten Operator auf dem Symbol-Stack. Mehr ... | |
| Error | swapNum () |
| string | extractParam (string &in) |
| Extrahiert einen moeglicherweise vorhandenen Parameter des Symbols. Mehr ... | |
| string | makeCompBaseInfoStr () |
| Erzeugt fuers Debugging String mit den wichtigen Member-Variablen. Mehr ... | |
| virtual bool | preProcess (string &in) |
| virtual void | aftProcess (string &in) |
| virtual void | aftProcess2 (string &in) |
| virtual SymOperator * | checkConstMode (SymOperator *opP) |
| Untersucht, ob in den Konstanten-Modus gewechselt werden oder dieser abgeschaltet werden muss. Mehr ... | |
| virtual void | handleDisplayAfterBra () |
| Erzeugt passende Anzeige nach Eingabe von "(". Mehr ... | |
| virtual void | handlePercent () |
| Prozentrechnung des Solar-Rechners: Mehr ... | |
| virtual void | popNumDepOnLastSym () |
| virtual bool | map (string &sym) |
| virtual string | makeCompInfoStr () |
Geschützte Methoden | |
| bool | popNumDepOnLastSymBase () |
| Holt die vorherige Eingabe vom Zahlenstack, wenn es kein Operator war. Mehr ... | |
| virtual void | handleEmptyNumStack (Number &a, SymOperator *soP, Number &b) |
| Erfindet einen zweiten Operanden, falls ein Operator mit nur einem berechnet werden soll. Mehr ... | |
Geschützte Attribute | |
| DisplayBase * | mDsplP |
| Zeiger auf zugehoeriges Display. | |
| SymTabT | mSymTab |
| Symboltabelle. | |
| NumStackList | mNumStackList |
| Zahlen-Stack-Liste zum Rechnen. | |
| SymStackList | mSymStackList |
| Symbol-Stack-Liste zum Rechnen. | |
| NumStack | mNumStack |
| Default-Zahlen-Stack: ist immer leer. | |
| SymStack | mSymStack |
| Default-Symbol-Stack: ist immer leer. | |
| Symbol * | mLastInP |
| das zuletzt eingegebene Symbol | |
| Symbol * | mLastButOneInP |
| das vorletzte eingegebene Symbol | |
| SymOperator * | mLastOpP |
| der zuletzt eingegebene Operator | |
| SymOperator * | mLastButOneOpP |
| der vorletzte eingegebene Operator | |
| Number | mMemory |
| Speicherregister. | |
| int | mBraLev |
| Klammerebene. | |
| Number | mPrcWhole |
| bei Prozentrechnung: das "Ganze" | |
| SymOperator * | mConstOpP |
| bei Konstantenrechnung: der Operator | |
| Number | mConstVal |
| bei Konstantenrechnung: der konstante Wert | |
| int | mParam |
| bei manchen Operatoren uebergebener Parameter | |
| bool | mLastInPisNotToSet |
| damit kann Setzen von mLastInP verhindert werden | |
| bool | mIsToInit |
| wird von AcAc::process() auf true gesetzt und nur vom fx-3600P ausgewertet | |
Freundbeziehungen | |
| ostream & | operator<< (ostream &os, ComputerBase &c) |
| Ausgabeoperator gibt wichtige Member-Variablen aus. | |
Basisklasse aller Computer.
Die Klasse bildet zusammen mit den Symbolen das Rechenwerk des Calculators. Sie enthaelt einen Zahlen-Stack, einen Symbolstack, verschiedene "Register" (mMemory, mConstVal etc.) und Zustandsflags (RAD, DEG etc.). Fuer jede Klammerebene wird ein eigener Zahlen- und Symbol-Stack angelegt; daher gibt es in Wahrheit eine Liste von Zahlen-Stacks und eine Liste von Symbol-Stacks. Unterschiede zwischen den Rechnern werden in einem Satz virtueller Funktionen nachgebildet.
|
inlinevirtual |
Erneute Implementation in ComputerCasioSci.
|
inlinevirtual |
Erneute Implementation in ComputerFx3600p.
|
virtual |
Untersucht, ob in den Konstanten-Modus gewechselt werden oder dieser abgeschaltet werden muss.
Bedingungen fuers Einschalten (bei Casio-Rechnern):
Erneute Implementation in ComputerCasioSci.
| Error ComputerBase::compute | ( | ) |
Berechnet den letzten Operator auf dem Symbol-Stack.
Dazu werden die benoetigten Operanden vom Zahlen-Stack geholt, die Operation ausgefuehrt und das Ergebnis wieder auf dem Zahlen-Stack abgelegt.
| void ComputerBase::createSymTabBase | ( | ) |
Erzeugt Symboltabelle mit allen Symbolen des "minimalen" Taschenrechners.
Da die Behandlung von Klammern integraler Bestandteil des Stack-Konzeptes ist, gehoeren auch Klammern zum minimalen Taschenrechner, obwohl einfache
Taschenrechner i.d.R. keine Klammern kennen.
| string ComputerBase::extractParam | ( | string & | in | ) |
Extrahiert einen moeglicherweise vorhandenen Parameter des Symbols.
Einige Operatoren ("sci", "fix") benoetigen einen Parameter. Dieser wird bei der Eingabe, durch "@" getrennt, an den Operator angehaengt und hier wieder extrahiert. Bei "ee" (Exponentialtaste des TI-30) Sonderbehandlung: Wenn hier der Parameter weggelassen wird, wird er auf 9999 gesetzt; dies wird in Symbol AcEe dann ausgewertet.
| in | zu untersuchende Zeichenkette |
|
virtual |
Erzeugt passende Anzeige nach Eingabe von "(".
Die Rechner unterscheiden sich darin, welche Zahl im Display erscheint, wenn "(" eingegeben wird. (TI: behaelt aktuelle Zahl bei, sie wird nur geloescht, wenn dann vor dem Operator noch eine andere eingegeben wird; Casio: schreibt "0" ins Display). Als Default-Verhalten ist hier das Casio-Verhalten implementiert.
Erneute Implementation in ComputerCasioSci und ComputerTiSci.
|
protectedvirtual |
Erfindet einen zweiten Operanden, falls ein Operator mit nur einem berechnet werden soll.
Muss von den abgeleiteten Klassen je nach Taschenrechner ueberladen werden.
| a | erster Operand |
| soP | Zeiger auf Operatorsymbol |
| b | erfundener zweiter Operator |
Erneute Implementation in ComputerCasioSci und ComputerTiSci.
|
virtual |
Prozentrechnung des Solar-Rechners:
Erneute Implementation in ComputerSci, ComputerCasioSci und ComputerTiSci.
| void ComputerBase::initMembers | ( | bool | clrMem = true | ) |
Initialisiert die Members von ComputerBase.
Aus Konstruktor ausgelagert, weil auch von AcInit::process() aufgerufen.
| clrMem | wenn true, wird der Memory-Speicher geloescht |
| void ComputerBase::initStacks | ( | ) |
Initialisiert die beiden Stack-Listen.
Die Stacks koennen leider nicht bereits im Konstruktor initialisiert werden, da mLogFileP zum Zeitpunkt des Aufrufs (Member von Calculator) noch nicht gesetzt ist.
| bool ComputerBase::isSym | ( | const string & | sym | ) |
| string ComputerBase::makeCompBaseInfoStr | ( | ) |
Erzeugt fuers Debugging String mit den wichtigen Member-Variablen.
|
inlinevirtual |
Erneute Implementation in ComputerFx3600p und ComputerFx85v.
|
inlinevirtual |
Erneute Implementation in ComputerCasioSci.
|
protected |
Holt die vorherige Eingabe vom Zahlenstack, wenn es kein Operator war.
Das ist z.B. noetig, wenn direkt nacheinander zwei Zahlen eingegeben werden: Die zweite muss die erste auf dem Stack ersetzen. Diese Funktion muss in anderen Taschenrechnern erweitert werden um weitere Symbole; z.B. gilt das auch fuer die Tasten "Kout@1", ..., "Kout@6" der Casio-Taschenrechner. Daher muss eine virtuelle Funktion aufgerufen werden, die wiederum einige Funktionen wie diese hier aufruft.
| void ComputerBase::popStacks | ( | ) |
Holt die letzten Stacks von den Stack-Listen.
Wird benoetigt, wenn die Klammerebene erniedrigt wird.
|
inlinevirtual |
Erneute Implementation in ComputerSci, ComputerFx3600p und ComputerFx85v.
| void ComputerBase::pushNewStacks | ( | ) |
Wirft neue Stacks auf die Stack-Listen.
Wird benoetigt, wenn die Klammerebene erhoeht wird.
| void ComputerBase::setLastInP | ( | Symbol * | sP | ) |
Speichert den Zeiger auf das zuletzt eingegebene Symbol.
Alle Symbole mit Parametern benoetigen normalerweise zwei Durchlaeufe (z.B. Kout: im zweiten Durchlauf wird daraus "Kout@2"). Beim ersten Durchlauf darf mLastInP nicht gesetzt werden, da die Bearbeitung noch nicht abgeschlossen ist. Daher koennen diese Symbole das durch Setzen von mLastInPisNotToSet unterbinden.
| sP | Zeiger auf das Symbol, das in mLastInP gespeichert wird |
| void ComputerBase::setLastOpP | ( | SymOperator * | sP | ) |
Speichert die Zeiger auf die beiden zuletzt eingegebene Operator-Symbole.
| sP | Zeiger auf das Symbol, das in mLastInP gespeichert wird |