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

Diese Klasse kodiert bzw. dekodiert Daten für den Transport in einem TCP-Paket. Mehr ...

#include <GloDataStreamer.h>

Öffentliche Typen

enum  ContainerType { eMAP , eLIST }
 

Öffentliche Methoden

 DataStreamer ()
 
virtual ~DataStreamer ()
 
int streamBlobInData (ClassInfo *&rpClassInfo, const eut::Blob &rBlob)
 
int streamBlobInData (ClassInfoAttribute::Type *&rpClassInfoAttributeType, const eut::Blob &rBlob)
 
int streamBlobInData (LimitRecord *&prLimitRecord, const eut::Blob &rBlob)
 
int streamBlobInData (Record *&rpRecord, const eut::Blob &rBlob, const std::map< unsigned long, ClassInfo * > &prClassInfoMap, unsigned long ulClassID=0)
 
int streamBlobInData (std::list< Record * > *&rpRecordList, const eut::Blob &rBlob, const std::map< unsigned long, ClassInfo * > &prClassInfoMap)
 
int streamBlobInData (std::map< ObjID, Record *, std::less< ObjID > > *&rpRecordMap, const eut::Blob &rBlob, const std::map< unsigned long, ClassInfo * > &prClassInfoMap)
 
int streamBlobInData (std::map< unsigned long, ClassInfo *, std::less< unsigned long > > *&prClassInfoMap, const eut::Blob &rBlob)
 
int streamBlobInData (std::vector< LimitRecord > *&prLimitRecordVector, const eut::Blob &rBlob)
 
int streamDataInBlob (eut::Blob &rBlob, const ClassInfo &rClassInfo)
 
int streamDataInBlob (eut::Blob &rBlob, const ClassInfoAttribute::Type &rClassInfoAttributeType)
 
int streamDataInBlob (eut::Blob &rBlob, const LimitRecord &rLimitRecord)
 
int streamDataInBlob (eut::Blob &rBlob, const Record &rRecord, std::map< ObjID, ObjID, std::less< ObjID > > &rReadyRecordMap)
 
int streamDataInBlob (eut::Blob &rBlob, const std::list< Record * > &rRecordList, std::map< ObjID, ObjID, std::less< ObjID > > &rReadyRecordMap)
 
int streamDataInBlob (eut::Blob &rBlob, const std::map< ObjID, Record *, std::less< ObjID > > &rRecordMap, std::map< ObjID, ObjID, std::less< ObjID > > &rReadyRecordMap)
 
int streamDataInBlob (eut::Blob &rBlob, const std::map< unsigned long, ClassInfo *, std::less< unsigned long > > &rClassInfoMap)
 
int streamDataInBlob (eut::Blob &rBlob, const std::vector< LimitRecord > &rLimitRecordVector)
 

Private Methoden

 DataStreamer (const DataStreamer &)
 
int getTagVariable (std::size_t &rnRetVal, const eut::Blob &rBlob, const std::string &rsTagVar)
 
int getTagVariable (std::string &rsRetVal, const eut::Blob &rBlob, const std::string &rsTagVar)
 
DataStreameroperator= (const DataStreamer &)
 
int streamBlobAttributeInRecordAttribute (BaseRecordAttribute &rBaseRecordAttribute, const eut::Blob &rBlob, const std::string &rsFileInfo, unsigned int uiAttributeInformation, const std::map< unsigned long, ClassInfo * > &prClassInfoMap, std::map< ObjID, Record *, std::less< ObjID > > &rReadyRecordMap, unsigned long ulClassID=0)
 
int streamBlobAttributeListInClassInfo (ClassInfo &rClassInfo, const eut::Blob &rBlob)
 
int streamBlobAttributeListInRecord (Record &rRecord, const eut::Blob &rBlob, const std::map< unsigned long, ClassInfo * > &prClassInfoMap, std::map< ObjID, Record *, std::less< ObjID > > &rReadyRecordMap, unsigned long ulClassID=0)
 
int streamBlobInClassInfo (ClassInfo *&rpClassInfo, const eut::Blob &rBlob)
 
int streamBlobIndexItemsInClassInfoIndex (ClassInfoIndex &rClassInfoIndex, const eut::Blob &rBlob)
 
int streamBlobIndexListInClassInfo (ClassInfo &rClassInfo, const eut::Blob &rBlob)
 
int streamBlobInRecord (Record *&rpRecord, const eut::Blob &rBlob, const std::map< unsigned long, ClassInfo * > &prClassInfoMap, std::map< ObjID, Record *, std::less< ObjID > > &rReadyRecordMap, unsigned long ulClassID=0)
 
int streamBlobInRecordContainer (std::map< ObjID, Record *, std::less< ObjID > > *&rpRecordMap, std::list< Record * > *&rpRecordList, ContainerType eContainerType, const eut::Blob &rBlob, const std::map< unsigned long, ClassInfo * > &prClassInfoMap)
 
int streamBlobLimitRecordInLimitRecordAttribute (LimitRecord &rLimitRecord, const eut::Blob &rBlob)
 
std::size_t streamDataClassInfoAttributeInBlob (eut::Blob &rBlob, const ClassInfoAttribute &rAttribute)
 
std::size_t streamDataClassInfoInBlob (eut::Blob &rBlob, const ClassInfo &rClassInfo)
 
std::size_t streamDataClassInfoIndexAttributeInBlob (eut::Blob &rBlob, const ClassInfoIndex::IndexAttributeItem &rIndexAttributeInfo)
 
std::size_t streamDataClassInfoIndexInBlob (eut::Blob &rBlob, const ClassInfoIndex &rIndex)
 
std::size_t streamDataLimitRecordInBlob (eut::Blob &rBlob, const LimitRecord &rLimitRecord)
 
template<typename T >
int streamDataLotAttributeInBlob (eut::Blob &rAttributeValueBlob, T &rSet)
 
std::size_t streamDataRecordAttributeInBlob (eut::Blob &rBlob, BaseRecordAttribute &rAttribute, std::map< ObjID, ObjID, std::less< ObjID > > &rReadyRecordMap)
 
std::size_t streamDataRecordInBlob (eut::Blob &rBlob, const Record &rRecord, std::map< ObjID, ObjID, std::less< ObjID > > &rReadyRecordMap)
 

Private Attribute

eut::CriticalSection m_LocalCriticalSection
 

Ausführliche Beschreibung

Diese Klasse kodiert bzw. dekodiert Daten für den Transport in einem TCP-Paket.

Diese Klasse wurde 2013 eingeführt, weil die bislang vorgenommene Kodierung keine Kontrolle des Paketes zuließ (konnte z.B. nicht ausgedruckt werden). Es wird für die meisten Packete das XML-Format genutzt.

Autor
Helmut Jakoby

Dokumentation der Aufzählungstypen

◆ ContainerType

Um nutzenden Methoden mitzuteilen, welcher Typ von Container genutzt wird.

Aufzählungswerte
eMAP 

Es wird eine std::map genutzt.

eLIST 

Es wird eine std::list genutzt.

Beschreibung der Konstruktoren und Destruktoren

◆ DataStreamer() [1/2]

glo::DataStreamer::DataStreamer ( )

Standard-Konstruktor.

◆ ~DataStreamer()

