GlobalObjects
Lade ...
Suche ...
Keine Treffer
glo::CommunicaterThread Klassenreferenz

Ein CommunicaterThread nimmt Aufträge für sein TableReaderInterface an. Mehr ...

#include <GloCommunicaterThread.h>

Klassendiagramm für glo::CommunicaterThread:

Öffentliche Methoden

 CommunicaterThread (SchemaInterface *pSchema, RealIndexPool *pRealIndexPool)
 
 ~CommunicaterThread ()
 
virtual void cancel () override
 
void clearMsgQueue ()
 
TableReaderInterfacegetReader () const
 
void takeOrder (OrderMsg *pOrderMsg)
 
- Öffentliche Methoden geerbt von eut::RepeatingThread
 RepeatingThread ()
 
virtual ~RepeatingThread ()
 
virtual void finishBreak ()
 
int getBreakCounter ()
 
bool isInExclusiveAccess () const
 
void setExclusiveAccess ()
 
void signalInput ()
 
virtual int start ()
 
RepeatingThread::STATUS status () const
 
virtual void takeABreak ()
 
bool testCancel ()
 
void unsetExclusiveAccess ()
 
void waitForInput ()
 

Geschützte Methoden

void checkStored (OrderMsg *pOrderMsg)
 
void closeAllSet (OrderMsg *pOrderMsg)
 
void getAnyIndexedObjIdListFromAllSet (OrderMsg *pOrderMsg, IndexQueryBaseStruct *pGloIndexQueryBaseStruct)
 
void getIndexedObjIdListByComparingFromAllSet (OrderMsg *pOrderMsg)
 
void getIndexedObjIdListByRangeFromAllSet (OrderMsg *pOrderMsg)
 
void getIndexedObjIdListBySearchValueFromAllSet (OrderMsg *pOrderMsg)
 
void getObjectData (OrderMsg *pOrderMsg)
 
void getObjIdFromAllSet (OrderMsg *pOrderMsg)
 
void getRecord (OrderMsg *pOrderMsg)
 
void getSizeFromAllSet (OrderMsg *pOrderMsg)
 
void objIDInAllSet (OrderMsg *pOrderMsg)
 
void openAllSet (OrderMsg *pOrderMsg)
 
void removeIndexFilter (OrderMsg *pOrderMsg)
 
void setAnyIndexFilterInAllSet (OrderMsg *pOrderMsg, IndexQueryBaseStruct *pGloIndexQueryBaseStruct)
 
void setCurrentObjectInAllSet (OrderMsg *pOrderMsg)
 
void setIndexFilterByComparingInSet (OrderMsg *pOrderMsg)
 
void setIndexFilterByRangeInSet (OrderMsg *pOrderMsg)
 
void setIndexFilterBySearchValueInSet (OrderMsg *pOrderMsg)
 
void setPositionInAllSet (OrderMsg *pOrderMsg)
 
void transformIndexStrings (IndexQueryBaseStruct &rGloIndexQueryBaseStruct)
 
virtual void work () override
 
bool operator== (const CommunicaterThread &rT) const
 
bool operator!= (const CommunicaterThread &rT) const
 
- Geschützte Methoden geerbt von eut::RepeatingThread
ORDER getOrder ()
 
STATUS getStatus ()
 
void setStatus (STATUS eStatus)
 
void threadWork ()
 
void toOrder (ORDER eOrder)
 

Private Methoden

 CommunicaterThread ()
 
 CommunicaterThread (const CommunicaterThread &)
 
CommunicaterThreadoperator= (const CommunicaterThread &)
 

Private Attribute

std::queue< OrderMsg * > m_MsgQueue
 
TableReaderInterfacem_pTableReader
 

Weitere Geerbte Elemente

- Öffentliche Typen geerbt von eut::RepeatingThread
enum  EuTHREADERROR { EuTHREAD_ERR_NO_THREAD = -10301 , EuTHREAD_ERR_THREAD_ALREADY_WORKING = -10302 , EuTHREAD_ERR_THREAD_BREAK_COUNT_LESS_THAN_ZERO = -10303 , EuTHREAD_ERR_UNKNOWN = -10400 }
 Fehlerbereich = -10301 bis -10400 Mehr ...
 
enum  ORDER { eUNDEFINED , eDO_WORK , eEXIT }
 
enum  STATUS {
  eAT_THE_START , eWORKING , ePAUSING , eENDING ,
  eCOMPLETED
}
 
- Öffentliche Attribute geerbt von eut::RepeatingThread
std::string m_strDebugInfo
 

Ausführliche Beschreibung

Ein CommunicaterThread nimmt Aufträge für sein TableReaderInterface an.

Mehrere TableReaderInterface'es können somit parallel auf eine Tabelle zugreifen (machen ja nichts kaput).

