From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/ordering__table_8h-source.html | 262 ++++++++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 docs/doxygen/nel/ordering__table_8h-source.html (limited to 'docs/doxygen/nel/ordering__table_8h-source.html') diff --git a/docs/doxygen/nel/ordering__table_8h-source.html b/docs/doxygen/nel/ordering__table_8h-source.html new file mode 100644 index 00000000..f4d6f558 --- /dev/null +++ b/docs/doxygen/nel/ordering__table_8h-source.html @@ -0,0 +1,262 @@ + + + + nevrax.org : docs + + + + + + + + + + + + + + +
# Home   # nevrax.com   
+ + + + +
Nevrax
+ + + + + + + + + + +
+ + +
+ Nevrax.org
+ + + + + + + +
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
+
+ + +
+ + +
+Docs + +
+  + + + + + +
Documentation 
+ +
+Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  
+

ordering_table.h

Go to the documentation of this file.
00001 
+00007 /* Copyright, 2000 Nevrax Ltd.
+00008  *
+00009  * This file is part of NEVRAX NEL.
+00010  * NEVRAX NEL is free software; you can redistribute it and/or modify
+00011  * it under the terms of the GNU General Public License as published by
+00012  * the Free Software Foundation; either version 2, or (at your option)
+00013  * any later version.
+00014 
+00015  * NEVRAX NEL is distributed in the hope that it will be useful, but
+00016  * WITHOUT ANY WARRANTY; without even the implied warranty of
+00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+00018  * General Public License for more details.
+00019 
+00020  * You should have received a copy of the GNU General Public License
+00021  * along with NEVRAX NEL; see the file COPYING. If not, write to the
+00022  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+00023  * MA 02111-1307, USA.
+00024  */
+00025 
+00026 #ifndef NL_ORDERING_TABLE_H
+00027 #define NL_ORDERING_TABLE_H
+00028 
+00029 #include "nel/misc/types_nl.h"
+00030 #include "nel/misc/debug.h"
+00031 #include <vector>
+00032 
+00033 namespace NL3D 
+00034 {
+00035 
+00036 // ***************************************************************************
+00043 template<class T> class COrderingTable
+00044 {
+00045 
+00046 public:
+00047 
+00048         COrderingTable();
+00049         ~COrderingTable();
+00050 
+00055         void init( uint32 nNbEntries );
+00056 
+00060         uint32 getSize();
+00061 
+00066         void reset(uint maxElementToInsert);
+00067 
+00074         void insert( uint32 nEntryPos, T *pValue );
+00075 
+00088         void begin();
+00089 
+00093         T* get();
+00094 
+00098         void next();
+00099 
+00100 // =================
+00101 // =================
+00102 // IMPLEMENTATION.
+00103 // =================
+00104 // =================
+00105 private:
+00106 
+00107         struct CNode
+00108         {
+00109                 T *val;
+00110                 CNode *next;
+00111 
+00112                 CNode()
+00113                 { 
+00114                         val = NULL;
+00115                         next = NULL;
+00116                 }
+00117         };
+00118 
+00119         // a raw allocator of node.
+00120         std::vector<CNode>      _Allocator;
+00121         CNode                           *_CurAllocatedNode;
+00122 
+00123         uint32 _nNbElt;
+00124         CNode* _Array;
+00125         CNode* _SelNode;
+00126 
+00127 };
+00128 
+00129 // ***************************************************************************
+00130 template<class T> COrderingTable<T>::COrderingTable()
+00131 {
+00132         _nNbElt = 0;
+00133         _Array = NULL;
+00134         _SelNode = NULL;
+00135         _CurAllocatedNode= NULL;
+00136 }
+00137 
+00138 // ***************************************************************************
+00139 template<class T> COrderingTable<T>::~COrderingTable()
+00140 {
+00141         if( _Array != NULL )
+00142                 delete [] _Array;
+00143 }
+00144 
+00145 // ***************************************************************************
+00146 template<class T> void COrderingTable<T>::init( uint32 nNbEntries )
+00147 {
+00148         if( _Array != NULL )
+00149         {
+00150                 reset(0);
+00151                 delete [] _Array;
+00152         }
+00153         _nNbElt = nNbEntries;
+00154         _Array = new CNode[_nNbElt];
+00155         reset(0);
+00156 }
+00157 
+00158 // ***************************************************************************
+00159 template<class T> uint32 COrderingTable<T>::getSize()
+00160 {
+00161         return _nNbElt;
+00162 }
+00163 
+00164 // ***************************************************************************
+00165 template<class T> void COrderingTable<T>::reset(uint maxElementToInsert)
+00166 {
+00167         // reset allocation
+00168         maxElementToInsert= max(1U, maxElementToInsert);
+00169         _Allocator.resize(maxElementToInsert);
+00170         _CurAllocatedNode= &_Allocator[0];
+00171 
+00172         // reset OT.
+00173         for( uint32 i = 0; i < _nNbElt-1; ++i )
+00174         {
+00175                 _Array[i].val = NULL;
+00176                 _Array[i].next = &_Array[i+1];
+00177         }
+00178         _Array[_nNbElt-1].val  = NULL;
+00179         _Array[_nNbElt-1].next = NULL;
+00180 }
+00181 
+00182 // ***************************************************************************
+00183 template<class T> void COrderingTable<T>::insert( uint32 nEntryPos, T *pValue )
+00184 {
+00185 #ifdef NL_DEBUG
+00186         // check not so many calls to insert()
+00187         nlassert( !_Allocator.empty() && _CurAllocatedNode < (&_Allocator[0])+_Allocator.size() );
+00188         // check good entry size
+00189         nlassert( nEntryPos < _nNbElt );
+00190 #endif
+00191         // get the head list node
+00192         CNode *headNode = &_Array[nEntryPos];
+00193         // alocate a new node
+00194         CNode *nextNode = _CurAllocatedNode++;
+00195         // fill this new node with data of head node
+00196         nextNode->val= headNode->val;
+00197         nextNode->next= headNode->next;
+00198         // and replace head node with new data: consequence is pValue is insert in front of the list
+00199         headNode->val= pValue;
+00200         headNode->next= nextNode;
+00201         // NB: prec of headNode is still correclty linked to headNode.
+00202 }
+00203 
+00204 // ***************************************************************************
+00205 template<class T> void COrderingTable<T>::begin()
+00206 {
+00207         _SelNode = &_Array[0];
+00208         if( _SelNode->val == NULL )
+00209                 next();
+00210 }
+00211 
+00212 // ***************************************************************************
+00213 template<class T> T* COrderingTable<T>::get()
+00214 {
+00215         if( _SelNode != NULL )
+00216                 return _SelNode->val;
+00217         else
+00218                 return NULL;
+00219 }
+00220 
+00221 // ***************************************************************************
+00222 template<class T> void COrderingTable<T>::next()
+00223 {
+00224         _SelNode = _SelNode->next;
+00225         while( ( _SelNode != NULL )&&( _SelNode->val == NULL ) )
+00226                 _SelNode = _SelNode->next;
+00227 }
+00228 
+00229 } // NL3D
+00230 
+00231 
+00232 #endif // NL_ORDERING_TABLE_H
+00233 
+00234 /* End of ordering_table.h */
+
+ + +
                                                                                                                                                                    +
+ + -- cgit v1.2.1