43 #include "ResourceManager.hh" 47 ResourceManager::ResourceManager() {
50 ResourceManager::ResourceManager(
const ResourceManager &other) {
52 dest.reserve(src.size());
53 for (BaseProperty *bp: src) {
54 dest.push_back(bp->clone(*
this, bp->handle()));
57 cloneProps(other.vertex_props_, vertex_props_);
58 cloneProps(other.edge_props_, edge_props_);
59 cloneProps(other.halfedge_props_, halfedge_props_);
60 cloneProps(other.face_props_, face_props_);
61 cloneProps(other.halfface_props_, halfface_props_);
62 cloneProps(other.cell_props_, cell_props_);
63 cloneProps(other.mesh_props_, mesh_props_);
66 ResourceManager::~ResourceManager() {
69 clearVec(vertex_props_);
70 clearVec(edge_props_);
71 clearVec(halfedge_props_);
72 clearVec(face_props_);
73 clearVec(halfface_props_);
74 clearVec(cell_props_);
75 clearVec(mesh_props_);
80 resize_props(vertex_props_, _nv);
85 resize_props(edge_props_, _ne);
86 resize_props(halfedge_props_, _ne*2u);
91 resize_props(face_props_, _nf);
92 resize_props(halfface_props_, _nf*2u);
97 resize_props(cell_props_, _nc);
100 void ResourceManager::vertex_deleted(
const VertexHandle& _h) {
102 entity_deleted(vertex_props_, _h);
105 void ResourceManager::edge_deleted(
const EdgeHandle& _h) {
107 entity_deleted(edge_props_, _h);
112 void ResourceManager::face_deleted(
const FaceHandle& _h) {
114 entity_deleted(face_props_, _h);
119 void ResourceManager::cell_deleted(
const CellHandle& _h) {
121 entity_deleted(cell_props_, _h);
126 swap_property_elements(cell_props_begin(), cell_props_end(), _h1, _h2);
131 swap_property_elements(face_props_begin(), face_props_end(), _h1, _h2);
136 swap_property_elements(halfface_props_begin(), halfface_props_end(), _h1, _h2);
141 swap_property_elements(edge_props_begin(), edge_props_end(), _h1, _h2);
146 swap_property_elements(halfedge_props_begin(), halfedge_props_end(), _h1, _h2);
151 swap_property_elements(vertex_props_begin(), vertex_props_end(), _h1, _h2);
156 remove_property(vertex_props_, _handle.idx());
161 remove_property(edge_props_, _handle.idx());
166 remove_property(halfedge_props_, _handle.idx());
171 remove_property(face_props_, _handle.idx());
176 remove_property(halfface_props_, _handle.idx());
181 remove_property(cell_props_, _handle.idx());
186 remove_property(mesh_props_, _handle.idx());
189 void ResourceManager::delete_multiple_vertex_props(
const std::vector<bool>& _tags) {
191 Properties::iterator vp_it = vertex_props_.begin();
192 Properties::iterator vp_end = vertex_props_.end();
193 for(; vp_it != vp_end; ++vp_it) {
194 (*vp_it)->delete_multiple_entries(_tags);
198 void ResourceManager::delete_multiple_edge_props(
const std::vector<bool>& _tags) {
200 Properties::iterator ep_it = edge_props_.begin();
201 Properties::iterator ep_end = edge_props_.end();
202 for(; ep_it != ep_end; ++ep_it) {
203 (*ep_it)->delete_multiple_entries(_tags);
206 std::vector<bool> hetags;
207 for(std::vector<bool>::const_iterator t_it = _tags.begin(),
208 t_end = _tags.end(); t_it != t_end; ++t_it) {
209 hetags.push_back(*t_it);
210 hetags.push_back(*t_it);
212 Properties::iterator hep_it = halfedge_props_.begin();
213 Properties::iterator hep_end = halfedge_props_.end();
214 for(; hep_it != hep_end; ++hep_it) {
215 (*hep_it)->delete_multiple_entries(hetags);
219 void ResourceManager::delete_multiple_face_props(
const std::vector<bool>& _tags) {
221 Properties::iterator fp_it = face_props_.begin();
222 Properties::iterator fp_end = face_props_.end();
223 for(; fp_it != fp_end; ++fp_it) {
224 (*fp_it)->delete_multiple_entries(_tags);
227 std::vector<bool> hftags;
228 for(std::vector<bool>::const_iterator t_it = _tags.begin(),
229 t_end = _tags.end(); t_it != t_end; ++t_it) {
230 hftags.push_back(*t_it);
231 hftags.push_back(*t_it);
233 Properties::iterator hfp_it = halfface_props_.begin();
234 Properties::iterator hfp_end = halfface_props_.end();
235 for(; hfp_it != hfp_end; ++hfp_it) {
236 (*hfp_it)->delete_multiple_entries(hftags);
240 void ResourceManager::delete_multiple_cell_props(
const std::vector<bool>& _tags) {
242 Properties::iterator cp_it = cell_props_.begin();
243 Properties::iterator cp_end = cell_props_.end();
244 for(; cp_it != cp_end; ++cp_it) {
245 (*cp_it)->delete_multiple_entries(_tags);
void resize_cprops(size_t _nc)
Change size of stored cell properties.
void resize_eprops(size_t _ne)
Change size of stored edge properties.
void resize_vprops(size_t _nv)
Change size of stored vertex properties.
The properties storage class.
void resize_fprops(size_t _nf)
Change size of stored face properties.