inline closed_region_iterator_pair<const Ct> closed_region_range(const Ct& container, const typename container_traits<Ct>::key_type& lower, const typename container_traits<Ct>::key_type& upper) { return region_range(container, make_closed_bounds(container, lower, upper)); }
void merge_meshes_impl(viennagrid::base_mesh<mesh_is_const> const & src_mesh, viennagrid::mesh const & dst_mesh, double tolerance, bool region_offset) { viennagrid::result_of::element_copy_map<>::type copy_map(dst_mesh, tolerance, false); typedef viennagrid::base_mesh<mesh_is_const> SrcMeshType; typedef typename viennagrid::result_of::element<SrcMeshType>::type CellType; typedef typename viennagrid::result_of::const_cell_range<SrcMeshType>::type ConstCellRangeType; typedef typename viennagrid::result_of::iterator<ConstCellRangeType>::type ConstCellIteratorType; typedef typename viennagrid::result_of::region_range<SrcMeshType>::type SrcRegionRangeType; typedef typename viennagrid::result_of::iterator<SrcRegionRangeType>::type SrcRegionRangeIterator; int region_id_offset = dst_mesh.region_count(); int source_region_count = src_mesh.region_count(); ConstCellRangeType cells(src_mesh); for (ConstCellIteratorType cit = cells.begin(); cit != cells.end(); ++cit) { CellType cell = copy_map(*cit); if (source_region_count <= 1) viennagrid::add( dst_mesh.get_or_create_region(region_offset ? region_id_offset : 0), cell ); else { SrcRegionRangeType region_range(*cit); for (SrcRegionRangeIterator rit = region_range.begin(); rit != region_range.end(); ++rit) { viennagrid::add( dst_mesh.get_or_create_region((*rit).id() + (region_offset ? region_id_offset : 0)), cell ); } } } }