GlobalObjects
Lade ...
Suche ...
Keine Treffer
glo::IndexPool::ObjectStrIndex Klassenreferenz

Verwaltet die einzelnen String-Indizes einer Klasse. Wenn dieses ein Unique-Index ist, sind die ObjStrIdTuple in einer Map, ansonsten in einer MultiMap. Dann können Indexe in einer MultiMap als reserviert eingefügt werden, dieses wird beim weiteren Einfügen berücksichtigt. Mehr ...

#include <GloIndexPool.h>

Öffentliche Methoden

 ObjectStrIndex (const ObjectStrIndex &rT)
 
 ObjectStrIndex (const std::string &rsPathName, unsigned long ulClassID, const std::string &rsIndexName, bool bUnique)
 
virtual ~ObjectStrIndex ()
 
void deleteAllIndexValues ()
 
unsigned long getClassID () const
 
const std::string & getIndexName () const
 
const std::multimap< std::string, IndexPool::ObjStrIdTuple *, std::less< std::string > > & getNonUniqueIndexMapRef () const
 
const std::map< ObjID, IndexPool::ObjStrIdTuple *, std::less< ObjID > > & getObjIdIndexMapRef () const
 
const std::string & getPathName () const
 
const std::map< std::string, IndexPool::ObjStrIdTuple *, std::less< std::string > > & getUniqueIndexMapRef () const
 
int insertObjStrIdTuple (const ObjStrIdTuple &rIndexTuple)
 
bool isIndexFree (const std::string &rsIndex, const ObjID &rObjID) const
 
bool isObjIdAlreadyAvailable (const ObjID &rObjID) const
 
bool isUnique () const
 
IndexPool::ObjectStrIndexoperator= (const ObjectStrIndex &rT)
 
void releaseObjStrIdTuple (const NUM_PTR ipReservingComunicatorTrx)
 
int removeObjStrIdTuple (const ObjID &rObjID, NUM_PTR ipReservingComunicatorTrx=0)
 
void reserveObjStrIdTuple (const ObjStrIdTuple &rIndexTuple)
 

Geschützte Methoden

 ObjectStrIndex ()
 
void copyMapsFrom (const ObjectStrIndex &rT)
 
IndexPool::ObjStrIdTuplegetObjStrIdTuple (const ObjID &rObjID)
 
IndexPool::ObjStrIdTuplegetObjStrIdTuple (EnSeekMode eMode)
 
int removeObjStrIdTuple (const ObjID &rObjID, bool bDelete, NUM_PTR ipReservingComunicatorTrx=0)
 

Private Attribute

bool m_bUnique
 
std::multimap< std::string, ObjStrIdTuple *, std::less< std::string > > m_NonUniqueIndexMultiMap
 
std::multimap< std::string, ObjStrIdTuple * >::iterator m_NonUniqueIndexMultiMapIterator
 
std::map< ObjID, ObjStrIdTuple *, std::less< ObjID > > m_ObjIdIndexMap
 
std::multimap< std::string, ObjStrIdTuple *, std::less< std::string > > m_ReservedIndexMultiMap
 
std::string m_sIndexName
 
std::string m_strPathName
 
unsigned long m_ulClassID
 
std::map< std::string, ObjStrIdTuple *, std::less< std::string > > m_UniqueIndexMap
 
std::map< std::string, ObjStrIdTuple * >::iterator m_UniqueIndexMapIterator
 

Freundbeziehungen

class RealIndexPool
 

Ausführliche Beschreibung

Verwaltet die einzelnen String-Indizes einer Klasse. Wenn dieses ein Unique-Index ist, sind die ObjStrIdTuple in einer Map, ansonsten in einer MultiMap. Dann können Indexe in einer MultiMap als reserviert eingefügt werden, dieses wird beim weiteren Einfügen berücksichtigt.

Autor
Helmut Jakoby

Beschreibung der Konstruktoren und Destruktoren

◆ ObjectStrIndex() [1/3]

glo::IndexPool::ObjectStrIndex::ObjectStrIndex ( )
protected

Der Standard-Konstruktor steht nicht zur Verfügung.

◆ ObjectStrIndex() [2/3]

glo::IndexPool::ObjectStrIndex::ObjectStrIndex ( const std::string & rsPathName,
unsigned long ulClassID,
const std::string & rsIndexName,
bool bUnique )

Konstruktor mit Parameterübergabe.

Parameter
[in]rsPathNameDie vollständige Verzeichnisbezeichnung, in dem die Tabellen zu finden sind wie z.B. "C:/Pfad/Data/".
[in]ulClassIDDie Klassen-ID der verwalteten Indexe.
[in]rsIndexNameDie Indexbezeichnung. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName".
[in]bUniqueWenn true, dann handelt es sich um einen eindeutigen Index (jeder Eintrag kann nur einmal vorhanden sein), ansonsten sind mehrere gleiche Einträge möglich.

