IniFile
Alle Klassen Namensbereiche Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Freundbeziehungen Makrodefinitionen Seiten
PtlTDVList.h
gehe zur Dokumentation dieser Datei
1#ifndef INC_PTLTDVLIST_H
2#define INC_PTLTDVLIST_H
3//-----------------------------------------------------------------------------
51//-----------------------------------------------------------------------------
52#include "PtlListTypes.h"
53#include "PtlATDVList.h"
54//-----------------------------------------------------------------------------
55namespace ptl
56{
57 //---------------------------------------------------------------------------
58 /* Wenn MSDev: "deletion of pointer to incomplete type 'x'; no destructor called" unterdruecken */
59 #ifdef _MSC_VER
60 #pragma warning( disable : 4150 )
61 #endif
62 //---------------------------------------------------------------------------
112 template < class T_DATA > class TDVList : public ATDVList
113 {
114 public:
115 //============== Konstruktoren ============
116 //-----------------------------------------------------------------------
149 //-----------------------------------------------------------------------
165 virtual ~TDVList();
166 //-----------------------------------------------------------------------
180 TDVList( const TDVList & rList );
181 //-----------------------------------------------------------------------
182
183 //============== Methoden ============
184 //-----------------------------------------------------------------------
223 virtual int insert( T_DATA* pDataObject,
224 InsertPosition eWhere = InsertLAST,
225 VH eBeforeBehind = BEHIND );
226 //-----------------------------------------------------------------------
251 virtual T_DATA * get( ElementPosition eElementPos = FIRST_POS );
252 //-----------------------------------------------------------------------
295 int get( T_DATA *& prRetVal, std::size_t nPosition, SeekMode eMode );
296 //-----------------------------------------------------------------------
321 int get( T_DATA *& prRetVal, std::size_t nPosition, DVElement * pRefElement );
322 //-----------------------------------------------------------------------
346 int remove( ElementPosition eElementPos = CURRENT_POS );
347 //-----------------------------------------------------------------------
363 void removeAll();
364 //-----------------------------------------------------------------------
382 int setCurrentPosition( T_DATA* pDataObject );
383 //-----------------------------------------------------------------------
399 std::size_t getNumberDataObjects( T_DATA* pDataObject );
400 //-----------------------------------------------------------------------
415 //-----------------------------------------------------------------------
451 virtual int addElementFrom( TDVList& rList );
452 //-----------------------------------------------------------------------
479 //-----------------------------------------------------------------------
480 };
481
482 //---------------------------------------------------------------------------
483 template < class T_DATA >
485 : ATDVList(eMode)
486 {
487 }
488 //---------------------------------------------------------------------------
489 template < class T_DATA >
491 {
492 removeAll();
493 }
494 //---------------------------------------------------------------------------
495 template < class T_DATA >
497 {
498 operator=( rList );
499 }
500 //---------------------------------------------------------------------------
501 template < class T_DATA >
503 {
504 return reinterpret_cast<T_DATA*>(m_VDVListe->get(eElementPos));
505 }
506 //---------------------------------------------------------------------------
507 template < class T_DATA >
508 int TDVList< T_DATA >::get (T_DATA *& prRetVal, std::size_t nPosition, SeekMode eMode)
509 {
510 int t_iErr = 0;
511 void * t_pTempData = 0;
512
513 t_iErr = m_VDVListe->get(t_pTempData, nPosition, eMode);
514 prRetVal = reinterpret_cast<T_DATA*>(t_pTempData);
515 return t_iErr;
516 }
517 //---------------------------------------------------------------------------
518 template < class T_DATA >
519 int TDVList< T_DATA >::get (T_DATA *& prRetVal, std::size_t nPosition, DVElement * pRefElement)
520 {
521 int t_iErr = 0;
522 void * t_pTempData = 0;
523
524 t_iErr = m_VDVListe->get(prRetVal, nPosition, pRefElement);
525 prRetVal = reinterpret_cast<T_DATA*>(t_pTempData);
526 return t_iErr;
527 }
528 //---------------------------------------------------------------------------
529 template < class T_DATA >
530 int TDVList< T_DATA >::insert (T_DATA* pDataObject, InsertPosition eWhere, VH eBeforeBehind)
531 {
532 return m_VDVListe->insert(pDataObject, eWhere, eBeforeBehind);
533 }
534 //---------------------------------------------------------------------------
535 template < class T_DATA >
537 {
538 int t_iErr = 0;
539 T_DATA * t_pDelData = 0;
540
541 // Datenobjekt muß evtl gelöscht werden, also holen; wird aktuell
542 t_pDelData = reinterpret_cast<T_DATA*>(m_VDVListe->get(eElementPos));
543 if (!t_pDelData)
544 {
545 t_iErr = OBJEKT_UNAVAILABLE;
546 }
547 else
548 {
549 // Element (jetzt aktuell) aus Liste entfernen
550 t_iErr = m_VDVListe->remove(CURRENT_POS);
551
552 // Wenn RESPONSIBLE-Bit gesetzt und Datenobjekt da, dann auch Datenobjekte löschen.
553 if ((m_VDVListe->getListMode() & RESPONSIBLE) && (t_pDelData))
554 {
555 // Wenn Datenobjekt nicht nocheinmal in Liste vorhanden, dann löschen
556 if (getNumberDataObjects(t_pDelData) == 0)
557 {
558 //delete static_cast<T_DATA*>(t_pDelData);
559 delete t_pDelData;
560 }
561 }
562 }
563 return t_iErr;
564 }
565 //---------------------------------------------------------------------------
566 template < class T_DATA >
568 {
569 // Solange Elemente in Liste; entfernen
570 while ( this->get( FIRST_POS) )
571 {
572 this->remove( FIRST_POS );
573 } // Ende while
574 }
575 //---------------------------------------------------------------------------
576 template < class T_DATA >
578 {
579 return m_VDVListe->setCurrentPosition(pDataObject);
580 }
581 //---------------------------------------------------------------------------
582 template < class T_DATA >
583 size_t TDVList< T_DATA >::getNumberDataObjects (T_DATA* pDataObject)
584 {
585 return m_VDVListe->getNumberDataObjects(pDataObject);
586 }
587 //---------------------------------------------------------------------------
588 template < class T_DATA >
590 {
591 return m_VDVListe->getListMode();
592 }
593 //---------------------------------------------------------------------------
594 template < class T_DATA >
596 {
597 return m_VDVListe->addElementFrom(*rList.m_VDVListe);
598 }
599 //---------------------------------------------------------------------------
600 template < class T_DATA >
602 {
603 // Wenn RESPONSIBLE-Bit gesetzt, dann evtl auch Datenobjekte löschen.
604 if (m_VDVListe->getListMode() & RESPONSIBLE)
605 {
606 this->removeAll();
607 }
608 // Hier braucht nicht auf "if (this != &rList)..." abgefragt werden, weil
609 // in m_VDVListe (Klasse VDVList) auf Gleichheit von m_VDVListe und
610 // übergebenen rList.m_VDVListe verglichen wird und bei Gleichheit keine
611 // Übertragung der DatenObjekte vorgenommen wird.
612 // ACHTUNG! Damit hier keine Mißverständnise auftreten. Es wird NICHT der
613 // Pointer von rList.m_VDVListe nach m_VDVListe kopiert. In der Klasse
614 // aus m_VDVListe bzw. rList.m_VDVListe ist der operator= überladen!!!!!
615 // Es werden alle Datenobjekt-Pointer aus rList.m_VDVListe in m_VDVListe in
616 // neue DVElemente übertragen.
617 * m_VDVListe = * rList.m_VDVListe;
618 return * this;
619 }
620
621 //---------------------------------------------------------------------------
622 /* Wenn MSDev, "deletion of pointer to incomplete type 'x'; no destructor called" freigeben */
623 #ifdef _MSC_VER
624 #pragma warning( default : 4150 )
625 #endif
626 //---------------------------------------------------------------------------
627} // namespace ptl
628#endif
Header für ATDVList
Für jede Bibliothek, hier 'PtlContainer' gibt es eine Typen-Datei.
Abstrakte Oberklasse für Template-Listen, welche eine Zeiger auf Objekte oder Objekte als Kopien in d...
Definition PtlATDVList.h:74
VDVList * m_VDVListe
Definition PtlATDVList.h:87
Template-Listenklasse für Zeiger auf Objekte.
Definition PtlTDVList.h:113
virtual T_DATA * get(ElementPosition eElementPos=FIRST_POS)
Definition PtlTDVList.h:502
int get(T_DATA *&prRetVal, std::size_t nPosition, DVElement *pRefElement)
Definition PtlTDVList.h:519
TDVList< T_DATA > & operator=(const TDVList &rList)
Definition PtlTDVList.h:601
int remove(ElementPosition eElementPos=CURRENT_POS)
Definition PtlTDVList.h:536
virtual ~TDVList()
Definition PtlTDVList.h:490
TDVList(const TDVList &rList)
Definition PtlTDVList.h:496
void removeAll()
Definition PtlTDVList.h:567
TDVList(ListMode eMode=DEFAULT)
Definition PtlTDVList.h:484
virtual int addElementFrom(TDVList &rList)
Definition PtlTDVList.h:595
std::size_t getNumberDataObjects(T_DATA *pDataObject)
Definition PtlTDVList.h:583
virtual int insert(T_DATA *pDataObject, InsertPosition eWhere=InsertLAST, VH eBeforeBehind=BEHIND)
Definition PtlTDVList.h:530
ListMode getListMode() override
Definition PtlTDVList.h:589
int setCurrentPosition(T_DATA *pDataObject)
Definition PtlTDVList.h:577
int get(T_DATA *&prRetVal, std::size_t nPosition, SeekMode eMode)
Definition PtlTDVList.h:508
Definition PtlATDVList.h:56
InsertPosition
Definition PtlListTypes.h:201
@ InsertLAST
Definition PtlListTypes.h:203
const ListMode DEFAULT
Definition PtlListTypes.h:353
@ OBJEKT_UNAVAILABLE
Definition PtlListErrors.h:134
VH
Definition PtlListTypes.h:157
@ BEHIND
Definition PtlListTypes.h:159
ElementPosition
Definition PtlListTypes.h:120
@ CURRENT_POS
Definition PtlListTypes.h:123
@ FIRST_POS
Definition PtlListTypes.h:121
SeekMode
Definition PtlListTypes.h:369
int ListMode
Definition PtlListTypes.h:352
const ListMode RESPONSIBLE
Definition PtlListTypes.h:355
Element von doppelt verketteten Listen.
Definition PtlDVElement.h:76