virtual glo::DataStreamer::~DataStreamer ( )
virtual

Destruktor.

◆ DataStreamer() [2/2]

glo::DataStreamer::DataStreamer ( const DataStreamer & )
private

Der Copy-Konstruktor steht nicht zur Verfügung.

Dokumentation der Elementfunktionen

◆ getTagVariable() [1/2]

int glo::DataStreamer::getTagVariable ( std::size_t & rnRetVal,
const eut::Blob & rBlob,
const std::string & rsTagVar )
private

Liefert aus überlieferten Blob den Wert von übergebener TagVariablen ab aktueller Position als std::size_t. Es wird die ursprüngliche aktuelle Position im übergebenen Blob wieder auf den ursprünglichen Wert gesetzt; also im Endefekt nicht verändert.

Wenn Blob =

'<atr n="OOMyClass.m_IsIt" t="bool" p="34" l="1"></atr>'

und die aktuellePosition == 1 und TagVariable == 'p', dann ist die Rückgabe == 34.

Parameter
[in,out]rnRetValDer Wert aus der TagVariablen.
[in]rBlobDas auszuwertende Blob als XML.
[in]rsTagVarDie TagVariablen.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.

◆ getTagVariable() [2/2]

int glo::DataStreamer::getTagVariable ( std::string & rsRetVal,
const eut::Blob & rBlob,
const std::string & rsTagVar )
private

Liefert aus übergebenen Blob den Wert von übergebener TagVariablen ab aktueller Position als String. Es wird die ursprüngliche aktuelle Position im übergebenen Blob wieder auf den ursprünglichen Wert gesetzt; also im Endefekt nicht verändert.

Wenn Blobinhalt...

'<atr n="OOMyClass.m_IsIt" t="bool" p="34" l="1"></atr>'

...und die aktuelle Position == 1 und TagVariable == 'n', dann ist die Rückgabe == "OOMyClass.m_IsIt".

Wenn Blobinhalt...

'<atr n="Test"></atr><atr n="Fest"></atr>'

...und die aktuelle Position == 10 und TagVariable == 'n', dann ist die Rückgabe == "Fest".

Parameter
[in,out]rsRetValDer Wert aus der TagVariablen.
[in]rBlobDas auszuwertende Blob als XML.
[in]rsTagVarDie TagVariablen.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.

◆ operator=()

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

Der Zuweisungsoperator steht nicht zur Verfügung.

◆ streamBlobAttributeInRecordAttribute()

int glo::DataStreamer::streamBlobAttributeInRecordAttribute ( BaseRecordAttribute & rBaseRecordAttribute,
const eut::Blob & rBlob,
const std::string & rsFileInfo,
unsigned int uiAttributeInformation,
const std::map< unsigned long, ClassInfo * > & prClassInfoMap,
std::map< ObjID, Record *, std::less< ObjID > > & rReadyRecordMap,
unsigned long ulClassID = 0 )
private

Befüllt ein BaseRecordAttribute aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rBaseRecordAttributeDas Datensatzattribut, in das die Daten aus dem übergebenen Blob übernommen werden
[in]rBlobDas Blob mit den Werten des Datensatzattributs als XML.
[in]rsFileInfoGgf. eine Dateibezeichnung, damit evtl. zusätzliche Daten ermittelt werden können.
[in]uiAttributeInformationWird nur ausgewertet, wenn nicht 0 und das Attribut vom Typ APointerRecordAttribute ist:
  • Wenn 1, dann aus einem generischen Objekt.
  • Wenn 2, ist er Datensatz nicht mitgeliefert.
[in]prClassInfoMapDie Klasseninformationen aus denen der Aufbau der Datensätze hervorgeht.
[in]rReadyRecordMapDie schon gestreamten Datensätze.
[in]ulClassIDWenn > 0, dann wird der Record nur mit den Daten aus der Tabelle dieser Klasse gefüllt. Referenzierte Objekte werden nicht erwartet.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Zu beachten
Für Glo-Entwickler: Ist in GloRecordAttributeFunctions.cpp implementiert, damit Erweiterungen von Datensatz-Attributen dort gesammelt vorgenommen werden können.

◆ streamBlobAttributeListInClassInfo()

int glo::DataStreamer::streamBlobAttributeListInClassInfo ( ClassInfo & rClassInfo,
const eut::Blob & rBlob )
private

Füllt die ClassInfoAttribute in einem übergebenen ClassInfo aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rClassInfoDie Klasseninformation, in das die Daten aus dem übergebenen Blob übernommen werden.
[in]rBlobDas Blob mit den Werten des ClassInfoAttribute als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.

◆ streamBlobAttributeListInRecord()

int glo::DataStreamer::streamBlobAttributeListInRecord ( Record & rRecord,
const eut::Blob & rBlob,
const std::map< unsigned long, ClassInfo * > & prClassInfoMap,
std::map< ObjID, Record *, std::less< ObjID > > & rReadyRecordMap,
unsigned long ulClassID = 0 )
private

Befüllt einen Record aus übergebenen eut::Blob.

Beispielaufbau des AttributBlobs:

<!-- A record attribute with embedded record... -->
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" l="10">
1371785421
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" l="1">
0
</atr>
<atr n="Test3.m_pTest" t="pointer" l="385">
<oid>
6.0.10915
</oid>
<ats l="190">
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" l="10">
1371785930
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" l="1">
0
</atr>
<atr n="EmbEmbTest.m_dTest" t="double" l="3">
123
</atr>
</ats>
<oids l="135">
<atr n="glo::Persistent.m_ObjID" t="objid" p="430" l="9">
6.0.10915
</atr>
<atr n="EmbEmbTest.m_ObjID" t="objid" p="17" l="9">
6.0.10915
</atr>
</oids>
</atr>
<!-- or an ObjID list... -->
<atr n="glo::Persistent.m_ObjID" t="objid" p="31" l="9">
8.0.10908
</atr>
<atr n="Test3.m_ObjID" t="objid" p="17" l="9">
8.0.10908
</atr>
Parameter
[in,out]rRecordDer übergebene Datensatz, in den die Attribute aus dem übergebenen Blob übernommen werden.
[in]rBlobDas Blob mit den Werten des Datensatzes als XML.
[in]prClassInfoMapDie Klasseninformationen aus denen der Aufbau der Datensätze hervorgeht.
[in]ulClassIDWenn > 0, dann wird der Record nur mit den Daten aus der Tabelle dieser Klasse gefüllt. Referenzierte Objekte werden nicht erwartet.
[in]rReadyRecordMapDie schon gestreamten Datensätze.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Zu beachten
Für Glo-Entwickler: Ist in GloRecordAttributeFunctions.cpp implementiert, damit Erweiterungen von Datensatz-Attributen dort gesammelt vorgenommen werden können.

◆ streamBlobInClassInfo()

int glo::DataStreamer::streamBlobInClassInfo ( ClassInfo *& rpClassInfo,
const eut::Blob & rBlob )
private

Liefert bzw. befüllt eine ClassInfo aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rpClassInfoDie Klasseninformation, in die die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird eine neue Klasseninformation instanziiert; die aufrufende Instanz muss dann das Objekt wieder aus dem Speicher entfernen.
Wenn eine gültige Klasseninformation übergeben wird, werden deren Werte aus dem Blob gesetzt.
[in]rBlobDas Blob mit den Werten der Klasseninformation als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn eine Klasseninformation übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte der Klasseninformation undefiniert!

