Browse Source

speed up of removing 3d objects from rendered world

Kolja Strohm 2 years ago
parent
commit
d3c7b9efdd
2 changed files with 75 additions and 73 deletions
  1. 70 70
      Array.h
  2. 5 3
      Welt3D.cpp

+ 70 - 70
Array.h

@@ -14,10 +14,10 @@ namespace Framework
     {
         TYP var;
         bool set = false;
-        ArrayEintrag< TYP > *next = 0;
+        ArrayEintrag< TYP >* next = 0;
 
         //! Setzt den Eintrag auf die Werte des anderen Eintrages
-        ArrayEintrag &operator=( ArrayEintrag &r )
+        ArrayEintrag& operator=( ArrayEintrag& r )
         {
             var = r.var;
             set = r.set;
@@ -33,12 +33,12 @@ namespace Framework
                 err += __FILE__;
                 err += " Line: ";
                 err += __LINE__;
-                throw std::out_of_range( (char *)err );
+                throw std::out_of_range( (char*)err );
             }
             return var;
         }
         //! inkrementiert durch die Linked List durch
-        ArrayEintrag< TYP > &operator++() //! prefix
+        ArrayEintrag< TYP >& operator++() //! prefix
         {
             if( !next )
             {
@@ -52,7 +52,7 @@ namespace Framework
             return *next;
         }
         //! inkrementiert durch die Linked List durch
-        ArrayEintrag< TYP > &operator++( int ) //! postfix
+        ArrayEintrag< TYP >& operator++( int ) //! postfix
         {
             if( !next )
             {
@@ -77,10 +77,10 @@ namespace Framework
     class Iterator
     {
     private:
-        ArrayEintrag< TYP > *current;
+        ArrayEintrag< TYP >* current;
 
     public:
-        Iterator( ArrayEintrag< TYP > *start )
+        Iterator( ArrayEintrag< TYP >* start )
         {
             current = start;
             while( current && !current->set )
@@ -89,12 +89,12 @@ namespace Framework
             }
         }
 
-        Iterator( const Iterator &it )
+        Iterator( const Iterator& it )
         {
             current = it.current;
         }
 
-        Iterator< TYP > &operator=( Iterator< TYP > r )
+        Iterator< TYP >& operator=( Iterator< TYP > r )
         {
             current = r.current;
             return *this;
@@ -102,7 +102,7 @@ namespace Framework
 
         bool hasNext()
         {
-            ArrayEintrag< TYP > *next = current->next;
+            ArrayEintrag< TYP >* next = current->next;
             while( next && !next->set )
             {
                 next = next->next;
@@ -123,7 +123,7 @@ namespace Framework
                 err += __FILE__;
                 err += " Line: ";
                 err += __LINE__;
-                throw std::out_of_range( (char *)err );
+                throw std::out_of_range( (char*)err );
             }
             return Iterator( current->next );
         }
@@ -141,12 +141,12 @@ namespace Framework
                 err += __FILE__;
                 err += " Line: ";
                 err += __LINE__;
-                throw std::out_of_range( (char *)err );
+                throw std::out_of_range( (char*)err );
             }
             return current->var;
         }
 
-        Iterator< TYP > &operator++() //! prefix
+        Iterator< TYP >& operator++() //! prefix
         {
             do
             {
@@ -175,7 +175,7 @@ namespace Framework
                 err += __FILE__;
                 err += " Line: ";
                 err += __LINE__;
-                throw std::out_of_range( (char *)err );
+                throw std::out_of_range( (char*)err );
             }
             return current->var;
         }
@@ -188,7 +188,7 @@ namespace Framework
                 err += __FILE__;
                 err += " Line: ";
                 err += __LINE__;
-                throw std::out_of_range( (char *)err );
+                throw std::out_of_range( (char*)err );
             }
             return current->var;
         }
@@ -206,11 +206,11 @@ namespace Framework
                 err += __FILE__;
                 err += " Line: ";
                 err += __LINE__;
-                throw std::out_of_range( (char *)err );
+                throw std::out_of_range( (char*)err );
             }
         }
 
-        bool operator!=( Iterator< TYP > &r )
+        bool operator!=( Iterator< TYP >& r )
         {
             return current != r.current;
         }