Wird vom Manager genutzt und von dem an die jeweiligen Manager::Receiver übergeben.

Autor
Helmut Jakoby

Beschreibung der Konstruktoren und Destruktoren

◆ CommunicaterThread() [1/3]

glo::CommunicaterThread::CommunicaterThread ( )
private

Der Standard-Konstruktor steht niccht zur Verfügung.

◆ CommunicaterThread() [2/3]

glo::CommunicaterThread::CommunicaterThread ( SchemaInterface * pSchema,
RealIndexPool * pRealIndexPool )

Konstruktor mit Parameterübergabe.

Parameter
[in]pSchemaWird benötigt um ein Tabellenleser zu instantiieren.
[in]pRealIndexPoolWird benötigt um ein Tabellenleser zu instantiieren.
Siehe auch
TableReaderInterface
Ausnahmebehandlung
eut::ErrorNExceptionBei einem Fehler wird eine Exception geworfen.

◆ ~CommunicaterThread()

glo::CommunicaterThread::~CommunicaterThread ( )

Destruktor, es wird der Speicher aufgeräumt.

◆ CommunicaterThread() [3/3]

glo::CommunicaterThread::CommunicaterThread ( const CommunicaterThread & )
private

Der Copy-Konstruktor steht niccht zur Verfügung.

Dokumentation der Elementfunktionen

◆ cancel()

virtual void glo::CommunicaterThread::cancel ( )
overridevirtual

Räumt den Speicher auf, bevor der Thread beendet wird. Wird vom besitzenden Manager::Receiver vor destruieren des Threads aufgerufen.

Da virtual, kann diese Methode nicht im Destructor aufgerufen werden.

Zu beachten
Diese Methode gibt es nur, wenn nicht mit POSIX-Threads kompiliert (defined (__PTHREADS)).

Erneute Implementation von eut::RepeatingThread.

◆ checkStored()

void glo::CommunicaterThread::checkStored ( OrderMsg * pOrderMsg)
protected

Lässt seinen Tabellenleser prüfen, ob ein persistentes Objekt in der Datenbank gespeichert ist. Das Ergebnis der Abfrage wird im Auftrag abgelegt.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::objIDInBase().

◆ clearMsgQueue()

void glo::CommunicaterThread::clearMsgQueue ( )

Leert die Auftrags-Queue.

◆ closeAllSet()

void glo::CommunicaterThread::closeAllSet ( OrderMsg * pOrderMsg)
protected

Lässt seinen Tabellenleser eine Repräsentation eines AllSets zerstören. Das Ergebnis der Abfrage wird im Auftrag abgelegt.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::closeAllSet().

◆ getAnyIndexedObjIdListFromAllSet()

void glo::CommunicaterThread::getAnyIndexedObjIdListFromAllSet ( OrderMsg * pOrderMsg,
IndexQueryBaseStruct * pGloIndexQueryBaseStruct )
protected

Hilfsmethode für getIndexedObjIdListBySearchValueFromAllSet (...), getIndexedObjIdListByComparingFromAllSet (...) und getIndexedObjIdListByRangeFromAllSet (...).

Da sich die Aufträge nur in ihrer Auftragsstruktur unterscheiden, wird diese hier ausgewertet und die jeweiligen Tabellenleser-Methoden aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag mit einer Strukur abgeleitet von IndexQueryBaseStruct.
[in]pGloIndexQueryBaseStructDurch casten auf IndexQueryStruct, ComparisionIndexQueryStruct oder RangeIndexQueryStruct wird die jeweiligen Tabellenleser-Methoden aufgerufen.
Siehe auch
OrderMsg, TableReaderInterface::getIndexedObjIdListFromAllSet (...).

◆ getIndexedObjIdListByComparingFromAllSet()

void glo::CommunicaterThread::getIndexedObjIdListByComparingFromAllSet ( OrderMsg * pOrderMsg)
protected

Gibt einen Leseauftrag für Objekt-IDs in einem AllSet, dessen Objekte indiziert sind, über einen Vergleichs-Auftrag (in dem das Leseergebnis abgelegt wird) an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
ComparisionIndexQueryStruct, GloOrderMsgm, TableReaderInterface::getIndexedObjIdListFromAllSet (...).

◆ getIndexedObjIdListByRangeFromAllSet()

void glo::CommunicaterThread::getIndexedObjIdListByRangeFromAllSet ( OrderMsg * pOrderMsg)
protected

Gibt einen Leseauftrag für Objekt-IDs in einem AllSet, dessen Objekte indiziert sind, über einen Bereichssuch-Auftrag (in dem das Leseergebnis abgelegt wird) an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
RangeIndexQueryStruct, GloOrderMsgm, TableReaderInterface::getIndexedObjIdListFromAllSet (...).