◆ streamBlobInData() [1/8]

int glo::DataStreamer::streamBlobInData ( ClassInfo *& rpClassInfo,
const eut::Blob & rBlob )

Liefert bzw. befüllt eine ClassInfo aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rpClassInfoDie Klasseninformation, in die die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird eine neue Klasseninformation instanziiert; die aufrufende Instanz muss dann das Objekt wieder aus dem Speicher entfernen.
Wenn eine gültige Klasseninformation übergeben wird, werden deren Werte aus dem Blob gesetzt.
[in]rBlobDas Blob mit den Werten der Klasseninformation als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn eine Klasseninformation übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte der Klasseninformation undefiniert!

◆ streamBlobInData() [2/8]

int glo::DataStreamer::streamBlobInData ( ClassInfoAttribute::Type *& rpClassInfoAttributeType,
const eut::Blob & rBlob )

Liefert bzw. befüllt einen ClassInfoAttribute::Type aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rpClassInfoAttributeTypeDer ClassInfoAttribute::Type, in den die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer ClassInfoAttribute::Type instanziiert; die aufrufende Instanz muss dann das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger ClassInfoAttribute::Type übergeben wird, werden dessen Werte aus dem Blob gesetzt.
[in]rBlobDas Blob mit den Werten des ClassInfoAttribute::Type als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein ClassInfoAttribute::Type übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des ClassInfoAttribute::Type undefiniert!

◆ streamBlobInData() [3/8]

int glo::DataStreamer::streamBlobInData ( LimitRecord *& prLimitRecord,
const eut::Blob & rBlob )

Liefert bzw. befüllt einen LimitRecord aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]prLimitRecordDer LimitRecord, in die die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer LimitRecord instanziiert; die aufrufende Instanz muss dann das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger LimitRecord übergeben wird, werden dessen Werte aus dem Blob gesetzt.
[in]rBlobDas Blob mit den Werten des LimitRecord als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein LimitRecord übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des LimitRecord undefiniert!

◆ streamBlobInData() [4/8]

int glo::DataStreamer::streamBlobInData ( Record *& rpRecord,
const eut::Blob & rBlob,
const std::map< unsigned long, ClassInfo * > & prClassInfoMap,
unsigned long ulClassID = 0 )

Liefert bzw. befüllt einen Record aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rpRecordDer Datensatz, in den die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer Datensatz instanziiert; die aufrufende Instanz muss dann das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger Datensatz übergeben wird, werden dessen Attribute aus dem Blob gesetzt.
[in]rBlobDas Blob mit den Werten des Record als XML.
[in]prClassInfoMapDie Klasseninformationen aus denen der Aufbau der Datensätze hervorgeht.
[in]ulClassIDWenn > 0, dann wird der Record nur mit den Daten aus der Tabelle dieser Klasse gefüllt.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein Datensatz übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des Datensatzes undefiniert!

◆ streamBlobInData() [5/8]

int glo::DataStreamer::streamBlobInData ( std::list< Record * > *& rpRecordList,
const eut::Blob & rBlob,
const std::map< unsigned long, ClassInfo * > & prClassInfoMap )

Liefert bzw. befüllt eine std::list von Record's aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rpRecordListDer Container,in den die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer Container instanziiert; die aufrufende Instanz muss das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger Container übergeben wird, werden die Inhalte (wenn nicht schon drinn) aus dem Blob eingefügt, ohne den ursprünglichen Inhalt des Containers zu ändern.
[in]rBlobDas Blob mit den Werten der GloRecords als XML.
[in]prClassInfoMapDie Klasseninformationen aus denen der Aufbau der Datensätze hervorgeht.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein Container übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des Containers bzw. der Datensätze undefiniert!

◆ streamBlobInData() [6/8]

int glo::DataStreamer::streamBlobInData ( std::map< ObjID, Record *, std::less< ObjID > > *& rpRecordMap,
const eut::Blob & rBlob,
const std::map< unsigned long, ClassInfo * > & prClassInfoMap )

Liefert bzw. befüllt eine std::map von Record's aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rpRecordMapDer Container, in den die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer Container instanziiert; die aufrufende Instanz muss das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger Container übergeben wird, werden die Inhalte (wenn nicht schon drinn) aus dem Blob eingefügt, ohne den ursprünglichen Inhalt des Containers zu ändern.
[in]rBlobDas Blob mit den Werten der GloRecords als XML.
[in]prClassInfoMapDie Klasseninformationen aus denen der Aufbau der Datensätze hervorgeht.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein Container übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des Containers bzw. der Datensätze undefiniert!

◆ streamBlobInData() [7/8]

int glo::DataStreamer::streamBlobInData ( std::map< unsigned long, ClassInfo *, std::less< unsigned long > > *& prClassInfoMap,
const eut::Blob & rBlob )

Liefert bzw. befüllt eine std::map mit ClassInfo's aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]prClassInfoMapDer Container, in den die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer Container instanziiert; die aufrufende Instanz muss das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger Container übergeben wird, werden die Inhalte (wenn nicht schon drinn) aus dem Blob eingefügt, ohne den ursprünglichen Inhalt des Containers zu ändern.
[in]rBlobDas Blob mit den Werten der Klasseninformationen als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein Container übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des Containers bzw. der Datensätze undefiniert!

◆ streamBlobInData() [8/8]

int glo::DataStreamer::streamBlobInData ( std::vector< LimitRecord > *& prLimitRecordVector,
const eut::Blob & rBlob )

Liefert bzw. befüllt einen std::vector mit LimitRecord's aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]prLimitRecordVectorDer Container, in den die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer Container instanziiert; die aufrufende Instanz muss das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger Container übergeben wird, werden die Inhalte (wenn nicht schon drinn) aus dem Blob eingefügt, ohne den ursprünglichen Inhalt des Containers zu ändern.
[in]rBlobDas Blob mit den Werten der LimitRecord's als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein Contaimer übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des Containers bzw. der LimitRecord's undefiniert!

◆ streamBlobIndexItemsInClassInfoIndex()

int glo::DataStreamer::streamBlobIndexItemsInClassInfoIndex ( ClassInfoIndex & rClassInfoIndex,
const eut::Blob & rBlob )
private

Füllt die ClassInfoIndex::IndexAttributeItems in einem übergebenen ClassInfoIndex aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rClassInfoIndexDer ClassInfoIndex, in welchen die Daten aus dem übergebenen Blob übernommen werden.
[in]rBlobDas Blob mit den Werten des ClassInfoIndex::IndexAttributeItem als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.

◆ streamBlobIndexListInClassInfo()

int glo::DataStreamer::streamBlobIndexListInClassInfo ( ClassInfo & rClassInfo,
const eut::Blob & rBlob )
private

Füllt GloClassInfoIndexe in einem übergebenen ClassInfo aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rClassInfoDie Klasseninformation, in welche die Daten aus dem übergebenen Blob übernommen werden.
[in]rBlobDas Blob mit den Werten des ClassInfoIndex als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.

