Reverted incorrect merge (missing files)
[blender.git] / extern / solid / src / convex / DT_VertexBase.h
1 /*
2  * SOLID - Software Library for Interference Detection
3  * 
4  * Copyright (C) 2001-2003  Dtecta.  All rights reserved.
5  *
6  * This library may be distributed under the terms of the Q Public License
7  * (QPL) as defined by Trolltech AS of Norway and appearing in the file
8  * LICENSE.QPL included in the packaging of this file.
9  *
10  * This library may be distributed and/or modified under the terms of the
11  * GNU General Public License (GPL) version 2 as published by the Free Software
12  * Foundation and appearing in the file LICENSE.GPL included in the
13  * packaging of this file.
14  *
15  * This library is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17  *
18  * Commercial use or any other use of this library not covered by either 
19  * the QPL or the GPL requires an additional license from Dtecta. 
20  * Please contact info@dtecta.com for enquiries about the terms of commercial
21  * use of this library.
22  */
23
24 #ifndef DT_VERTEXBASE_H
25 #define DT_VERTEXBASE_H
26
27 #include "MT_Point3.h"
28
29 #include <vector>
30
31 class DT_Complex;
32
33 typedef std::vector<DT_Complex *>DT_ComplexList;
34
35 class DT_VertexBase {
36 public:
37     explicit DT_VertexBase(const void *base = 0, DT_Size stride = 0, bool owner = false) : 
38         m_base((char *)base),
39                 m_stride(stride ? stride : 3 * sizeof(DT_Scalar)),
40                 m_owner(owner)
41         {}
42         
43         ~DT_VertexBase()
44         {
45                 if (m_owner)
46                 {
47                         delete [] m_base;
48                 }
49         }
50     
51     MT_Point3 operator[](DT_Index i) const 
52         { 
53         return MT_Point3(reinterpret_cast<DT_Scalar *>(m_base + i * m_stride));
54     }
55     
56     void setPointer(const void *base, bool owner = false)
57         {
58                 m_base = (char *)base; 
59                 m_owner = owner;
60         } 
61         
62     const void *getPointer() const { return m_base; }   
63         bool        isOwner() const { return m_owner; }
64     
65         void addComplex(DT_Complex *complex) const { m_complexList.push_back(complex); }
66         void removeComplex(DT_Complex *complex) const
67         {
68                 DT_ComplexList::iterator it = std::find(m_complexList.begin(), m_complexList.end(), complex); 
69                 if (it != m_complexList.end())
70                 {
71                         m_complexList.erase(it);
72                 }
73         }
74         
75         const DT_ComplexList& getComplexList() const { return m_complexList; }
76         
77 private:    
78     char                  *m_base;
79     DT_Size                m_stride;
80         bool                   m_owner;
81         mutable DT_ComplexList m_complexList;
82 };
83
84 #endif