|
|
Go to the documentation of this file.
25#ifndef FAUDES_BASEVECTOR_H
26#define FAUDES_BASEVECTOR_H
81 using ExtType::operator=;
82 using ExtType::operator==;
83 using ExtType::operator!=;
110 vBaseVector( const std::string& rFilename, const std::string& rLabel = "Vector");
125 void AssignByReference( vBaseVector& rSourceVector);
135 virtual const Type* Elementp( void) const;
144 virtual const Type& Element( void) const;
153 virtual Type* NewElement( void);
164 virtual bool ElementTry( const Type& rElement) const;
169 virtual void Clear( void);
177 Idx Size( void) const;
196 bool IsDefault( void) const;
205 bool Empty( void) const;
246 virtual void Replace( const Position& pos, const Type& rElem);
276 virtual void Replace( const Position& pos, const std::string& rFileName);
288 virtual void Erase( const Position& pos);
303 virtual void Insert( const Position& pos, const Type& rElem);
332 virtual void Insert( const Position& pos, const std::string& rFileName);
344 virtual void PushBack( const Type& rElem);
358 virtual void PushBack( Type* rElem);
368 virtual void PushBack( const std::string& rFileName);
381 virtual void Append( const Type& rElem);
396 virtual void Append( Type* rElem);
407 virtual void Append( const std::string& rFileName);
429 virtual void EraseDoublets( void);
443 void FilenameAt( const Position& pos, const std::string& rFileName);
455 const std::string& FilenameAt( const Position& pos) const;
465 void TakeOwnership( void);
472 void TakeCopies( void);
489 virtual void DoDWrite( TokenWriter& rTw, const std::string& rLabel= "", const Type* pContext=0) const;
518 virtual void DoWrite( TokenWriter& rTw, const std::string& rLabel= "", const Type* pContext=0) const;
533 virtual void DoXWrite( TokenWriter& rTw, const std::string& rLabel= "", const Type* pContext=0) const;
552 virtual void DoRead( TokenReader& rTr, const std::string& rLabel = "", const Type* pContext=0);
582 typedef std::vector<ElementRecord>::iterator iterator;
634 using vBaseVector::operator=;
635 using vBaseVector::operator==;
636 using vBaseVector::operator!=;
637 using vBaseVector::Insert;
638 using vBaseVector::Erase;
672 TBaseVector( const std::string& rFilename, const std::string& rLabel = "BaseVector");
762 CIterator End( void) const;
786 virtual Iterator Erase( const Iterator& vit);
791 class Iterator : public std::vector<ElementRecord>::iterator {
800 const typename std::vector<ElementRecord>::iterator& StlIterator( void) const { return * this;};
802 T* operator-> ( void) const {
803 return dynamic_cast<T* >(std::vector<ElementRecord>::iterator::operator*().pElement);
806 T& operator* ( void) const {
807 return *( dynamic_cast<T* >(std::vector<ElementRecord>::iterator::operator*().pElement) );
814 class CIterator : public std::vector<ElementRecord>::const_iterator {
821 CIterator( const typename std::vector<ElementRecord>::const_iterator& sit) : std::vector< ElementRecord>::const_iterator(sit) {};
823 const T* operator-> ( void) const {
824 return dynamic_cast<const T* >(std::vector<ElementRecord>::const_iterator::operator*().pElement);
827 const T& operator* ( void) const {
828 return *( dynamic_cast<const T* >(std::vector<ElementRecord>::const_iterator::operator*().pElement) );
859#define THIS TBaseVector<T>
860#define TEMP template<class T>
861#define BASE vBaseVector
871 FD_DC( "TBaseVector(" << this << ")::TBaseVector()");
876TEMP THIS::TBaseVector( const std::string& rFileName, const std::string& rLabel) :
879 FD_DC( "TBaseVector(" << this << ")::TBaseVector()");
881 Read(rFileName,rLabel);
889 FD_DC( "TBaseVector(" << this << ")::TBaseVector(rOtherVector " << &rOtherVector << "): copy construct");
897 FD_DC( "TBaseVector(" << this << ")::TBaseVector([v] rOtherVector " << &rOtherVector << "): copy construct");
903 FD_DC( "TBaseVector(" << this << ")::~TBaseVector()");
908TEMP const T* THIS::Elementp( void) const {
914TEMP bool THIS::ElementTry( const Type& rElement) const {
915 FD_DC( "TBaseVector::ElementTry(): casting from " << typeid(rElement).name() << " to " << typeid(*Elementp()).name());
916 return Elementp()->Cast(&rElement)!=NULL;
921TEMP void THIS::DoAssign( const THIS& rSourceVector) {
922 FD_DC( "TBaseVector(" << this << ")::DoAssign(rOtherVector " << &rSourceVector << ")");
924 BASE::DoAssign(rSourceVector);
926 FD_DC( "TBaseVector(" << this << ")::DoAssign(rOtherVector " << &rSourceVector << "): done");
932 if(pos >= mVector.size()) {
933 std::stringstream errstr;
934 errstr << "index out of range" << std::endl;
935 throw Exception( "TBaseVector::At", errstr.str(), 62);
938#ifdef FAUDES_DEBUG_CODE
939 if(! dynamic_cast<T* >(mVector[pos].pElement)){
940 std::stringstream errstr;
941 errstr << "internal type error" << std::endl;
942 throw Exception( "TBaseVector::At", errstr.str(), 63);
945 return * dynamic_cast<T* >(mVector[pos].pElement);
951 if(pos >= mVector.size()) {
952 std::stringstream errstr;
953 errstr << "index out of range" << std::endl;
954 throw Exception( "TBaseVector::At", errstr.str(), 62);
957#ifdef FAUDES_DEBUG_CODE
958 if(! dynamic_cast<T* >(mVector[pos].pElement)){
959 std::stringstream errstr;
960 errstr << "internal type error" << std::endl;
961 throw Exception( "TBaseVector::At", errstr.str(), 63);
964 return * dynamic_cast<T* >(mVector[pos].pElement);
969TEMP typename THIS::Iterator THIS::Begin( void) { return Iterator(mVector.begin());}
970TEMP typename THIS::CIterator THIS::Begin( void) const { return CIterator(mVector.begin());}
971TEMP typename THIS::Iterator THIS::End( void) { return Iterator(mVector.end());}
972TEMP typename THIS::CIterator THIS::End( void) const { return CIterator(mVector.end());}
975TEMP void THIS::Insert( const T& rElem) { Append(rElem); };
977 std::vector<ElementRecord>::iterator sit=pit. StlIterator();
978 if(sit->mMine) delete sit->pElement;
979 mVector.erase(sit++);
#define FAUDES_TYPE_TDECLARATION(ftype, ctype, cbase)
#define FAUDES_TYPE_DECLARATION(ftype, ctype, cbase)
#define FAUDES_TYPE_TIMPLEMENTATION(ftype, ctype, cbase, ctemp)
CIterator(const typename std::vector< ElementRecord >::const_iterator &sit)
CIterator(const Iterator &fit)
Iterator(const typename std::vector< ElementRecord >::iterator &sit)
Iterator(const Iterator &fit)
const std::vector< ElementRecord >::iterator & StlIterator(void) const
std::vector< int >::size_type Position
TBaseVector(const std::string &rFilename, const std::string &rLabel="BaseVector")
virtual const T * Elementp(void) const
virtual bool ElementTry(const Type &rElement) const
CIterator End(void) const
virtual Iterator Erase(const Iterator &vit)
virtual const T & At(const Position &pos) const
virtual void Insert(const T &rElem)
virtual ~TBaseVector(void)
TBaseVector(const vBaseVector &rOtherSet)
TBaseVector(const TBaseVector &rOtherSet)
void DoAssign(const TBaseVector< T > &rSourceVector)
CIterator Begin(void) const
virtual T & At(const Position &pos)
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
virtual Type & Assign(const Type &rSrc)
std::string mElementTagDef
std::string mFaudesTypeName
std::vector< ElementRecord >::iterator iterator
std::vector< ElementRecord > mVector
libFAUDES 2.33k
--- 2025.09.16
--- c++ api documentaion by doxygen
|