Initial revision
[blender.git] / intern / bsp / intern / BSP_CSGUserData.cpp
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 #include "BSP_CSGUserData.h"
33
34  
35
36 BSP_CSGUserData::
37 BSP_CSGUserData(
38         const int width
39 ):
40         m_width (width)
41 {
42 }
43
44 /**
45  * Add a new uninitialized record to the end of the 
46  * array
47  */
48
49         void
50 BSP_CSGUserData::
51 IncSize(
52 ){
53         m_data.insert(m_data.end(),m_width,char(0));
54 }
55
56         int
57 BSP_CSGUserData::
58 Duplicate(
59         void *record
60 ){
61         if (m_width) {
62                 int output = Size();
63                 IncSize();
64
65                 memcpy(m_data.end() - m_width,record,m_width);
66         
67                 return output;
68         }
69         return 0;
70 }       
71
72         void
73 BSP_CSGUserData::
74 Duplicate(
75         int record_index
76 ){
77         if (m_width) {
78                 int output = Size();
79                 IncSize();
80                 memcpy(m_data.end() - m_width,m_data.begin() + record_index * m_width,m_width);
81         }
82 }       
83
84
85         void
86 BSP_CSGUserData::
87 Copy(
88         void *output,
89         int pos
90 ){
91         if (m_width) {
92                 memcpy(output,m_data.begin() + m_width*pos,m_width);
93         }
94 }
95         void
96 BSP_CSGUserData::
97 Reserve(
98         int size
99 ){
100         m_data.reserve(size * m_width);
101 }
102
103
104 /// Return the width of an individual record
105
106         int
107 BSP_CSGUserData::
108 Width(
109 ) const{
110         return m_width;
111 }
112
113
114 /// return the current number of records stored in the array.
115         int
116 BSP_CSGUserData::
117 Size(
118 ) const {
119         if (m_width == 0) return 0;
120         return m_data.size() / m_width;
121
122
123
124 /// return a pointer to the start of the nth record in the array.
125
126         void *
127 BSP_CSGUserData::
128 operator [] (
129         const int pos
130 ){
131         return m_data.begin() + m_width*pos;
132 }
133