◆ ObjectStrIndex() [3/3]

glo::IndexPool::ObjectStrIndex::ObjectStrIndex ( const ObjectStrIndex & rT)

Copy-Konstruktor.

Parameter
[in]rTVon diesem Objekt werden die Daten übernommen.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem Fehler wird eine Exception geworfen.

◆ ~ObjectStrIndex()

virtual glo::IndexPool::ObjectStrIndex::~ObjectStrIndex ( )
virtual

Destruktor.

Dokumentation der Elementfunktionen

◆ copyMapsFrom()

void glo::IndexPool::ObjectStrIndex::copyMapsFrom ( const ObjectStrIndex & rT)
protected

Entfernt alle Elemente aus den Maps. Dann werden alle Elemente der gleichen Maps des übergebenen Objekt-StringIndex kopiert.

Parameter
[in]rTDer Objekt-StringIndex, dessen Elemente aus den Maps kopiert werden sollen.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem Fehler wird eine Exception geworfen.

◆ deleteAllIndexValues()

void glo::IndexPool::ObjectStrIndex::deleteAllIndexValues ( )

Leert alle Maps; also m_UniqueIndexMap mit m_ReservedIndexMultiMap bzw. m_NonUniqueIndexMultiMap und m_ObjIdIndexMap. Die ObjStrIdTuple werden aus dem Speicher entfernt und die Iteratoren auf den Anfang gesetzt.

◆ getClassID()

unsigned long glo::IndexPool::ObjectStrIndex::getClassID ( ) const

Liefert die Klassen-ID des verwalteten Objekt-StringIndex.

Rückgabe
Die Klassen-ID.

◆ getIndexName()

const std::string & glo::IndexPool::ObjectStrIndex::getIndexName ( ) const

Liefert die Indexbezeichnung. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName".

Rückgabe
Die Indexbezeichnung.

◆ getNonUniqueIndexMapRef()

const std::multimap< std::string, IndexPool::ObjStrIdTuple *, std::less< std::string > > & glo::IndexPool::ObjectStrIndex::getNonUniqueIndexMapRef ( ) const

Liefert eine Referenz auf m_NonUniqueIndexMultiMap.

Rückgabe
m_NonUniqueIndexMultiMap

◆ getObjIdIndexMapRef()

const std::map< ObjID, IndexPool::ObjStrIdTuple *, std::less< ObjID > > & glo::IndexPool::ObjectStrIndex::getObjIdIndexMapRef ( ) const

Liefert eine Referenz auf m_ObjIdIndexMap.

Rückgabe
m_ObjIdIndexMap

◆ getObjStrIdTuple() [1/2]

IndexPool::ObjStrIdTuple * glo::IndexPool::ObjectStrIndex::getObjStrIdTuple ( const ObjID & rObjID)
protected

Liefert einen Zeiger auf ein ObjStrIdTuple aus m_UniqueIndexMap mit übergebener Objekt-ID.

Parameter
[in]rObjIDDie Objekt-ID.
Rückgabe
Das ggf. gefundene Objekt.
Achtung
Die aufrufende Instanz darf das gelieferte Objekt nicht ändern oder aus dem Speicher entfernen. Es lebt nur so lange wie dieses Objekt.

◆ getObjStrIdTuple() [2/2]

IndexPool::ObjStrIdTuple * glo::IndexPool::ObjectStrIndex::getObjStrIdTuple ( EnSeekMode eMode)
protected

Liefert einen Zeiger auf ein ObjStrIdTuple in Abhängigkeit von m_bUnique aus m_UniqueIndexMap oder m_NonUniqueIndexMultiMap in Bezug auf eMode.

Parameter
[in]eModeDer Suchmodus.

Parameterbeispiele:

Rückgabe
Das ggf. gefundene Objekte.
Achtung
Die aufrufende Instanz darf das gelieferte Objekt NICHT ändern oder aus dem Speicher entfernen. Es lebt nur so lange wie dieses Objekt.

◆ getPathName()

const std::string & glo::IndexPool::ObjectStrIndex::getPathName ( ) const

Liefert die vollständige Verzeichnisbezeichnung, in dem die Tabellen zu finden sind.

Rückgabe
Die vollständige Verzeichnisbezeichnung wie z.B. "C:/Pfad/Data/".

◆ getUniqueIndexMapRef()