◆ getIndexedObjIdListBySearchValueFromAllSet()

void glo::CommunicaterThread::getIndexedObjIdListBySearchValueFromAllSet ( OrderMsg * pOrderMsg)
protected

Gibt einen Leseauftrag für Objekt-IDs in einem AllSet, dessen Objekte indiziert sind, über einen Stringsuch-Auftrag (in dem das Leseergebnis abgelegt wird) an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
IndexQueryStruct, GloOrderMsgm, TableReaderInterface::getIndexedObjIdListFromAllSet (...).

◆ getObjectData()

void glo::CommunicaterThread::getObjectData ( OrderMsg * pOrderMsg)
protected

Gibt einen Leseauftrag für ein Objekt über einen Auftrag (in dem das Leseergebnis abgelegt wird) an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::getObjectData( Record*&, const ObjID&, ReaderInfo*, bool bInRecursion ).

◆ getObjIdFromAllSet()

void glo::CommunicaterThread::getObjIdFromAllSet ( OrderMsg * pOrderMsg)
protected

Gibt einen Leseauftrag für eine Objekt-ID über einen Auftrag (in dem das Leseergebnis abgelegt wird) an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
GloOrderMsgm, TableReaderInterface::getObjIdFromAllSet (...), TableReaderInterface::getIndexedObjIdFromAllSet (...).

◆ getReader()

TableReaderInterface * glo::CommunicaterThread::getReader ( ) const

Liefert Zeiger auf seinen Tabellenleser.

Rückgabe
Der Zeiger auf seinen Tabellenleser.
Achtung
Das gelieferte TableReaderInterface lebt nur so lange wie dieses Objekt, die aufrufende Instanz darf das gelieferte Objekt nicht aus dem Speicher entfernen.

◆ getRecord()

void glo::CommunicaterThread::getRecord ( OrderMsg * pOrderMsg)
protected

Gibt einen Leseauftrag für einen Record über einen Auftrag (in dem das Leseergebnis abgelegt wird) an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::getRecord( Record*&, const ObjID&, ReaderInfo* ).

◆ getSizeFromAllSet()

void glo::CommunicaterThread::getSizeFromAllSet ( OrderMsg * pOrderMsg)
protected

Läst die Größe eine Repräsentation eines AllSets von seinem Tabellenleser erfragen. Das Ergebnis der Abfrage wird im Auftrag abgelegt.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::getSizeFromAllSet().

◆ objIDInAllSet()

void glo::CommunicaterThread::objIDInAllSet ( OrderMsg * pOrderMsg)
protected

Lässt seine Tabellenleser prüfen, ob ein persistentes Objekt in der Datenbank vorhanden ist. Das Ergebnis der Abfrage wird im Auftrag abgelegt.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::objIDInAllSet().

◆ openAllSet()

void glo::CommunicaterThread::openAllSet ( OrderMsg * pOrderMsg)
protected

Lässt seinen Tabellenleser eine Repräsentation eines AllSets instanziieren. Das Ergebnis der Abfrage wird im Auftrag abgelegt.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::openAllSet().

◆ operator!=()

bool glo::CommunicaterThread::operator!= ( const CommunicaterThread & rT) const
protected

Vergleichsoperator.

Parameter
[in]rTDas mit diesem zu vergleichende Objekt.

◆ operator=()

CommunicaterThread & glo::CommunicaterThread::operator= ( const CommunicaterThread & )
private

Der Zuweisungsoperator steht nicht zur Verfügung.

◆ operator==()

bool glo::CommunicaterThread::operator== ( const CommunicaterThread & rT) const
protected

Vergleichsoperator.

Parameter
[in]rTDas mit diesem zu vergleichende Objekt.

◆ removeIndexFilter()

void glo::CommunicaterThread::removeIndexFilter ( OrderMsg * pOrderMsg)
protected

Gibt einen Filter-Erntfern-Auftrag an einen AllSet, dessen Objekte indiziert sind, an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag mit entsprechender abgeleiteter IndexQueryBaseStruct.
Siehe auch
GloOrderMsgm, TableReaderInterface::removeFilterInAllSet (...).

◆ setAnyIndexFilterInAllSet()

void glo::CommunicaterThread::setAnyIndexFilterInAllSet ( OrderMsg * pOrderMsg,
IndexQueryBaseStruct * pGloIndexQueryBaseStruct )
protected

Hilfsmethode für setIndexFilterBySearchValueInSet (...), setIndexFilterByComparingInSet (...) und setIndexFilterByRangeInSet (...).