◆ streamBlobInRecord()

int glo::DataStreamer::streamBlobInRecord ( Record *& rpRecord,
const eut::Blob & rBlob,
const std::map< unsigned long, ClassInfo * > & prClassInfoMap,
std::map< ObjID, Record *, std::less< ObjID > > & rReadyRecordMap,
unsigned long ulClassID = 0 )
private

Liefert bzw. befüllt einen Record aus übergebenen eut::Blob.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rpRecordDer Datensatz, in die die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer Datensatz instanziiert; die aufrufende Instanz muss dann das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger Datensatz übergeben wird, werden dessen Attribute aus Blob gesetzt.
[in]rBlobDas Blob mit den Werten des Datensatzes als XML.
[in]prClassInfoMapDie Klasseninformationen aus denen der Aufbau der Datensätze hervorgeht.
[in]rReadyRecordMapDie schon gestreamten Datensätze; wenn der zu streamende Datensatz schon in diese Container, dann wird rpRecord aus diesem geliefert mit Fehler ERR_RECORD_READY.
[in]ulClassIDWenn > 0, dann wird der Record nur mit den Daten aus der Tabelle dieser Klasse gefüllt.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein Datensatz übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des Datensatzes undefiniert!

◆ streamBlobInRecordContainer()

int glo::DataStreamer::streamBlobInRecordContainer ( std::map< ObjID, Record *, std::less< ObjID > > *& rpRecordMap,
std::list< Record * > *& rpRecordList,
ContainerType eContainerType,
const eut::Blob & rBlob,
const std::map< unsigned long, ClassInfo * > & prClassInfoMap )
private

Liefert bzw. befüllt eine std::map bzw. std::list von Record's aus übergebenen eut::Blob in Abhängigkeit von übergebenen ContainerType.

Aufbau des Blobs siehe hier...

Parameter
[in,out]rpRecordMapDer Container, in den die Werte aus dem Blob übertragen werden. Wenn nullptr übergeben, wird ein neuer Container instanziiert; die aufrufende Instanz muss das Objekt wieder aus dem Speicher entfernen.
Wenn ein gültiger Container übergeben wird, werden die Inhalte (wenn nicht schon drinn) aus dem Blob eingefügt, ohne den ursprünglichen Inhalt des Containers zu ändern.
[in,out]rpRecordListSiehe Beschreibung von rpRecordMap.
[in]rBlobDas Blob mit den Werten des Datensatzes als XML.
[in]eContainerTypeLegt fest, ob rpRecordMap oder rpRecordList als Parameter beachtet wird.
[in]prClassInfoMapDie Klasseninformationen aus denen der Aufbau der Datensätze hervorgeht.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Wenn ein Container übergeben wurde und es ist ein Fehler aufgetreten, sind die Werte des Containers bzw. der enthaltenen Datensätze undefiniert!

◆ streamBlobLimitRecordInLimitRecordAttribute()

int glo::DataStreamer::streamBlobLimitRecordInLimitRecordAttribute ( LimitRecord & rLimitRecord,
const eut::Blob & rBlob )
private

Füllt einen LimitRecord aus übergebenen eut::Blob.

Beispielaufbau (hier mit Kommentar):

<!-- dt=DataTypeNummer, dn=DataTypeName mi=MinWert mx=MaxWert fs=Feldgröße in Tabelle -->
<atr dt="1" dn="ObjID" mi="0" mx="1" fs="1"></atr>
Parameter
[in,out]rLimitRecordDer LimitRecord, in welchen die Daten aus dem übergebenen Blob übernommen werden.
[in]rBlobDas Blob mit den Werten des LimitRecord als XML.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.

◆ streamDataClassInfoAttributeInBlob()

std::size_t glo::DataStreamer::streamDataClassInfoAttributeInBlob ( eut::Blob & rBlob,
const ClassInfoAttribute & rAttribute )
private

Streamt die Werte der übergebenen GloClassInfoAttributes als XML-String in einen übergeben eut::Blob (ohne Header etc.).

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- n->Name, ty->TypeEnum ts->TypeAsStr, ti->TypeInfo, tt->TypeSubType, tn->TableName, fn->Feldname, fp->FeldPos -->
<atr n="m_ObjID" ty="1" ts="objid" ti="" tt="" tn="Autor" fn="ObjID" fp="0"></atr>
<!-- oder -->
<atr n="m_sName" ty="11" ts="string" ti="" tt="" tn="Autor" fn="Name" fp="1"></atr>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rAttributeDas Klasseninformations-Attribut, dessen Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Die neue Größe des übergebenen rBlob.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataClassInfoInBlob()

std::size_t glo::DataStreamer::streamDataClassInfoInBlob ( eut::Blob & rBlob,
const ClassInfo & rClassInfo )
private

Streamt die Werte der übergebenen ClassInfo als XML-String in einen übergeben eut::Blob (ohne Header etc.).

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- sn=SchemaName, na=Name, id=ClassID sid=SuperClassIDs sci=SuperClassInfo -->
<atr sn="MyBase" na="Autor" id="3" sid="1|" sci=" |"></atr>
<ats l="352"> <!-- Klasse == ClassInfoAttribute -->
<!-- n->Name, ty->TypeEnum ts->TypeAsStr, ti->TypeInfo, tt->TypeSubType, tn->TableName, fn->Feldname, fp->FeldPos -->
<atr n="m_ObjID" ty="1" ts="objid" ti="" tt="" tn="Autor" fn="ObjID" fp="0"></atr>
<atr n="m_sName" ty="11" ts="string" ti="" tt="" tn="Autor" fn="Name" fp="1"></atr>
<atr n="m_sVorname" ty="11" ts="string" ti="" tt="" tn="Autor" fn="Vorname" fp="2"></atr>
<atr n="m_BookSet" ty="18" ts="refsetondemand" ti="" tt="Book" tn="Autor" fn="Books" fp="3"></atr>
</ats>
<idxs l="264"> <!-- Klasse == ClassInfoIndex -->
<!-- n->Name, uq->unique, cs->CaseSensitive, lg->Sprache l->Anzahl aller IndexAttributItems -->
<idx n="IDX_FullName" uq="0" cs="0" lg="2|" l="97"> <!-- Klasse == IndexAttributeItem -->
<!-- tn=TableName, fn=Feldname, sc=signifikante Zeichen nm=ist Zahl -->
<atr tn="Autor" fn="Name" sc="20" nm="0"></atr>
<atr tn="Autor" fn="Vorname" sc="20" nm="0"></atr>
</idx>
<idx n="IDX_Name" uq="0" cs="0" lg="2|" l="47">
<atr tn="Autor" fn="Name" sc="20" nm="0"></atr>
</idx>
</idxs>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rClassInfoDie ClassInfo, deren Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Die neue Größe des übergebenen rBlob.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataClassInfoIndexAttributeInBlob()

std::size_t glo::DataStreamer::streamDataClassInfoIndexAttributeInBlob ( eut::Blob & rBlob,
const ClassInfoIndex::IndexAttributeItem & rIndexAttributeInfo )
private