const std::map< std::string, IndexPool::ObjStrIdTuple *, std::less< std::string > > & glo::IndexPool::ObjectStrIndex::getUniqueIndexMapRef ( ) const

Liefert eine Referenz auf m_UniqueIndexMap.

Rückgabe
m_UniqueIndexMap

◆ insertObjStrIdTuple()

int glo::IndexPool::ObjectStrIndex::insertObjStrIdTuple ( const ObjStrIdTuple & rIndexTuple)

Fügt einen String-Index in Abhängigkeit von m_bUnique in m_UniqueIndexMap oder m_NonUniqueIndexMultiMap ein.

Parameter
[in]rIndexTupleDer einzufügende Index.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.
Wenn m_bUnique und kein Index mit Objekt-ID schon in m_UniqueIndexMap, aber der Index als String ist schon vorhanden, dann Fehler == ERR_INDEX_ALREADY_EXISTING

◆ isIndexFree()

bool glo::IndexPool::ObjectStrIndex::isIndexFree ( const std::string & rsIndex,
const ObjID & rObjID ) const

Prüft ob eine String-Index für ein Objekt noch frei ist. Macht nur Sinn, wenn m_bUnique auf true gesetzt ist.

Parameter
[in]rsIndexDer zu überprüfende Index.
[in]rObjIDDie zu prüfende Objekt-ID.
Rückgabe
Liefert true (immer wenn m_bUnique == false) oder false, wenn rsIndex schon vergeben.

◆ isObjIdAlreadyAvailable()

bool glo::IndexPool::ObjectStrIndex::isObjIdAlreadyAvailable ( const ObjID & rObjID) const

Prüft ob ein Index mit der Objekt-ID in m_ObjIdIndexMap enthalten ist.

Parameter
[in]rObjIDDie zu prüfende Objekt-ID.
Rückgabe
Liefert true, wenn ein Index mit der Objekt-ID in m_ObjIdIndexMap enthalten.

◆ isUnique()

bool glo::IndexPool::ObjectStrIndex::isUnique ( ) const

Liefert, ob dieses ein eindeutiger Index ist oder nicht.

Rückgabe
Wenn true, dann handelt es sich um einen eindeutigen Index (jeder Eintrag kann nur einmal vorhanden sein), ansonsten sind mehrere gleiche Einträge möglich.

◆ operator=()

IndexPool::ObjectStrIndex & glo::IndexPool::ObjectStrIndex::operator= ( const ObjectStrIndex & rT)

Zuweisungsoperator.

Parameter
[in]rTVon diesem Objekt werden die Daten übernommen.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem Fehler wird eine Exception geworfen.

◆ releaseObjStrIdTuple()

void glo::IndexPool::ObjectStrIndex::releaseObjStrIdTuple ( const NUM_PTR ipReservingComunicatorTrx)

Wenn m_bUnique == true, wird jeder String-Index aus der m_ReservedIndexMultiMap entfernt, dessen ObjStrIdTuple::m_ipReservingComunicatorTrx gleich dem übergebenen Parameter ist.

Parameter
[in]ipReservingComunicatorTrxDer Transaktionsschritt, für den die Reservierung(en) angefordert wurde(n).
Ausnahmebehandlung
eut::ErrorNExceptionWenn ulReservingComunicatorTrx == 0 ist, wird eine Exception geworfen.
Siehe auch
ObjectStrIndex::reserveObjStrIdTuple (...)

◆ removeObjStrIdTuple() [1/2]

int glo::IndexPool::ObjectStrIndex::removeObjStrIdTuple ( const ObjID & rObjID,
bool bDelete,
NUM_PTR ipReservingComunicatorTrx = 0 )
protected

Entfernt oder löscht einen String-Index in Abhängigkeit von m_bUnique aus m_UniqueIndexMap oder m_NonUniqueIndexMultiMap und ggf. in m_ObjIdIndexMap.

Parameter
[in]rObjIDDie ObjId des zu entfernenden String-Index.
[in]bDeleteWenn true, wird der String-Index aus allen Maps und aus dem Speicher entfernt. Wenn false, wird der Index in Abhängigkeit von m_bUnique aus m_UniqueIndexMap oder m_NonUniqueIndexMultiMap entfernt.
[in]ipReservingComunicatorTrxDie auf NUM_PTR gecastete Adresse eines Communicator's, in dessen Transaktion der Index ggf. reserviert wurde. Wenn diese gesetzt, wird nur ein reservierter Index gelöscht.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ removeObjStrIdTuple() [2/2]

int glo::IndexPool::ObjectStrIndex::removeObjStrIdTuple ( const ObjID & rObjID,
NUM_PTR ipReservingComunicatorTrx = 0 )

