Kalkulacka
1.0.0
Jednoduchýkalkulátor
|
Třída reprezentující rovnici. ...
#include <Equation.h>
Veřejné metody | |
Equation (LexicalAnalyzer &lexicalAnalyzer, Interpret *interpret) | |
void | pushSymbol (char symbol) |
void | sendIdentifiedLex (Lex lex) override |
void | onResultChange (Math::Number result) override |
void | onError (InterpretException exception) override |
void | backSpace () |
Provede operaci backspace Pokud je rovnice zakončena číslem odstraní poslední číslici jinak poslední lexem (operator) přepočítá rovnici. ... | |
void | registrEquationObserver (EquationObserver *equationObservers) |
Privátní metody | |
void | reComputeResult () |
void | notifyEquationObserver () |
bool | isNumberSymbol (char &symbol) |
void | pushLex (Lex *lex) |
Privátní atributy | |
std::string | numberBuffer |
std::vector< Lex * > | data |
LexicalAnalyzer | lexicalAnalyzer |
Interpret * | interpret |
std::set< EquationObserver * > | equationObservers |
Math::Number | lastResult = {0} |
Friends | |
std::stringstream & | operator<< (std::stringstream &os, const Equation &equation) |
std::ostream & | operator<< (std::ostream &os, const Equation &equation) |
Třída reprezentující rovnici.
Třída přebírá znaky a předává je Lexikálnímu analyzátoru, dále pozoruje Identifikaci Lexému. Při každé změně rovnice třída upozorní své pozorovatele o této změně. Pokud příjme lexem Lex::BS odebere číslici(i beru jako číslici) či operátor z konce rovnice a rovnici přepočítá Pokud příjme lexem Lex::CLEAR rovnice se smaže, Operátory Lex::BS Lex::CLEAR a Lex::EVAL se do rovnice nezapisují. Po Lex::EVAL pokud následuje číslo rovnice začíná tímto číslem a jinak začíná výsledkem předchozí rovnice pokud taková není 0.
Definice je uvedena na řádku 30 v souboru Equation.h.
Equation::Equation | ( | LexicalAnalyzer & | lexicalAnalyzer, |
Interpret * | interpret | ||
) |
lexicalAnalyzer | |
interpret |
Definice je uvedena na řádku 117 v souboru Equation.cpp.
Odkazuje se na team22::Calc::LexicalAnalyzer::registrLexCallback() a team22::Calc::Interpret::registrResultCallback().
void Equation::backSpace | ( | ) |
Provede operaci backspace Pokud je rovnice zakončena číslem odstraní poslední číslici jinak poslední lexem (operator) přepočítá rovnici.
Definice je uvedena na řádku 56 v souboru Equation.cpp.
Odkazuje se na team22::Calc::Interpret::clear(), data, team22::Calc::Lex::getAsNumber(), interpret, team22::Calc::Lex::isNumber(), lastResult, lexicalAnalyzer, numberBuffer, team22::Calc::LexicalAnalyzer::pushSymbol() a reComputeResult().
Používá se v sendIdentifiedLex().
|
private |
Jedná se o znak čísla tedy číslici
Definice je uvedena na řádku 106 v souboru Equation.cpp.
Používá se v pushSymbol().
|
private |
upozorní odebíratele na změnu rovnice
Definice je uvedena na řádku 100 v souboru Equation.cpp.
Odkazuje se na equationObservers.
Používá se v pushSymbol() a sendIdentifiedLex().
|
overridevirtual |
exception |
Implementuje team22::Calc::ResultObserver.
Definice je uvedena na řádku 134 v souboru Equation.cpp.
Odkazuje se na data a numberBuffer.
|
overridevirtual |
result |
Implementuje team22::Calc::ResultObserver.
Definice je uvedena na řádku 129 v souboru Equation.cpp.
Odkazuje se na team22::Math::Number::getImaginary(), team22::Math::Number::getReal() a lastResult.
|
private |
zpracuje příchozí Lexém
lex |
Definice je uvedena na řádku 124 v souboru Equation.cpp.
Odkazuje se na data.
Používá se v sendIdentifiedLex().
void Equation::pushSymbol | ( | char | symbol | ) |
Předání symbolu rovnici
LexicalAnalyzerException |
Definice je uvedena na řádku 45 v souboru Equation.cpp.
Odkazuje se na isNumberSymbol(), lexicalAnalyzer, notifyEquationObserver(), numberBuffer a team22::Calc::LexicalAnalyzer::pushSymbol().
Používá se v SignalManager::onButtonClick() a team22::Test::Backend::TEST().
|
private |
přepočítá výsledek
Definice je uvedena na řádku 111 v souboru Equation.cpp.
Odkazuje se na data, interpret a team22::Calc::Interpret::sendIdentifiedLex().
Používá se v backSpace().
void Equation::registrEquationObserver | ( | EquationObserver * | equationObservers | ) |
Zaregistruje pozorovatele změny rovnice
equationObservers |
Definice je uvedena na řádku 95 v souboru Equation.cpp.
Odkazuje se na equationObservers.
Používá se v team22::Test::Backend::BackendTester::BackendTester() a SignalManager::SignalManager().
|
overridevirtual |
lex |
Implementuje team22::Calc::LexIdentificationObserver.
Definice je uvedena na řádku 15 v souboru Equation.cpp.
Odkazuje se na backSpace(), team22::Calc::Lex::BS, team22::Calc::Lex::CLEAR, data, team22::Calc::Lex::EVAL, team22::Calc::Lex::getAsOperator(), interpret, team22::Calc::Lex::isOperator(), lastResult, notifyEquationObserver(), numberBuffer, pushLex() a team22::Calc::Interpret::sendIdentifiedLex().
|
friend |
|
friend |
|
private |
Lexémy tvořící rovnici
Definice je uvedena na řádku 42 v souboru Equation.h.
Používá se v backSpace(), onError(), pushLex(), reComputeResult() a sendIdentifiedLex().
|
private |
Pozorovatele
Definice je uvedena na řádku 59 v souboru Equation.h.
Používá se v notifyEquationObserver() a registrEquationObserver().
|
private |
Definice je uvedena na řádku 54 v souboru Equation.h.
Používá se v backSpace(), reComputeResult() a sendIdentifiedLex().
|
private |
Poslední výsledek rovnice
Definice je uvedena na řádku 64 v souboru Equation.h.
Používá se v backSpace(), onResultChange() a sendIdentifiedLex().
|
private |
Lexikální analyzátor
Definice je uvedena na řádku 49 v souboru Equation.h.
Používá se v backSpace() a pushSymbol().
|
private |
Buffer pro rozepsané číslo číslo v rovnici chceme zobrazovat ješte předním, než je celé identifikováno jako lexem k tomu nám pomáhá tento buffer.
Definice je uvedena na řádku 37 v souboru Equation.h.
Používá se v backSpace(), onError(), pushSymbol() a sendIdentifiedLex().