Streamt die Werte der übergebenen ClassInfoIndex::IndexAttributeItem als XML-String in einen übergeben eut::Blob (ohne Header etc.).

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- ip=Indexpfad, sc=signifikante Zeichen nm=ist Zahl -->
<atr ip="3.6" sc="20" nm="0"></atr>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rIndexAttributeInfoDas Klasseninformations-Indexelement, dessen Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Die neue Größe des übergebenen rBlob.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataClassInfoIndexInBlob()

std::size_t glo::DataStreamer::streamDataClassInfoIndexInBlob ( eut::Blob & rBlob,
const ClassInfoIndex & rIndex )
private

Streamt die Werte der übergebenen ClassInfoIndex als XML-String in einen übergeben eut::Blob (ohne Header etc.).

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<idx n="IDX_FullName" uq="0" cs="0" lg="2|" l="97"> <!-- Klasse == IndexAttributeItem -->
<!-- ip=Indexpfad, sc=signifikante Zeichen nm=ist Zahl -->
<atr ip="3.6" sc="20" nm="0"></atr>
<atr ip="4.5.6.4" sc="20" nm="0"></atr>
</idx>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rIndexDer Klasseninformations-Index, dessen Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Die neue Größe des übergebenen rBlob.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataInBlob() [1/8]

int glo::DataStreamer::streamDataInBlob ( eut::Blob & rBlob,
const ClassInfo & rClassInfo )

Streamt die Werte der übergebenen ClassInfo als XML-String in einen übergeben eut::Blob wie er versendet wird.

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- '<data' ist die Einleitung, t->Datentyp l->Länge des Abschnitts ab Ende der Zeile bis '</data>' -->
<data t="classinfo" l="646">
<!-- sn=SchemaName, na=Name, id=ClassID sid=SuperClassIDs sci=SuperClassInfo -->
<atr sn="MyBase" na="Autor" id="3" sid="1|" sci=" |"></atr>
<ats l="352"> <!-- Klasse == ClassInfoAttribute -->
<!-- n->Name, ty->TypeEnum ts->TypeAsStr, ti->TypeInfo, tt->TypeSubType, tn->TabellenName, fn->Feldname, fp->FeldPos -->
<atr n="m_ObjID" ty="1" ts="objid" ti="" tt="" tn="Autor" fn="ObjID" fp="0"></atr>
<atr n="m_sName" ty="11" ts="string" ti="" tt="" tn="Autor" fn="Name" fp="1"></atr>
<atr n="m_sVorname" ty="11" ts="string" ti="" tt="" tn="Autor" fn="Vorname" fp="2"></atr>
<atr n="m_BookSet" ty="18" ts="refsetondemand" ti="" tt="Book" tn="Autor" fn="Books" fp="3"></atr>
</ats>
<idxs l="264"> <!-- Klasse == ClassInfoIndex -->
<!-- n->Name, uq->unique, cs->CaseSensitive, lg->Sprache l->Anzahl aller IndexAttributItems -->
<idx n="IDX_FullName" uq="0" cs="0" lg="2|" l="97"> <!-- Klasse == IndexAttributeItem -->
<!-- tn=TabellenName, fn=Feldname, sc=signifikante Zeichen nm=ist Zahl -->
<atr tn="Autor" fn="Name" sc="20" nm="0"></atr>
<atr tn="Autor" fn="Vorname" sc="20" nm="0"></atr>
</idx>
<idx n="IDX_Name" uq="0" cs="0" lg="2|" l="47">
<atr tn="Autor" fn="Name" sc="20" nm="0"></atr>
</idx>
</idxs>
</data>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rClassInfoDie ClassInfo, deren Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataInBlob() [2/8]

int glo::DataStreamer::streamDataInBlob ( eut::Blob & rBlob,
const ClassInfoAttribute::Type & rClassInfoAttributeType )

Streamt die Werte des übergebenen ClassInfoAttribute::Type als XML-String in einen übergeben eut::Blob wie er versendet wird.

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- '<data' ist die Einleitung, t->Datentyp l->Länge des Abschnitts ab Ende der Zeile bis '</data>' -->
<data t="ClassInfoAttributeType" l="31">
<!-- dt=DatenTypEnum, inf=TypeInfo st=SubTyp stid=SubTypClassID -->
<atr dt="1" inf="20" st="" stid=""></atr>
</data>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rClassInfoAttributeTypeDer ClassInfoAttribute::Type, dessen Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataInBlob() [3/8]

int glo::DataStreamer::streamDataInBlob ( eut::Blob & rBlob,
const LimitRecord & rLimitRecord )

Streamt die Werte des übergebenen LimitRecord als XML-String in einen übergeben eut::Blob wie er versendet wird.

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- '<data' ist die Einleitung, t->Datentyp l->Länge des Abschnitts ab Ende der Zeile bis '</data>' -->
<data t="limitrecord" l="23">
<!-- dt=DataTypeNummer, dn=DataTypeName mi=MinWert mx=MaxWert fs=Feldgröße in Tabelle -->
<atr dt="1" dn="ObjID" mi="0" mx="1" fs="1"></atr>
</data>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rLimitRecordDer LimitRecord, dessen Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataInBlob() [4/8]

int glo::DataStreamer::streamDataInBlob ( eut::Blob & rBlob,
const Record & rRecord,
std::map< ObjID, ObjID, std::less< ObjID > > & rReadyRecordMap )

Streamt die Datensatzattribut-Werte des übergebenen Record als XML-String in einen übergeben eut::Blob wie er versendet wird.

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- '<data' ist die Einleitung, t->Datentyp l->Länge des Abschnitts ab Ende der Zeile bis '</data>' -->
<data t="record" l="798">
<oid>8.0.10908</oid> <!-- ObjectID des Datensatzes -->
<ats l="609"> <!-- Attribut-Liste des Datensatzes l->Länge des Abschnitts ab Ende der Zeile bis '</ats>' -->
<!-- n->Name des Attributs t->Typ des Attributs p->DateiPosition l->Länge des Abschnitts ab Ende der Zeile bis '</atr>' -->
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" p="0" l="10">
1371785421 <!-- Attributewert -->
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" p="0" l="1">
0
</atr>
<!-- Bei eingebetteten bzw. PointerRecords n->Name des Attributs t->Typ hier pointer g->ob generisch und l->wie gehabt -->
<atr n="Test3.m_pTest" t="pointer" p="0" g="0" l="403">
<oid>6.0.10915</oid>
<ats l="208">
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" p="0" l="10">
1371785930
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" p="0" l="1">
0
</atr>
<atr n="EmbEmbTest.m_dTest" t="double" p="0" l="3">
123
</atr>
</ats>
<oids l="135">
<atr n="glo::Persistent.m_ObjID" t="objid" p="430" l="9">
6.0.10915
</atr>
<atr n="EmbEmbTest.m_ObjID" t="objid" p="17" l="9">
6.0.10915
</atr>
</oids>
</atr>
</ats>
<!-- ObjID-Liste Aufbau wie Attribute-Liste; nur eben mit ObjIDs -->
<oids l="129">
<atr n="glo::Persistent.m_ObjID" t="objid" p="31" l="9">
8.0.10908
</atr>
<atr n="Test3.m_ObjID" t="objid" p="17" l="9">
8.0.10908
</atr>
</oids>
</data>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rRecordDer Datensatz, dessen Attribute als XML-String an das übergebene eut::Blob angehängt werden sollen.
[in]rReadyRecordMapDie schon gestreamten Datensätze müssen übergeben werden, damit diese nicht nochmals vollständig, sondern nur als Objekt-ID gestreamt werden.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataInBlob() [5/8]