Da sich die Aufträge nur in ihrer Auftragsstruktur unterscheiden, wird diese hier ausgewertet und die jeweiligen Tabellenleser-Methoden aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag mit einer Strukur abgeleitet von IndexQueryBaseStruct.
[in]pGloIndexQueryBaseStructDurch casten auf IndexQueryStruct, ComparisionIndexQueryStruct oder RangeIndexQueryStruct wird die jeweiligen Tabellenleser-Methoden aufgerufen.
Siehe auch
GloOrderMsgm, TableReaderInterface::getIndexedObjIdListFromAllSet (...).

◆ setCurrentObjectInAllSet()

void glo::CommunicaterThread::setCurrentObjectInAllSet ( OrderMsg * pOrderMsg)
protected

Läst in einer Repräsentation eines AllSets von seinem Tabellenleser den dortigen Iterator auf ein bestimmtes Objekt setzen. Das Ergebnis der Abfrage wird im Auftrag abgelegt.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::setCurrentObjectInAllSet().

◆ setIndexFilterByComparingInSet()

void glo::CommunicaterThread::setIndexFilterByComparingInSet ( OrderMsg * pOrderMsg)
protected

Gibt einen Filterauftrag an einen AllSet, dessen Objekte indiziert sind, an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag mit einer ComparisionIndexQueryStruct.
Siehe auch
ComparisionIndexQueryStruct, GloOrderMsgm, TableReaderInterface::setFilterInAllSet (...).

◆ setIndexFilterByRangeInSet()

void glo::CommunicaterThread::setIndexFilterByRangeInSet ( OrderMsg * pOrderMsg)
protected

Gibt einen Filterauftrag an einen AllSet, dessen Objekte indiziert sind, an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag mit einer RangeIndexQueryStruct.
Siehe auch
RangeIndexQueryStruct, GloOrderMsgm, TableReaderInterface::setFilterInAllSet (...).

◆ setIndexFilterBySearchValueInSet()

void glo::CommunicaterThread::setIndexFilterBySearchValueInSet ( OrderMsg * pOrderMsg)
protected

Gibt einen Filterauftrag an einen AllSet, dessen Objekte indiziert sind, an seinen Tabellenleser weiter.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag mit einer IndexQueryStruct.
Siehe auch
IndexQueryStruct, OrderMsg, TableReaderInterface::setFilterInAllSet (...).

◆ setPositionInAllSet()

void glo::CommunicaterThread::setPositionInAllSet ( OrderMsg * pOrderMsg)
protected

Läst in einer Repräsentation eines AllSets von seinem Tabellenleser den dortigen Iterator auf eine bestimmte Position setzen. Das Ergebnis der Abfrage wird im Auftrag abgelegt.

Diese Methode wird in work() durch Auswertung des Auftrags aufgerufen.

Parameter
[in,out]pOrderMsgDer Auftrag.
Siehe auch
OrderMsg, TableReaderInterface::setPositionInAllSet().

◆ takeOrder()

void glo::CommunicaterThread::takeOrder ( OrderMsg * pOrderMsg)

Übernimmt einen Auftrag in seine Auftrags-Queue. Sendet ein Aufwachsignal für den Thread.

Parameter
[in]pOrderMsgDer abzuarbeitende Auftrag.
Siehe auch
signalInput()

◆ transformIndexStrings()

void glo::CommunicaterThread::transformIndexStrings ( IndexQueryBaseStruct & rGloIndexQueryBaseStruct)
protected

Hilfsmethode für getAnyIndexedObjIdListFromAllSet (...), und setAnyIndexFilterInAllSet (...).

Obige Methoden bekommen über die übergebene IndexQueryBaseStruct einen bzw. zwei Indexstrings übergeben. In dieser Methode werden diese so formattiert, wie in der Indexspezifizierung vorgegeben. Wenn z.B. der Index nicht 'CaseSensitive' sein soll und der Index "aBc" ist, wird dieser Eintrag in die IndexQueryBaseStruct in "ABC" geändert.

Parameter
[in]rGloIndexQueryBaseStructDurch casten auf IndexQueryStruct, ComparisionIndexQueryStruct oder RangeIndexQueryStruct werden die jeweiligen zu transformierenden IndexStrings ermittelt.

◆ work()

virtual void glo::CommunicaterThread::work ( )
overrideprotectedvirtual

Diese Methode wird als Thread ausgeführt. Es wird die Nachrichten-Queue nach Aufträgen abgefragt (es wird 'geschlafen' bis eine Nachricht in die Queue gestellt wird) und nach Auswertung des Auftrags eine passende Methode aufgerufen.

Siehe auch
waitForInput()

Implementiert eut::RepeatingThread.

Dokumentation der Datenelemente

◆ m_MsgQueue

std::queue<OrderMsg *> glo::CommunicaterThread::m_MsgQueue
private

Die Auftrags-Queue für diesen Thread.

Siehe auch
work()

◆ m_pTableReader

TableReaderInterface* glo::CommunicaterThread::m_pTableReader
private

Der Tabellenleser.


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: