IniFile
Lade ...
Suche ...
Keine Treffer
PtlTDVList.h
gehe zur Dokumentation dieser Datei
1#ifndef INC_PTLTDVLIST_H
2#define INC_PTLTDVLIST_H
3//-----------------------------------------------------------------------------
36//-----------------------------------------------------------------------------
37#include "PtlListTypes.h"
38#include "PtlATDVList.h"
39//-----------------------------------------------------------------------------
40namespace ptl
41{
42 //---------------------------------------------------------------------------
43 /* Wenn MSDev: "deletion of pointer to incomplete type 'x'; no destructor called" unterdruecken */
44 #ifdef _MSC_VER
45 #pragma warning( disable : 4150 )
46 #endif
47 //---------------------------------------------------------------------------
97 template < class T_DATA > class TDVList : public ATDVList
98 {
99 public:
100 //============== Konstruktoren ============
101 //-----------------------------------------------------------------------
134 //-----------------------------------------------------------------------
150 virtual ~TDVList();
151 //-----------------------------------------------------------------------
165 TDVList( const TDVList & rList );
166 //-----------------------------------------------------------------------
167
168 //============== Methoden ============
169 //-----------------------------------------------------------------------
208 virtual int insert( T_DATA* pDataObject,
209 InsertPosition eWhere = InsertLAST,
210 VH eBeforeBehind = BEHIND );
211 //-----------------------------------------------------------------------
236 virtual T_DATA * get( ElementPosition eElementPos = FIRST_POS );
237 //-----------------------------------------------------------------------
280 int get( T_DATA *& prRetVal, std::size_t nPosition, SeekMode eMode );
281 //-----------------------------------------------------------------------
306 int get( T_DATA *& prRetVal, std::size_t nPosition, DVElement * pRefElement );
307 //-----------------------------------------------------------------------
331 int remove( ElementPosition eElementPos = CURRENT_POS );
332 //-----------------------------------------------------------------------
348 void removeAll();
349 //-----------------------------------------------------------------------
367 int setCurrentPosition( T_DATA* pDataObject );
368 //-----------------------------------------------------------------------
384 std::size_t getNumberDataObjects( T_DATA* pDataObject );
385 //-----------------------------------------------------------------------
400 //-----------------------------------------------------------------------
436 virtual int addElementFrom( TDVList& rList );
437 //-----------------------------------------------------------------------
464 //-----------------------------------------------------------------------
465 };
466
467 //---------------------------------------------------------------------------
468 template < class T_DATA >
470 : ATDVList(eMode)
471 {
472 }
473 //---------------------------------------------------------------------------
474 template < class T_DATA >
476 {
477 removeAll();
478 }
479 //---------------------------------------------------------------------------
480 template < class T_DATA >
482 {
483 operator=( rList );
484 }
485 //---------------------------------------------------------------------------
486 template < class T_DATA >
488 {
489 return reinterpret_cast<T_DATA*>(m_VDVListe->get(eElementPos));
490 }
491 //---------------------------------------------------------------------------
492 template < class T_DATA >
493 int TDVList< T_DATA >::get (T_DATA *& prRetVal, std::size_t nPosition, SeekMode eMode)
494 {
495 int t_iErr = 0;
496 void * t_pTempData = 0;
497
498 t_iErr = m_VDVListe->get(t_pTempData, nPosition, eMode);
499 prRetVal = reinterpret_cast<T_DATA*>(t_pTempData);
500 return t_iErr;
501 }
502 //---------------------------------------------------------------------------
503 template < class T_DATA >
504 int TDVList< T_DATA >::get (T_DATA *& prRetVal, std::size_t nPosition, DVElement * pRefElement)
505 {
506 int t_iErr = 0;
507 void * t_pTempData = 0;
508
509 t_iErr = m_VDVListe->get(prRetVal, nPosition, pRefElement);
510 prRetVal = reinterpret_cast<T_DATA*>(t_pTempData);
511 return t_iErr;
512 }
513 //---------------------------------------------------------------------------
514 template < class T_DATA >
515 int TDVList< T_DATA >::insert (T_DATA* pDataObject, InsertPosition eWhere, VH eBeforeBehind)
516 {
517 return m_VDVListe->insert(pDataObject, eWhere, eBeforeBehind);
518 }
519 //---------------------------------------------------------------------------
520 template < class T_DATA >
522 {
523 int t_iErr = 0;
524 T_DATA * t_pDelData = 0;
525
526 // Datenobjekt muß evtl gelöscht werden, also holen; wird aktuell
527 t_pDelData = reinterpret_cast<T_DATA*>(m_VDVListe->get(eElementPos));
528 if (!t_pDelData)
529 {
530 t_iErr = OBJEKT_UNAVAILABLE;
531 }
532 else
533 {
534 // Element (jetzt aktuell) aus Liste entfernen
535 t_iErr = m_VDVListe->remove(CURRENT_POS);
536
537 // Wenn RESPONSIBLE-Bit gesetzt und Datenobjekt da, dann auch Datenobjekte löschen.
538 if ((m_VDVListe->getListMode() & RESPONSIBLE) && (t_pDelData))
539 {
540 // Wenn Datenobjekt nicht nocheinmal in Liste vorhanden, dann löschen
541 if (getNumberDataObjects(t_pDelData) == 0)
542 {
543 //delete static_cast<T_DATA*>(t_pDelData);
544 delete t_pDelData;
545 }
546 }
547 }
548 return t_iErr;
549 }
550 //---------------------------------------------------------------------------
551 template < class T_DATA >
553 {
554 // Solange Elemente in Liste; entfernen
555 while ( this->get( FIRST_POS) )
556 {
557 this->remove( FIRST_POS );
558 } // Ende while
559 }
560 //---------------------------------------------------------------------------
561 template < class T_DATA >
563 {
564 return m_VDVListe->setCurrentPosition(pDataObject);
565 }
566 //---------------------------------------------------------------------------
567 template < class T_DATA >
568 size_t TDVList< T_DATA >::getNumberDataObjects (T_DATA* pDataObject)
569 {
570 return m_VDVListe->getNumberDataObjects(pDataObject);
571 }
572 //---------------------------------------------------------------------------
573 template < class T_DATA >
575 {
576 return m_VDVListe->getListMode();
577 }
578 //---------------------------------------------------------------------------
579 template < class T_DATA >
581 {
582 return m_VDVListe->addElementFrom(*rList.m_VDVListe);
583 }
584 //---------------------------------------------------------------------------
585 template < class T_DATA >
587 {
588 // Wenn RESPONSIBLE-Bit gesetzt, dann evtl auch Datenobjekte löschen.
589 if (m_VDVListe->getListMode() & RESPONSIBLE)
590 {
591 this->removeAll();
592 }
593 // Hier braucht nicht auf "if (this != &rList)..." abgefragt werden, weil
594 // in m_VDVListe (Klasse VDVList) auf Gleichheit von m_VDVListe und
595 // übergebenen rList.m_VDVListe verglichen wird und bei Gleichheit keine
596 // Übertragung der DatenObjekte vorgenommen wird.
597 // ACHTUNG! Damit hier keine Mißverständnise auftreten. Es wird NICHT der
598 // Pointer von rList.m_VDVListe nach m_VDVListe kopiert. In der Klasse
599 // aus m_VDVListe bzw. rList.m_VDVListe ist der operator= überladen!!!!!
600 // Es werden alle Datenobjekt-Pointer aus rList.m_VDVListe in m_VDVListe in
601 // neue DVElemente übertragen.
602 * m_VDVListe = * rList.m_VDVListe;
603 return * this;
604 }
605
606 //---------------------------------------------------------------------------
607 /* Wenn MSDev, "deletion of pointer to incomplete type 'x'; no destructor called" freigeben */
608 #ifdef _MSC_VER
609 #pragma warning( default : 4150 )
610 #endif
611 //---------------------------------------------------------------------------
612} // namespace ptl
613#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:59
VDVList * m_VDVListe
Definition PtlATDVList.h:72
Template-Listenklasse für Zeiger auf Objekte.
Definition PtlTDVList.h:98
virtual T_DATA * get(ElementPosition eElementPos=FIRST_POS)
Definition PtlTDVList.h:487
int get(T_DATA *&prRetVal, std::size_t nPosition, DVElement *pRefElement)
Definition PtlTDVList.h:504
TDVList< T_DATA > & operator=(const TDVList &rList)
Definition PtlTDVList.h:586
int remove(ElementPosition eElementPos=CURRENT_POS)
Definition PtlTDVList.h:521
virtual ~TDVList()
Definition PtlTDVList.h:475
TDVList(const TDVList &rList)
Definition PtlTDVList.h:481
void removeAll()
Definition PtlTDVList.h:552
TDVList(ListMode eMode=DEFAULT)
Definition PtlTDVList.h:469
virtual int addElementFrom(TDVList &rList)
Definition PtlTDVList.h:580
std::size_t getNumberDataObjects(T_DATA *pDataObject)
Definition PtlTDVList.h:568
virtual int insert(T_DATA *pDataObject, InsertPosition eWhere=InsertLAST, VH eBeforeBehind=BEHIND)
Definition PtlTDVList.h:515
ListMode getListMode() override
Definition PtlTDVList.h:574
int setCurrentPosition(T_DATA *pDataObject)
Definition PtlTDVList.h:562
int get(T_DATA *&prRetVal, std::size_t nPosition, SeekMode eMode)
Definition PtlTDVList.h:493
Definition PtlATDVList.h:41
const ListMode RESPONSIBLE
Definition PtlListTypes.h:341
InsertPosition
Definition PtlListTypes.h:187
@ InsertLAST
Definition PtlListTypes.h:189
@ OBJEKT_UNAVAILABLE
Definition PtlListErrors.h:119
VH
Definition PtlListTypes.h:143
@ BEHIND
Definition PtlListTypes.h:145
ElementPosition
Definition PtlListTypes.h:106
@ CURRENT_POS
Definition PtlListTypes.h:109
@ FIRST_POS
Definition PtlListTypes.h:107
SeekMode
Definition PtlListTypes.h:355
const ListMode DEFAULT
Definition PtlListTypes.h:339
int ListMode
Definition PtlListTypes.h:338
Element von doppelt verketteten Listen.
Definition PtlDVElement.h:61