int glo::DataStreamer::streamDataInBlob ( eut::Blob & rBlob,
const std::list< Record * > & rRecordList,
std::map< ObjID, ObjID, std::less< ObjID > > & rReadyRecordMap )

Streamt die Datensatzattribut-Werte der übergebenen Record's in einer std::list als XML-String in einen übergeben eut::Blob wie er versendet wird.

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- '<data' ist die Einleitung, t->Datentyp l->Länge des Abschnitts ab Ende der Zeile bis '</data>' -->
<data t="recordlist" l="869">
<e l="403">
<oid>6.0.8</oid>
<ats l="219">
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" p="0" l="10">
1383154754
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" p="0" l="1">
0
</atr>
<atr n="EmbEmbTest.m_dTest" t="double" p="0" l="13">
-6.27744e+066
</atr>
</ats>
<oids l="128">
<atr n="glo::Persistent.m_ObjID" t="objid" p="316" l="5">
6.0.8
</atr>
<atr n="EmbEmbTest.m_ObjID" t="objid" p="185" l="5">
6.0.8
</atr>
</oids>
</e>
<e l="16">
<oid>6.0.4</oid> <!-- hier ein schon eingelesener Datensatz -->
</e>
<e l="406">
<oid>6.0.10</oid>
<ats l="219">
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" p="0" l="10">
1383154764
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" p="0" l="1">
0
</atr>
<atr n="EmbEmbTest.m_dTest" t="double" p="0" l="13">
-6.27744e+066
</atr>
</ats>
<oids l="130">
<atr n="glo::Persistent.m_ObjID" t="objid" p="373" l="6">
6.0.10
</atr>
<atr n="EmbEmbTest.m_ObjID" t="objid" p="241" l="6">
6.0.10
</atr>
</oids>
</e>
</data>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rRecordListDie Datensätzen, deren Datensatzattribut-Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
[in]rReadyRecordMapDie schon gestreamten Datensätze müssen übergeben werden, damit diese nicht nochmals vollständig, sondern nur als Objekt-ID gestreamt werden.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataInBlob() [6/8]

int glo::DataStreamer::streamDataInBlob ( eut::Blob & rBlob,
const std::map< ObjID, Record *, std::less< ObjID > > & rRecordMap,
std::map< ObjID, ObjID, std::less< ObjID > > & rReadyRecordMap )

Streamt die Datensatzattribut-Werte der übergebenen Record's in einer std::map als XML-String in einen übergeben eut::Blob wie er versendet wird.

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- '<data' ist die Einleitung, t->Datentyp l->Länge des Abschnitts ab Ende der Zeile bis '</data>' -->
<data t="recordmap" l="869">
<e l="403">
<oid>6.0.8</oid>
<ats l="219">
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" p="0" l="10">
1383154754
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" p="0" l="1">
0
</atr>
<atr n="EmbEmbTest.m_dTest" t="double" p="0" l="13">
-6.27744e+066
</atr>
</ats>
<oids l="128">
<atr n="glo::Persistent.m_ObjID" t="objid" p="316" l="5">
6.0.8
</atr>
<atr n="EmbEmbTest.m_ObjID" t="objid" p="185" l="5">
6.0.8
</atr>
</oids>
</e>
<e l="16">
<oid>6.0.4</oid> <!-- hier ein schon eingelesener Datensatz -->
</e>
<e l="406">
<oid>6.0.10</oid>
<ats l="219">
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" p="0" l="10">
1383154764
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" p="0" l="1">
0
</atr>
<atr n="EmbEmbTest.m_dTest" t="double" p="0" l="13">
-6.27744e+066
</atr>
</ats>
<oids l="130">
<atr n="glo::Persistent.m_ObjID" t="objid" p="373" l="6">
6.0.10
</atr>
<atr n="EmbEmbTest.m_ObjID" t="objid" p="241" l="6">
6.0.10
</atr>
</oids>
</e>
</data>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rRecordMapDie Datensätzen, deren Datensatzattribut-Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
[in]rReadyRecordMapDie schon gestreamten Datensätze müssen übergeben werden, damit diese nicht nochmals vollständig, sondern nur als Objekt-ID gestreamt werden.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataInBlob() [7/8]

int glo::DataStreamer::streamDataInBlob ( eut::Blob & rBlob,
const std::map< unsigned long, ClassInfo *, std::less< unsigned long > > & rClassInfoMap )

Streamt die Werte der übergebenen GloClassInfos in einer std::map als XML-String in einen übergeben eut::Blob wie er versendet wird.

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- '<data' ist die Einleitung, t->Datentyp l->Länge des Abschnitts ab Ende der Zeile bis '</data>' -->
<data t="classinfomap" l="4517">
...
<e l="709">
<!-- n->Name, id->ClassID sid->SuperClassIDs sci->SuperClassInfo -->
<atr n="Autor" id="3" sid="1|" sci=" |"></atr>
<ats l="352"> <!-- Klasse == ClassInfoAttribute -->
<!-- n->Name, ty->TypeEnum ts->TypeAsStr, ti->TypeInfo, tt->TypeSubType, tn->TableName, fn->Feldname, fp->FeldPos -->
<atr n="m_ObjID" ty="1" ts="objid" ti="" tt="" tn="Autor" fn="ObjID" fp="0"></atr>
<atr n="m_sName" ty="11" ts="string" ti="" tt="" tn="Autor" fn="Name" fp="1"></atr>
<atr n="m_sVorname" ty="11" ts="string" ti="" tt="" tn="Autor" fn="Vorname" fp="2"></atr>
<atr n="m_BookSet" ty="18" ts="refsetondemand" ti="" tt="Book" tn="Autor" fn="Books" fp="3"></atr>
</ats>
<idxs l="264"> <!-- Klasse == ClassInfoIndex -->
<!-- n->Name, uq->unique, cs->CaseSensitive, lg->Language l->Anzahl aller IndexAttributItems -->
<idx n="IDX_FullName" uq="0" cs="0" lg="2|" l="97"> <!-- Klasse == IndexAttributeItem -->
<!-- tn=TableName, fn=Feldname, sc=signifikante Zeichen nm=ist Zahl -->
<atr tn="Autor" fn="Name" sc="20" nm="0"></atr>
<atr tn="Autor" fn="Vorname" sc="20" nm="0"></atr>
</idx>
<idx n="IDX_Name" uq="0" cs="0" lg="2|" l="47">
<atr tn="Autor" fn="Name" sc="20" nm="0"></atr>
</idx>
</idxs>
</e>
...
</data>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rClassInfoMapDie ClassInfo's, deren Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataInBlob() [8/8]

int glo::DataStreamer::streamDataInBlob ( eut::Blob & rBlob,
const std::vector< LimitRecord > & rLimitRecordVector )