@@ -222,8 +222,8 @@ namespace Framework
     class Array : public virtual ReferenceCounter
     {
     private:
-        ArrayEintrag< TYP > *entries;
-        ArrayEintrag< TYP > *last;
+        ArrayEintrag< TYP >* entries;
+        ArrayEintrag< TYP >* last;
         int count;
 
     public:
@@ -240,7 +240,7 @@ namespace Framework
 
         //! Kopiert eine Linked list
         //! 
-        Array( const Array &arr )
+        Array( const Array& arr )
             : Array()
         {
             int anz = arr.getEintragAnzahl();
@@ -285,10 +285,10 @@ namespace Framework
                 return;
             }
             count++;
-            ArrayEintrag< TYP > *e = entries;
+            ArrayEintrag< TYP >* e = entries;
             for( int a = 0; a < i; ++a )
                 e = e->next;
-            ArrayEintrag< TYP > *ne = new ArrayEintrag< TYP >();
+            ArrayEintrag< TYP >* ne = new ArrayEintrag< TYP >();
             ne->var = e->var;
             ne->set = e->set;
             ne->next = e->next;
@@ -304,7 +304,7 @@ namespace Framework
         {
             if( i < 0 || i >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP > *e = entries;
+            ArrayEintrag< TYP >* e = entries;
             for( int a = 0; a < i; ++a )
                 e = e->next;
             e->var = t;
@@ -320,15 +320,15 @@ namespace Framework
                 return;
             if( i < 0 || p < 0 || i >= count || p >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP > *e = entries;
-            ArrayEintrag< TYP > *ve = 0;
+            ArrayEintrag< TYP >* e = entries;
+            ArrayEintrag< TYP >* ve = 0;
             for( int a = 0; a < i; ++a )
             {
                 ve = e;
                 e = e->next;
             }
-            ArrayEintrag< TYP > *e2 = entries == e ? e->next : entries;
-            ArrayEintrag< TYP > *ve2 = 0;
+            ArrayEintrag< TYP >* e2 = entries == e ? e->next : entries;
+            ArrayEintrag< TYP >* ve2 = 0;
             for( int a = 0; a < p; ++a )
             {
                 ve2 = e2;
@@ -358,7 +358,7 @@ namespace Framework
         {
             if( i < 0 || i >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP > *e = entries;
+            ArrayEintrag< TYP >* e = entries;
             for( int a = 0; a < i; ++a )
                 e = e->next;
             if( e->next )
@@ -368,7 +368,7 @@ namespace Framework
             }
             else
                 e->set = 0;
-            ArrayEintrag< TYP > *del = e->next;
+            ArrayEintrag< TYP >* del = e->next;
             if( e->next )
                 e->next = e->next->next;
             else
@@ -388,7 +388,7 @@ namespace Framework
         //! \param i Der Index des Elementes das gelöscht werden soll
         void removeValue( TYP value )
         {
-            ArrayEintrag< TYP > *e = entries;
+            ArrayEintrag< TYP >* e = entries;
             while( e->var != value )
             {
                 if( !e->next )
@@ -404,7 +404,7 @@ namespace Framework
             }
             else
                 e->set = 0;
-            ArrayEintrag< TYP > *del = e->next;
+            ArrayEintrag< TYP >* del = e->next;
             if( e->next )
                 e->next = e->next->next;
             else
@@ -433,8 +433,8 @@ namespace Framework
         //! Löscht alle Elemente der Liste
         void leeren()
         {
-            ArrayEintrag< TYP > *e2 = 0;
-            for( ArrayEintrag< TYP > *e = entries; e; e = e->next )
+            ArrayEintrag< TYP >* e2 = 0;
+            for( ArrayEintrag< TYP >* e = entries; e; e = e->next )
             {
                 delete e2;
                 e2 = e;
@@ -473,7 +473,7 @@ namespace Framework
         {
             if( i < 0 || i >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP > *e = entries;
+            ArrayEintrag< TYP >* e = entries;
             for( int a = 0; a < i && e; ++a )
                 e = e->next;
             return e->var;
@@ -492,7 +492,7 @@ namespace Framework
         int getWertIndex( TYP t ) const
         {
             int ret = 0;
-            for( ArrayEintrag< TYP > *e = entries; e; e = e->next )
+            for( ArrayEintrag< TYP >* e = entries; e; e = e->next )
             {
                 if( e->set && e->var == t )
                     return ret;
@@ -501,7 +501,7 @@ namespace Framework
             return -1;
         }
 
-        Array &operator=( const Array &arr )
+        Array& operator=( const Array& arr )
         {
             leeren();
             int anz = arr.getEintragAnzahl();
@@ -516,8 +516,8 @@ namespace Framework
     class RCArray : public virtual ReferenceCounter
     {
     private:
-        ArrayEintrag< TYP * > *entries;
-        ArrayEintrag< TYP * > *last;
+        ArrayEintrag< TYP* >* entries;
+        ArrayEintrag< TYP* >* last;
         int count;
 
     public:
@@ -525,7 +525,7 @@ namespace Framework
         RCArray() noexcept
             : ReferenceCounter()
         {
-            entries = new ArrayEintrag< TYP * >();
+            entries = new ArrayEintrag< TYP* >();
             entries->set = 0;
             entries->next = 0;
             last = entries;
@@ -533,7 +533,7 @@ namespace Framework
         }
 
         //! Kopiert eine Linked list
-        RCArray( const RCArray &arr )
+        RCArray( const RCArray& arr )
             : RCArray()
         {
             int anz = arr.getEintragAnzahl();
@@ -551,7 +551,7 @@ namespace Framework
 
         //! Hängt ein Element ans Ende der Liste an
         //! \param t Das neue Element
-        void add( TYP *t )
+        void add( TYP* t )
         {
             count++;
             if( !last->set )
@@ -560,7 +560,7 @@ namespace Framework
                 last->set = 1;
                 return;
             }
-            last->next = new ArrayEintrag< TYP * >();
+            last->next = new ArrayEintrag< TYP* >();
             last = last->next;
             last->var = t;
             last->set = 1;
@@ -569,7 +569,7 @@ namespace Framework
         //! Fügt ein Element bei einer bestimmten Position in die Liste ein
         //! \param t das neue Element
         //! \param i Die Position, wo das Element eingefügt wird (danach der Index des neuen Elementes)
-        void add( TYP *t, int i )
+        void add( TYP* t, int i )
         {
             if( i < 0 || i > count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
@@ -578,10 +578,10 @@ namespace Framework
                 add( t );
                 return;
             }
-            ArrayEintrag< TYP * > *e = entries;
+            ArrayEintrag< TYP* >* e = entries;
             for( int a = 0; a < i; ++a )
                 e = e->next;
-            ArrayEintrag< TYP * > *ne = new ArrayEintrag< TYP * >();
+            ArrayEintrag< TYP* >* ne = new ArrayEintrag< TYP* >();
             ne->var = e->var;
             ne->set = e->set;
             ne->next = e->next;
@@ -596,11 +596,11 @@ namespace Framework
         //! Setzt den Wert des i-ten Eintrags
         //! \param t der Neue Wert
         //! \param i Der Index des Eintrages der gesetzt werden soll
-        void set( TYP *t, int i )
+        void set( TYP* t, int i )
         {
             if( i < 0 || i >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP * > *e = entries;
+            ArrayEintrag< TYP* >* e = entries;
             for( int a = 0; a < i; ++a )
                 e = e->next;
             if( e->set && e->var )
@@ -618,15 +618,15 @@ namespace Framework
                 return;
             if( i < 0 || p < 0 || i >= count || p >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP * > *ve = 0;
-            ArrayEintrag< TYP * > *e = entries;
+            ArrayEintrag< TYP* >* ve = 0;
+            ArrayEintrag< TYP* >* e = entries;
             for( int a = 0; a < i; ++a )
             {
                 ve = e;
                 e = e->next;
             }
-            ArrayEintrag< TYP * > *e2 = entries == e ? e->next : entries;
-            ArrayEintrag< TYP * > *ve2 = 0;
+            ArrayEintrag< TYP* >* e2 = entries == e ? e->next : entries;
+            ArrayEintrag< TYP* >* ve2 = 0;
             for( int a = 0; a < p; ++a )
             {
                 ve2 = e2;
@@ -656,7 +656,7 @@ namespace Framework
         {
             if( i < 0 || i >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP * > *e = entries;
+            ArrayEintrag< TYP* >* e = entries;
             for( int a = 0; a < i; ++a )
                 e = e->next;
             if( e->next )
@@ -672,7 +672,7 @@ namespace Framework
                     e->var->release();
                 e->set = 0;
             }
-            ArrayEintrag< TYP * > *del = e->next;
+            ArrayEintrag< TYP* >* del = e->next;
             if( e->next )
                 e->next = e->next->next;
             else
@@ -695,7 +695,7 @@ namespace Framework
         {
             if( vi < 0 || ni < 0 )
                 return;
-            TYP *tmp = get( ni );
+            TYP* tmp = get( ni );
             set( get( vi ), ni );
             set( tmp, vi );
         }
@@ -703,8 +703,8 @@ namespace Framework
         //! Löscht alle Elemente der Liste
         void leeren()
         {
-            ArrayEintrag< TYP * > *e2 = 0;
-            for( ArrayEintrag< TYP * > *e = entries; e; e = e->next )
+            ArrayEintrag< TYP* >* e2 = 0;
+            for( ArrayEintrag< TYP* >* e = entries; e; e = e->next )
             {
                 if( e2 && e2->var && e2->set )
                     e2->var->release();
@@ -714,7 +714,7 @@ namespace Framework
             if( e2 && e2->var && e2->set )
                 e2->var->release();
             delete e2;
-            entries = new ArrayEintrag< TYP * >();
+            entries = new ArrayEintrag< TYP* >();
             entries->set = 0;
             entries->next = 0;
             last = entries;
@@ -723,14 +723,14 @@ namespace Framework
 
         //! Gibt einen Iterator zurück.
         //! Mit ++ kann durch die Liste iteriert werden
-        Iterator< TYP * > begin() const
+        Iterator< TYP* > begin() const
         {
-            return Iterator< TYP * >( entries );
+            return Iterator< TYP* >( entries );
         }
 
-        Iterator< TYP * > end() const
+        Iterator< TYP* > end() const
         {
-            return Iterator< TYP * >( 0 );
+            return Iterator< TYP* >( 0 );
         }
 
         //! Gibt zurück, wie viele Elemente in der Liste sind
@@ -746,30 +746,30 @@ namespace Framework
 
         //! Gibt den Wert des i-ten Elementes zurück mit erhöhtem Reference Counter
         //! \param i Der index des gesuchten Elementes, (0) wenn der Index nicht existiert
-        TYP *get( int i ) const
+        TYP* get( int i ) const
         {
             if( i < 0 || i >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP * > *e = entries;
+            ArrayEintrag< TYP* >* e = entries;
             for( int a = 0; a < i && e; ++a )
                 e = e->next;
             if( e && e->set && e->var )
-                return dynamic_cast<TYP *>(e->var->getThis());
-            return (TYP *)0;
+                return dynamic_cast<TYP*>(e->var->getThis());
+            return (TYP*)0;
         }
 
         //! Gibt den Wert des i-ten Elementes zurück ohne erhöhten Reference Counter
         //! \param i Der index des gesuchten Elementes, (0) wenn der Index nicht existiert
-        TYP *z( int i ) const //! gibt den index - ten T zurück
+        TYP* z( int i ) const //! gibt den index - ten T zurück
         {
             if( i < 0 || i >= count )
                 throwOutOfRange( __FILE__, __LINE__, i, count );
-            ArrayEintrag< TYP * > *e = entries;
+            ArrayEintrag< TYP* >* e = entries;
             for( int a = 0; a < i && e; ++a )
                 e = e->next;
             if( e && e->set && e->var )
-                return (TYP *)e->var;
-            return (TYP *)0;
+                return (TYP*)e->var;
+            return (TYP*)0;
         }
 
         //! Überprüft, ob ein Element in der Liste enthalten ist
@@ -780,7 +780,7 @@ namespace Framework
             return i >= 0 && i < count;
         }
 
-        RCArray &operator=( const RCArray &arr )
+        RCArray& operator=( const RCArray& arr )
         {
             leeren();
             int anz = arr.getEintragAnzahl();

+ 5 - 3
Welt3D.cpp

@@ -64,13 +64,15 @@ void Welt3D::addZeichnung( Model3D *obj )
 void Welt3D::removeZeichnung( Model3D *obj )
 {
     cs.lock();
-    for( int i = 0; i < members->getEintragAnzahl(); i++ )
+    int index = 0;
+    for( Model3D *member : *members )
     {
-        if( members->z( i ) == obj )
+        if( member == obj )
         {
-            members->remove( i );
+            members->remove( index );
             break;
         }
+        index++;
     }
     cs.unlock();
 }