Entfernt einen String-Index in Abhängigkeit von m_bUnique aus m_UniqueIndexMap oder m_NonUniqueIndexMultiMap.

Parameter
[in]rObjIDDie ObjId des zu entfernenden Index.
[in]ipReservingComunicatorTrxDie auf NUM_PTR gecastete Adresse eines Communicator's, in dessen Transaktion der Index ggf. reserviert wurde. Wenn diese gesetzt, wird nur ein reservierter Index gelöscht.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ reserveObjStrIdTuple()

void glo::IndexPool::ObjectStrIndex::reserveObjStrIdTuple ( const ObjStrIdTuple & rIndexTuple)

Wenn m_bUnique == true, wird der String-Index in die m_ReservedIndexMultiMap angahängt und damit reserviert.

Parameter
[in]rIndexTupleDer zu reservierende Index.
Ausnahmebehandlung
eut::ErrorNExceptionWenn ObjStrIdTuple::m_ipReservingComunicatorTrx im Parameter rIndexTuple nicht gesetzt ist, wird eine Exception geworfen.
Siehe auch
ObjectStrIndex::releaseObjStrIdTuple (...)

Freundbeziehungen und Funktionsdokumentation

◆ RealIndexPool

friend class RealIndexPool
friend

Dokumentation der Datenelemente

◆ m_bUnique

bool glo::IndexPool::ObjectStrIndex::m_bUnique
private

Wenn true, handelt es sich um einen eindeutigen Index (jeder Eintrag kann nur einmal vorhanden sein), ansonsten sind mehrere gleiche Einträge möglich.

◆ m_NonUniqueIndexMultiMap

std::multimap< std::string, ObjStrIdTuple * , std::less< std::string > > glo::IndexPool::ObjectStrIndex::m_NonUniqueIndexMultiMap
private

Wenn m_bUnique == false, wird diese Map genutzt.

◆ m_NonUniqueIndexMultiMapIterator

std::multimap<std::string,ObjStrIdTuple*>::iterator glo::IndexPool::ObjectStrIndex::m_NonUniqueIndexMultiMapIterator
private

Ein interner Iterator für m_NonUniqueIndexMultiMap.

◆ m_ObjIdIndexMap

std::map< ObjID, ObjStrIdTuple * , std::less< ObjID > > glo::IndexPool::ObjectStrIndex::m_ObjIdIndexMap
private

Hier sind alle ObjStrIdTuple sortiert nach ObjId, wird gebraucht, um ein ObjStrIdTuple nach ObjId schnell zu finden.

◆ m_ReservedIndexMultiMap

std::multimap< std::string, ObjStrIdTuple * , std::less< std::string > > glo::IndexPool::ObjectStrIndex::m_ReservedIndexMultiMap
private

Es können Unique-Indexe z.B. in Transaktionen reserviert werden, die hier eingefügt sind.
Das ist z.B. notwendig, wenn ein indiziertes Objekt in einer Transaktion mit einem Unique-Index "1" zum speichern in einem TransactionManager::TransactionStep ist.
Wenn das gleiche Objekt in der Transaktion nochmals, mit dem Unique-Index "2" zum speichern in einem TransactionManager::TransactionStep abgelegt wird, wird auch dieser als reserviert abgelegt.
Erst bei einem 'Commit' bzw. 'Abort' werden diese reservierten Index e entfernt und bei einem 'Commit' in die m_UniqueIndexMap übertragen.

◆ m_sIndexName

std::string glo::IndexPool::ObjectStrIndex::m_sIndexName
private

Die Indexbezeichnung. Wenn z.B. im Schema "[MyClassName.Index.IDX_MyIndexName]", dann "IDX_MyIndexName".

◆ m_strPathName

std::string glo::IndexPool::ObjectStrIndex::m_strPathName
private

Die vollständige Verzeichnisbezeichnung, in dem die Tabellen zu finden sind wie z.B. "C:/Pfad/Data/".

◆ m_ulClassID

unsigned long glo::IndexPool::ObjectStrIndex::m_ulClassID
private

Die Klassen-ID des verwalteten Objekt-StringIndex, gilt nur für eine Klasse (nicht für Tabellen).

◆ m_UniqueIndexMap

std::map< std::string, ObjStrIdTuple * , std::less< std::string > > glo::IndexPool::ObjectStrIndex::m_UniqueIndexMap
private

Wenn m_bUnique == true, wird diese Map genutzt.

◆ m_UniqueIndexMapIterator

std::map<std::string,ObjStrIdTuple*>::iterator glo::IndexPool::ObjectStrIndex::m_UniqueIndexMapIterator
private

Ein interner Iterator für m_UniqueIndexMap.


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