Developer Documentation
ResourceManager.cc
1 /*===========================================================================*\
2  * *
3  * OpenVolumeMesh *
4  * Copyright (C) 2011 by Computer Graphics Group, RWTH Aachen *
5  * www.openvolumemesh.org *
6  * *
7  *---------------------------------------------------------------------------*
8  * This file is part of OpenVolumeMesh. *
9  * *
10  * OpenVolumeMesh is free software: you can redistribute it and/or modify *
11  * it under the terms of the GNU Lesser General Public License as *
12  * published by the Free Software Foundation, either version 3 of *
13  * the License, or (at your option) any later version with the *
14  * following exceptions: *
15  * *
16  * If other files instantiate templates or use macros *
17  * or inline functions from this file, or you compile this file and *
18  * link it with other files to produce an executable, this file does *
19  * not by itself cause the resulting executable to be covered by the *
20  * GNU Lesser General Public License. This exception does not however *
21  * invalidate any other reasons why the executable file might be *
22  * covered by the GNU Lesser General Public License. *
23  * *
24  * OpenVolumeMesh is distributed in the hope that it will be useful, *
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
27  * GNU Lesser General Public License for more details. *
28  * *
29  * You should have received a copy of the GNU LesserGeneral Public *
30  * License along with OpenVolumeMesh. If not, *
31  * see <http://www.gnu.org/licenses/>. *
32  * *
33 \*===========================================================================*/
34 
35 /*===========================================================================*\
36  * *
37  * $Revision$ *
38  * $Date$ *
39  * $LastChangedBy$ *
40  * *
41 \*===========================================================================*/
42 
43 #include "ResourceManager.hh"
44 
45 namespace OpenVolumeMesh {
46 
47 ResourceManager::ResourceManager() {
48 }
49 
50 ResourceManager::~ResourceManager() {
51 
52  // Delete persistent props
53  clearVec(vertex_props_);
54  clearVec(edge_props_);
55  clearVec(halfedge_props_);
56  clearVec(face_props_);
57  clearVec(halfface_props_);
58  clearVec(cell_props_);
59  clearVec(mesh_props_);
60 }
61 
63 
64  resize_props(vertex_props_, _nv);
65 }
66 
68 
69  resize_props(edge_props_, _ne);
70  resize_props(halfedge_props_, _ne*2u);
71 }
72 
74 
75  resize_props(face_props_, _nf);
76  resize_props(halfface_props_, _nf*2u);
77 }
78 
80 
81  resize_props(cell_props_, _nc);
82 }
83 
84 void ResourceManager::vertex_deleted(const VertexHandle& _h) {
85 
86  entity_deleted(vertex_props_, _h);
87 }
88 
89 void ResourceManager::edge_deleted(const EdgeHandle& _h) {
90 
91  entity_deleted(edge_props_, _h);
92  entity_deleted(halfedge_props_, OpenVolumeMeshHandle(_h.idx()*2 + 1));
93  entity_deleted(halfedge_props_, OpenVolumeMeshHandle(_h.idx()*2));
94 }
95 
96 void ResourceManager::face_deleted(const FaceHandle& _h) {
97 
98  entity_deleted(face_props_, _h);
99  entity_deleted(halfface_props_, OpenVolumeMeshHandle(_h.idx()*2 + 1));
100  entity_deleted(halfface_props_, OpenVolumeMeshHandle(_h.idx()*2));
101 }
102 
103 void ResourceManager::cell_deleted(const CellHandle& _h) {
104 
105  entity_deleted(cell_props_, _h);
106 }
107 
108 void ResourceManager::swap_cell_properties(CellHandle _h1, CellHandle _h2){
109 
110  swap_property_elements(cell_props_begin(), cell_props_end(), _h1, _h2);
111 }
112 
113 void ResourceManager::swap_face_properties(FaceHandle _h1, FaceHandle _h2){
114 
115  swap_property_elements(face_props_begin(), face_props_end(), _h1, _h2);
116 }
117 
118 void ResourceManager::swap_halfface_properties(HalfFaceHandle _h1, HalfFaceHandle _h2){
119 
120  swap_property_elements(halfface_props_begin(), halfface_props_end(), _h1, _h2);
121 }
122 
123 void ResourceManager::swap_edge_properties(EdgeHandle _h1, EdgeHandle _h2){
124 
125  swap_property_elements(edge_props_begin(), edge_props_end(), _h1, _h2);
126 }
127 
128 void ResourceManager::swap_halfedge_properties(HalfEdgeHandle _h1, HalfEdgeHandle _h2){
129 
130  swap_property_elements(halfedge_props_begin(), halfedge_props_end(), _h1, _h2);
131 }
132 
133 void ResourceManager::swap_vertex_properties(VertexHandle _h1, VertexHandle _h2){
134 
135  swap_property_elements(vertex_props_begin(), vertex_props_end(), _h1, _h2);
136 }
137 
138 void ResourceManager::release_property(VertexPropHandle _handle) {
139 
140  remove_property(vertex_props_, _handle.idx());
141 }
142 
143 void ResourceManager::release_property(EdgePropHandle _handle) {
144 
145  remove_property(edge_props_, _handle.idx());
146 }
147 
148 void ResourceManager::release_property(HalfEdgePropHandle _handle) {
149 
150  remove_property(halfedge_props_, _handle.idx());
151 }
152 
153 void ResourceManager::release_property(FacePropHandle _handle) {
154 
155  remove_property(face_props_, _handle.idx());
156 }
157 
158 void ResourceManager::release_property(HalfFacePropHandle _handle) {
159 
160  remove_property(halfface_props_, _handle.idx());
161 }
162 
163 void ResourceManager::release_property(CellPropHandle _handle) {
164 
165  remove_property(cell_props_, _handle.idx());
166 }
167 
168 void ResourceManager::release_property(MeshPropHandle _handle) {
169 
170  remove_property(mesh_props_, _handle.idx());
171 }
172 
173 void ResourceManager::delete_multiple_vertex_props(const std::vector<bool>& _tags) {
174 
175  Properties::iterator vp_it = vertex_props_.begin();
176  Properties::iterator vp_end = vertex_props_.end();
177  for(; vp_it != vp_end; ++vp_it) {
178  (*vp_it)->delete_multiple_entries(_tags);
179  }
180 }
181 
182 void ResourceManager::delete_multiple_edge_props(const std::vector<bool>& _tags) {
183 
184  Properties::iterator ep_it = edge_props_.begin();
185  Properties::iterator ep_end = edge_props_.end();
186  for(; ep_it != ep_end; ++ep_it) {
187  (*ep_it)->delete_multiple_entries(_tags);
188  }
189  // Create tags vector for halfedges
190  std::vector<bool> hetags;
191  for(std::vector<bool>::const_iterator t_it = _tags.begin(),
192  t_end = _tags.end(); t_it != t_end; ++t_it) {
193  hetags.push_back(*t_it);
194  hetags.push_back(*t_it);
195  }
196  Properties::iterator hep_it = halfedge_props_.begin();
197  Properties::iterator hep_end = halfedge_props_.end();
198  for(; hep_it != hep_end; ++hep_it) {
199  (*hep_it)->delete_multiple_entries(hetags);
200  }
201 }
202 
203 void ResourceManager::delete_multiple_face_props(const std::vector<bool>& _tags) {
204 
205  Properties::iterator fp_it = face_props_.begin();
206  Properties::iterator fp_end = face_props_.end();
207  for(; fp_it != fp_end; ++fp_it) {
208  (*fp_it)->delete_multiple_entries(_tags);
209  }
210  // Create tags vector for halffaces
211  std::vector<bool> hftags;
212  for(std::vector<bool>::const_iterator t_it = _tags.begin(),
213  t_end = _tags.end(); t_it != t_end; ++t_it) {
214  hftags.push_back(*t_it);
215  hftags.push_back(*t_it);
216  }
217  Properties::iterator hfp_it = halfface_props_.begin();
218  Properties::iterator hfp_end = halfface_props_.end();
219  for(; hfp_it != hfp_end; ++hfp_it) {
220  (*hfp_it)->delete_multiple_entries(hftags);
221  }
222 }
223 
224 void ResourceManager::delete_multiple_cell_props(const std::vector<bool>& _tags) {
225 
226  Properties::iterator cp_it = cell_props_.begin();
227  Properties::iterator cp_end = cell_props_.end();
228  for(; cp_it != cp_end; ++cp_it) {
229  (*cp_it)->delete_multiple_entries(_tags);
230  }
231 }
232 
233 } // Namespace OpenVolumeMesh
void resize_cprops(size_t _nc)
Change size of stored cell properties.
void resize_vprops(size_t _nv)
Change size of stored vertex properties.
void resize_eprops(size_t _ne)
Change size of stored edge properties.
void resize_fprops(size_t _nf)
Change size of stored face properties.