Streamt die Werte der übergebenen LimitRecord's in einem std::vector als XML-String in einen übergeben eut::Blob wie er versendet wird.

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- '<data' ist die Einleitung, t->Datentyp l->Länge des Abschnitts ab Ende der Zeile bis '</data>' -->
<data t="limitrecordvector" l="647">
<!-- dt=DataTypeNummer, dn=DataTypeName mi=MinWert mx=MaxWert fs=Feldgröße in Tabelle -->
<atr dt="1" dn="ObjID" mi="0" mx="1" fs="1"></atr>
<atr dt="2" dn="char" mi="0" mx="1" fs="1"></atr>
...
<atr dt="13" dn="time_t" mi="1900.01.01" mx="2038.12.31" fs="10"></atr>
...
</data>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rLimitRecordVectorDie LimitRecord's, deren Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataLimitRecordInBlob()

std::size_t glo::DataStreamer::streamDataLimitRecordInBlob ( eut::Blob & rBlob,
const LimitRecord & rLimitRecord )
private

Streamt die Werte des übergebenen LimitRecord als XML-String in einen übergeben eut::Blob (ohne Header etc.).

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<!-- dt=DataTypeNummer, dn=DataTypeName mi=MinWert mx=MaxWert fs=Feldgröße in Tabelle -->
<atr dt="1" dn="ObjID" mi="0" mx="1" fs="1"></atr>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rLimitRecordDer LimitRecord, dessen Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
Rückgabe
Die neue Größe des übergebenen rBlob.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

◆ streamDataLotAttributeInBlob()

template<typename T >
int glo::DataStreamer::streamDataLotAttributeInBlob ( eut::Blob & rAttributeValueBlob,
T & rSet )
private

Es werden die einzelnen Werte aus einem Container als XML-String an ein eut::Blob angehängt.

Beispiel: Der Container hat die beiden Werte "123456789012345" und "LaberRhababer". Der XML-String wäre dann...

<e l="15">
123456789012345
</e>
<e l="13">
LaberRhababer
</e>
Parameter
[in,out]rAttributeValueBlobDas Blob, an welches der XML-String angehängt wird.
[in]rSetDer Container mit den einzelnen Werten.
Zu beachten
Für Glo-Entwickler: Ist in GloRecordAttributeFunctions.cpp implementiert, damit Erweiterungen von Datensatz-Attributen dort gesammelt vorgenommen werden können.

◆ streamDataRecordAttributeInBlob()

std::size_t glo::DataStreamer::streamDataRecordAttributeInBlob ( eut::Blob & rBlob,
BaseRecordAttribute & rAttribute,
std::map< ObjID, ObjID, std::less< ObjID > > & rReadyRecordMap )
private

Streamt die Werte des übergebenen GloBaseRecordAttributs als XML-String in einen übergeben eut::Blob (ohne Header etc.).

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren) für die einzelnen Attributtypen:

Nach dem "atr"-Tag folgende Variablen haben folgende Bedeutung:

  • n->Name des Attributs
  • t->Typ des Attributs
  • p->DateiPosition
  • f->Dateiname
  • g->Generic
  • l->Länge des Abschnitts bis '

</atr>'

<!-- ------------------------------ -->
<!-- BoolRecordAttribute: -->
<atr n="OOMyClass.m_IsIt" t="bool" p="23" l="1">
0
</atr>
<!-- ------------------------------ -->
<!-- CharRecordAttribute: -->
<atr n="OOMyClass.m_Letter" t="char" p="23" l="2">
65
</atr>
<!-- ------------------------------ -->
<!-- DateTimeRecordAttribute: -->
<atr n="OOMyClass.m_Birthday" t="time_t" p="23" l="6">
765863
</atr>
<!-- ------------------------------ -->
<!-- DoubleRecordAttribute: -->
<atr n="OOMyClass.m_Float" t="double" p="23" l="5">
13.75
</atr>
<!-- ------------------------------ -->
<!-- OdRefRecordAttribute: -->
<atr n="OOMyClass.ObjID" t="ondemand" p="23" l="8">
6.0.3421
</atr>
<!-- ------------------------------ -->
<!-- IntRecordAttribute: -->
<atr n="ClassB.m_Number" t="int" p="23" l="4">
<!-- ------------------------------ -->
<!-- LongRecordAttribute: -->
<atr n="ClassB.m_Number" t="long" p="23" l="4">
<!-- ------------------------------ -->
<!-- ShortRecordAttribute: -->
<atr n="ClassB.m_Number" t="short" p="23" l="4">
<!-- ------------------------------ -->
<!-- UIntRecordAttribute: -->
<atr n="ClassB.m_Number" t="unsigned int" p="23" l="4">
<!-- ------------------------------ -->
<!-- ULongRecordAttribute: -->
<atr n="ClassB.m_Number" t="unsigned long" p="23" l="4">
<!-- ------------------------------ -->
<!-- UShortRecordAttribute:v
<atr n="ClassB.m_Number" t="unsigned short" p="23" l="4">
<!-- ------------------------------ -->
<!-- StringRecordAttribute: -->
<atr n="OOMyClass.Name" t="string" p="23" f="1234.x" l="3">
ABC
</atr>
<!-- ------------------------------ -->
<!-- BlobRecordAttribute: -->
<atr n="OOMyClass.m_Blob" t="blob" p="23" f="2345.x" l="6">
765863 <!-- Attributewert -->
</atr>
<!-- ------------------------------ -->
<!-- EmbeddedRecordAttribute: -->
<atr n="OOMyClass.m_ClassB" t="embedded" p="23" g="0" l="354">
<oid>6.0.3421</oid>
<ats l="172">
<atr n="glo::Persistent.CreateDate" t="time_t" p="23" l="6">
765863
</atr>
<atr n="glo::Persistent.LastChange" t="time_t" p="23" l="1">
0
</atr>
<atr n="ClassB.m_iNumber" t="int" p="23" l="4">
1234
</atr>
</ats>
<oids len="121">
<atr n="glo::Persistent.ObjID" t="objid" p="0" l="8">
6.0.3421
</atr>
<atr n="ClassB.ObjID" t="objid" p="0" l="8">
6.0.3421
</atr>
</oids>
</atr>
<!-- ------------------------------ -->
<!-- PoRefRecordAttribute: -->
<!-- StdShrdPoRefRecordAttribute: -->
<!-- StdUnqPoRefRecordAttribute: -->
<atr n="OOMyClass.m_ClassB" t="pointer" p="23" l="354">
<oid>6.0.3421</oid>
<ats l="172">
<atr n="glo::Persistent.CreateDate" t="time_t" p="23" l="6">
765863
</atr>
<atr n="glo::Persistent.LastChange" t="time_t" p="23" l="1">
0
</atr>
<atr n="ClassB.m_iNumber" t="int" p="23" l="4">
1234
</atr>
</ats>
<oids len="121">
<atr n="glo::Persistent.ObjID" t="objid" p="0" l="8">
6.0.3421
</atr>
<atr n="ClassB.ObjID" t="objid" p="0" l="8">
6.0.3421
</atr>
</oids>
</atr>
<!-- ------------------------------ -->
<!-- ObjIDRecordAttribute: -->
<atr n="OOMyClass.ObjID" t="objid" p="0" l="8">
6.0.3421
</atr>
<!-- ------------------------------ -->
<!-- OdRefListRecordAttribute: -->
<atr n="OOMyClass.ChildList" t="refsetondemand" p="23" l="27">
<e>6.0.3421</e>
<e>6.0.3434</e>
<e>6.0.3465</e>
</atr>
<!-- ------------------------------ -->
<!-- PoRefSetRecordAttribute: -->
<atr n="OOMyClass.ChildList" t="refsetpointer" p="23" l="708">
<e l="354">
<oid>6.0.3421</oid>
<ats l="172">
<atr n="glo::Persistent.CreateDate" t="time_t" p="23" l="6">
765863
</atr>
<atr n="glo::Persistent.LastChange" t="time_t" p="23" l="1">
0
</atr>
<atr n="ClassB.m_iNumber" t="int" p="23" l="4">
1234
</atr>
</ats>
<oids len="121">
<atr n="glo::Persistent.ObjID" t="objid" p="0" l="8">
6.0.3421
</atr>
<atr n="ClassB.ObjID" t="objid" p="0" l="8">
6.0.3421
</atr>
</oids>
</e>
<e l="354">
<oid>6.0.3422</oid>
<ats l="172">
<atr n="glo::Persistent.CreateDate" t="time_t" p="23" l="6">
765864
</atr>
<atr n="glo::Persistent.LastChange" t="time_t" p="23" l="1">
0
</atr>
<atr n="ClassB.m_iNumber" t="int" p="23" l="4">
5678
</atr>
</ats>
<oids len="121">
<atr n="glo::Persistent.ObjID" t="objid" p="0" l="8">
6.0.3422
</atr>
<atr n="ClassB.ObjID" t="objid" p="0" l="8">
6.0.3422
</atr>
</oids>
</e>
</atr>
<!-- ------------------------------ -->
<!-- StringVectorRecordAttribute: -->
<!-- StringListRecordAttribute: -->
<!-- StringSetRecordAttribute: -->
<atr n="OOMyClass.NameVector" t="vector<string>" p="23" f="2345.txl" l="58">
oder
<atr n="OOMyClass.NameVector" t="list<string>" p="23" f="2345.txl" l="58">
oder
<atr n="OOMyClass.NameVector" t="set<string>" p="23" f="2345.txl" l="58">
<e l="15">
123456789012345
</e>
<e l="15">
ajsddfdhuscwuiw
</e>
</atr>
<!-- ------------------------------ -->
<!-- IntVectorRecordAttribute: -->
<!-- IntListRecordAttribute: -->
<!-- IntSetRecordAttribute: -->
<atr n="OOMyClass.NameVector" t="vector<int>" p="23" f="2345.txl" l="32">
oder
<atr n="OOMyClass.NameVector" t="list<int>" p="23" f="2345.txl" l="32">
oder
<atr n="OOMyClass.NameVector" t="set<int>" p="23" f="2345.txl" l="32">
<e l="3">
123
</e>
<e l="3">
456
</e>
</atr>
<!-- ------------------------------ -->
<!-- DoubleVectorRecordAttribute: -->
<!-- DoubleListRecordAttribute: -->
<!-- DoubleSetRecordAttribute: -->
<atr n="OOMyClass.NameVector" t="vector<double>" p="23" f="2345.txl" l="44">
oder
<atr n="OOMyClass.NameVector" t="list<double>" p="23" f="2345.txl" l="44">
oder
<atr n="OOMyClass.NameVector" t="set<double>" p="23" f="2345.txl" l="44">
<e l="6">
123.04
</e>
<e l="6">
456.98
</e>
</atr>
<!-- ------------------------------ -->
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rAttributeDas Datensatzattribut, dessen Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
[in]rReadyRecordMapDie schon gestreamten Datensätze müssen übergeben werden, damit diese nicht nochmals vollständig, sondern nur als Objekt-ID gestreamt werden. Können als referenzierte Datensätze im Datensatzattribut sein.
Rückgabe
Die Größe des rBlob.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.
Zu beachten
Für Glo-Entwickler: Ist in GloRecordAttributeFunctions.cpp implementiert, damit Erweiterungen von Datensatz-Attributen dort gesammelt vorgenommen werden können.

◆ streamDataRecordInBlob()

std::size_t glo::DataStreamer::streamDataRecordInBlob ( eut::Blob & rBlob,
const Record & rRecord,
std::map< ObjID, ObjID, std::less< ObjID > > & rReadyRecordMap )
private

Streamt die Datensatzattribut-Werte des übergebenen Record als XML-String in einen übergeben eut::Blob (ohne Header etc.).

Beispielaufbau (hier mit Zeilenumbruch, Einrückungen und Kommentaren):

<oid>8.0.10908</oid> <!-- ObjectID des Datensatzes -->
<ats l="609"> <!-- Attribut-Liste des Datensatzes l->Länge des Abschnitts ab Ende der Zeile bis '</ats>' -->
<!-- n->Name des Attributs t->Typ des Attributs p->DateiPosition l->Länge des Abschnitts ab Ende der Zeile bis '</atr>' -->
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" p="0" l="10">
1371785421 <!-- Attributewert -->
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" p="0" l="1">
0
</atr>
<!-- Bei eingebetteten bzw. PointerRecords n->Name des Attributs t->Typ hier pointer g->ob generisch und l->wie gehabt -->
<atr n="Test3.m_pTest" t="pointer" p="0" g="0" l="403">
<oid>6.0.10915</oid>
<ats l="208">
<atr n="glo::Persistent.m_dtCreateDate" t="time_t" p="0" l="10">
1371785930
</atr>
<atr n="glo::Persistent.m_dtLastChange" t="time_t" p="0" l="1">
0
</atr>
<atr n="EmbEmbTest.m_dTest" t="double" p="0" l="3">
123
</atr>
</ats>
<oids l="135">
<atr n="glo::Persistent.m_ObjID" t="objid" p="430" l="9">
6.0.10915
</atr>
<atr n="EmbEmbTest.m_ObjID" t="objid" p="17" l="9">
6.0.10915
</atr>
</oids>
</atr>
</ats>
<!-- ObjID-Liste Aufbau wie Attribute; nur ObjIDs -->
<oids l="129">
<atr n="glo::Persistent.m_ObjID" t="objid" p="31" l="9">
8.0.10908
</atr>
<atr n="Test3.m_ObjID" t="objid" p="17" l="9">
8.0.10908
</atr>
</oids>
Parameter
[in,out]rBlobDas Blob, an welches der XML-String angehängt wird.
[in]rRecordDer Datensatz, dessen Datensatzattribut-Werte als XML-String an das übergebene eut::Blob angehängt werden sollen.
[in]rReadyRecordMapDie schon gestreamten Datensätze müssen übergeben werden, damit diese nicht nochmals vollständig, sondern nur als Objekt-ID gestreamt werden.
Rückgabe
Die neue Größe des übergebenen rBlob.
Ausnahmebehandlung
eut::ErrorNExceptionBei einem nicht behebbaren Fehler wird eine Exception geworfen.

Dokumentation der Datenelemente

◆ m_LocalCriticalSection

eut::CriticalSection glo::DataStreamer::m_LocalCriticalSection
private

Um einen Thread-sicheren Zugriff auf die Elemente des DataStreamer zu gewährleisten, wird über diese lokale CriticalSection der Zugriff synchronisiert.


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