[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r5140 - in /trunk/getfem: interface/src/gf_slice.cc src
From: |
Yves . Renard |
Subject: |
[Getfem-commits] r5140 - in /trunk/getfem: interface/src/gf_slice.cc src/bgeot_convex_ref.cc src/getfem/dal_basic.h src/gmm/gmm_std.h |
Date: |
Tue, 17 Nov 2015 17:02:27 -0000 |
Author: renard
Date: Tue Nov 17 18:02:26 2015
New Revision: 5140
URL: http://svn.gna.org/viewcvs/getfem?rev=5140&view=rev
Log:
more complete version of std::make_unique and some replacement of new by
std::make_unique
Modified:
trunk/getfem/interface/src/gf_slice.cc
trunk/getfem/src/bgeot_convex_ref.cc
trunk/getfem/src/getfem/dal_basic.h
trunk/getfem/src/gmm/gmm_std.h
Modified: trunk/getfem/interface/src/gf_slice.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/src/gf_slice.cc?rev=5140&r1=5139&r2=5140&view=diff
==============================================================================
--- trunk/getfem/interface/src/gf_slice.cc (original)
+++ trunk/getfem/interface/src/gf_slice.cc Tue Nov 17 18:02:26 2015
@@ -219,74 +219,74 @@
}
static getfem::slicer_action*
-build_slicers(const getfem::mesh& m,
dal::ptr_collection<getfem::slicer_action> & slicers,
+build_slicers(const getfem::mesh& m,
std::vector<std::unique_ptr<getfem::slicer_action>> &slicers,
const gfi_array *arg) {
GMM_ASSERT1(gfi_array_get_class(arg) == GFI_CELL, "slices must be "
"described as imbricated cell arrays");
mexargs_in in(1, &arg, true);
std::string cmd = in.pop().to_string();
if (check_cmd(cmd, "none", in, 0, 0)) {
- slicers.push_back(new getfem::slicer_none());
+ slicers.push_back(std::make_unique<getfem::slicer_none>());
} else if (check_cmd(cmd, "planar", in, 3, 3)) {
int orient = in.pop().to_integer(-1,2);
getfem::base_node x0 = in.pop().to_base_node();
- slicers.push_back(new getfem::slicer_half_space(x0,
in.pop().to_base_node(), orient));
+ slicers.push_back(std::make_unique<getfem::slicer_half_space>(x0,
in.pop().to_base_node(), orient));
} else if (check_cmd(cmd, "ball", in, 3, 3)) {
int orient = in.pop().to_integer(-1,2);
getfem::base_node x0 = in.pop().to_base_node();
- slicers.push_back(new getfem::slicer_sphere(x0, in.pop().to_scalar(1e-5),
orient));
+ slicers.push_back(std::make_unique<getfem::slicer_sphere>(x0,
in.pop().to_scalar(1e-5), orient));
} else if (check_cmd(cmd, "cylinder", in, 4, 4)) {
int orient = in.pop().to_integer(-1,2);
getfem::base_node x0 = in.pop().to_base_node();
getfem::base_node x1 = in.pop().to_base_node();
- slicers.push_back(new getfem::slicer_cylinder(x0, x1,
in.pop().to_scalar(1e-5), orient));
+ slicers.push_back(std::make_unique<getfem::slicer_cylinder>(x0, x1,
in.pop().to_scalar(1e-5), orient));
} else if (check_cmd(cmd, "isovalues", in, 4, 4)) {
int orient = in.pop().to_integer(-1,2);
const getfem::mesh_fem &mf = *in.pop().to_const_mesh_fem();
darray U = in.pop().to_darray(int(mf.nb_dof()));
- slicers.push_back(new
getfem::slicer_isovalues(getfem::mesh_slice_cv_dof_data<darray>(mf,U),
+
slicers.push_back(std::make_unique<getfem::slicer_isovalues>(getfem::mesh_slice_cv_dof_data<darray>(mf,U),
in.pop().to_scalar(),
orient));
} else if (check_cmd(cmd, "boundary", in, 0, 1)) {
getfem::slicer_action *s1 = 0;
if (in.remaining()) {
s1 = build_slicers(m, slicers, in.pop().arg);
} else {
- slicers.push_back(new getfem::slicer_none());
- s1 = slicers.back();
+ slicers.push_back(std::make_unique<getfem::slicer_none>());
+ s1 = slicers.back().get();
}
getfem::mesh_region cvflst;
getfem::outer_faces_of_mesh(m, m.convex_index(), cvflst);
- slicers.push_back(new getfem::slicer_boundary(m,*s1,cvflst));
+ slicers.push_back(std::make_unique<getfem::slicer_boundary>(m,*s1,cvflst));
} else if (check_cmd(cmd, "explode", in, 1, 1)) {
scalar_type c = in.pop().to_scalar();
- slicers.push_back(new getfem::slicer_explode(c));
+ slicers.push_back(std::make_unique<getfem::slicer_explode>(c));
} else if (check_cmd(cmd, "union", in, 1, -1)) {
getfem::slicer_action *s1 = build_slicers(m, slicers, in.pop().arg);
while (in.remaining()) {
getfem::slicer_action *s2 = build_slicers(m, slicers, in.pop().arg);
- slicers.push_back(new getfem::slicer_union(*s1,*s2));
- s1 = slicers.back();
+ slicers.push_back(std::make_unique<getfem::slicer_union>(*s1,*s2));
+ s1 = slicers.back().get();
}
} else if (check_cmd(cmd, "intersection", in, 1, -1)) {
getfem::slicer_action *s1 = build_slicers(m, slicers, in.pop().arg);
while (in.remaining()) {
getfem::slicer_action *s2 = build_slicers(m, slicers, in.pop().arg);
- slicers.push_back(new getfem::slicer_intersect(*s1,*s2));
- s1 = slicers.back();
+ slicers.push_back(std::make_unique<getfem::slicer_intersect>(*s1,*s2));
+ s1 = slicers.back().get();
}
} else if (check_cmd(cmd, "diff", in, 2, 2)) {
getfem::slicer_action *s1 = build_slicers(m, slicers, in.pop().arg);
getfem::slicer_action *s2 = build_slicers(m, slicers, in.pop().arg);
- slicers.push_back(new getfem::slicer_complementary(*s2));
- slicers.push_back(new getfem::slicer_intersect(*s1, *slicers.back()));
+ slicers.push_back(std::make_unique<getfem::slicer_complementary>(*s2));
+ slicers.push_back(std::make_unique<getfem::slicer_intersect>(*s1,
*slicers.back()));
} else if (check_cmd(cmd, "comp", in, 1, 1)) {
getfem::slicer_action *s = build_slicers(m, slicers, in.pop().arg);
- slicers.push_back(new getfem::slicer_complementary(*s));
+ slicers.push_back(std::make_unique<getfem::slicer_complementary>(*s));
} else if (check_cmd(cmd, "mesh", in, 1, 1)) {
const getfem::mesh &m2 = *in.pop().to_const_mesh();
- slicers.push_back(new getfem::slicer_mesh_with_mesh(m2));
+ slicers.push_back(std::make_unique<getfem::slicer_mesh_with_mesh>(m2));
} else bad_cmd(cmd);
- return slicers.back();
+ return slicers.back().get();
}
@@ -419,7 +419,7 @@
id_type id; in.pop().to_const_mesh(id); mm =
object_to_mesh(workspace().object(id));
}
- dal::ptr_collection<getfem::slicer_action> slicers;
+ std::vector<std::unique_ptr<getfem::slicer_action>> slicers;
getfem::slicer_action * s = build_slicers(mm->mesh(), slicers, arg);
/* build the slice */
Modified: trunk/getfem/src/bgeot_convex_ref.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/bgeot_convex_ref.cc?rev=5140&r1=5139&r2=5140&view=diff
==============================================================================
--- trunk/getfem/src/bgeot_convex_ref.cc (original)
+++ trunk/getfem/src/bgeot_convex_ref.cc Tue Nov 17 18:02:26 2015
@@ -87,9 +87,6 @@
dal::add_stored_object(psp, p, dal::AUTODELETE_STATIC_OBJECT);
return p;
}
-
- // struct cleanup_simplexified_convexes
- // : public dal::ptr_collection<mesh_structure> {};
/* should be called on the basic_convex_ref */
const mesh_structure* convex_of_reference::simplexified_convex() const {
Modified: trunk/getfem/src/getfem/dal_basic.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/dal_basic.h?rev=5140&r1=5139&r2=5140&view=diff
==============================================================================
--- trunk/getfem/src/getfem/dal_basic.h (original)
+++ trunk/getfem/src/getfem/dal_basic.h Tue Nov 17 18:02:26 2015
@@ -36,13 +36,6 @@
*/
#ifndef DAL_BASIC_H__
#define DAL_BASIC_H__
-
-/* *********************************************************************** */
-/* Remarks for future improvements: */
-/* */
-/* - For the moment, the allocation is made by new and delete[]. */
-/* */
-/* *********************************************************************** */
#include <vector>
#include "dal_config.h"
@@ -205,7 +198,7 @@
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef unsigned char pack_size_type;
- typedef std::vector<pointer> pointer_array;
+ typedef std::vector<std::unique_ptr<T[]>> pointer_array;
typedef dna_iterator<T, pks> iterator;
typedef dna_const_iterator<T, pks> const_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
@@ -303,15 +296,14 @@
template<class T, unsigned char pks>
void dynamic_array<T,pks>::clear(void) {
- typename pointer_array::iterator it = array.begin();
- typename pointer_array::iterator ite = it+ ((last_ind + DNAMPKS__) >> pks);
- while (it != ite) delete[] *it++;
+ // typename pointer_array::iterator it = array.begin();
+ // typename pointer_array::iterator ite = it+ ((last_ind + DNAMPKS__) >>
pks);
+ // while (it != ite) delete[] *it++;
array.clear(); init();
}
template<class T, unsigned char pks> dynamic_array<T,pks>
&dynamic_array<T,pks>::operator = (const dynamic_array<T,pks> &da) {
- clear(); /* evitable ... ? */
array.resize(da.array.size());
last_ind = da.last_ind;
last_accessed = da.last_accessed;
@@ -320,9 +312,10 @@
typename pointer_array::const_iterator ita = da.array.begin();
typename pointer_array::iterator ite = it+ ((last_ind + DNAMPKS__) >> pks);
while (it != ite) {
- register pointer p = *it++ = new T[DNAMPKS__+1];
+ *it = std::make_unique<T[]>(DNAMPKS__+1);
+ register pointer p = it->get(); ++it;
register pointer pe = p + (DNAMPKS__+1);
- register const_pointer pa = *ita++;
+ register const_pointer pa = (ita++)->get();
while (p != pe) *p++ = *pa++;
}
return *this;
@@ -332,7 +325,7 @@
typename dynamic_array<T,pks>::const_reference
dynamic_array<T,pks>::operator [](size_type ii) const {
DEFINE_STATIC_THREAD_LOCAL_INITIALIZED(std::shared_ptr<T>,pf,NULL);
- if (pf.get() == NULL) { pf.reset(new T()); }
+ if (pf.get() == NULL) { pf = std::make_shared<T>(); }
return (ii<last_ind) ? (array[ii>>pks])[ii&DNAMPKS__] : *pf;
}
@@ -349,7 +342,7 @@
}
for (size_type jj = (last_ind >> pks); ii >= last_ind;
jj++, last_ind += (DNAMPKS__ + 1))
- { array[jj] = new T[DNAMPKS__ + 1]; }
+ { array[jj] = std::make_unique<T[]>(DNAMPKS__ + 1); }
}
}
return (array[ii >> pks])[ii & DNAMPKS__];
@@ -383,20 +376,5 @@
void swap(const dynamic_array<T,pks> &x, const dynamic_array<T,pks> &y)
{ x.swap(y); }
-
- /**
- * A very simple pointer collection
- * which destroys the content of its pointers
- */
- template<class T> class ptr_collection : public std::vector<T*> {
- public:
- typedef typename std::vector<T*>::size_type size_type;
- typedef typename std::vector<T*>::iterator iterator;
- typedef typename std::vector<T*>::const_iterator const_iterator;
- ptr_collection() : std::vector<T*>() {}
- ptr_collection(size_type sz) : std::vector<T*>(sz) {
std::fill(this->begin(),this->end(),0); }
- ~ptr_collection() { for (iterator i=this->begin(); i != this->end(); ++i)
{ if (*i) delete *i; *i = 0; } }
- };
-
}
#endif /* DAL_BASIC_H__ */
Modified: trunk/getfem/src/gmm/gmm_std.h
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/gmm/gmm_std.h?rev=5140&r1=5139&r2=5140&view=diff
==============================================================================
--- trunk/getfem/src/gmm/gmm_std.h (original)
+++ trunk/getfem/src/gmm/gmm_std.h Tue Nov 17 18:02:26 2015
@@ -94,8 +94,8 @@
*/
#if defined(__GNUC__)
-# if (__GNUC__ < 3)
-# error : PLEASE UPDATE g++ TO AT LEAST 3.0 VERSION
+# if (__GNUC__ < 4)
+# error : PLEASE UPDATE g++ TO AT LEAST 4.8 VERSION
# endif
#endif
@@ -129,15 +129,37 @@
#include <memory>
#include <locale.h>
-#if defined(__GNUC__) || defined(__GNUG__)
+
+#if defined(__GNUC__) && (__cplusplus <= 201103L)
namespace std {
- template<typename T, typename ...Args>
- unique_ptr<T> make_unique( Args&& ...args )
- { return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) ); }
+ template<typename _Tp>
+ struct _MakeUniq
+ { typedef unique_ptr<_Tp> __single_object; };
+ template<typename _Tp>
+ struct _MakeUniq<_Tp[]>
+ { typedef unique_ptr<_Tp[]> __array; };
+ template<typename _Tp, size_t _Bound>
+ struct _MakeUniq<_Tp[_Bound]>
+ { struct __invalid_type { }; };
+ /// std::make_unique for single objects
+ template<typename _Tp, typename... _Args>
+ inline typename _MakeUniq<_Tp>::__single_object
+ make_unique(_Args&&... __args)
+ { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
+ /// std::make_unique for arrays of unknown bound
+ template<typename _Tp>
+ inline typename _MakeUniq<_Tp>::__array
+ make_unique(size_t __num)
+ { return unique_ptr<_Tp>(new typename remove_extent<_Tp>::type[__num]()); }
+ /// Disable std::make_unique for arrays of known bound
+ template<typename _Tp, typename... _Args>
+ inline typename _MakeUniq<_Tp>::__invalid_type
+ make_unique(_Args&&...) = delete;
}
#endif
#ifdef GETFEM_HAVE_OPENMP
+
#include <omp.h>
/**number of OpenMP threads*/
inline size_t num_threads(){return omp_get_max_threads();}
@@ -376,4 +398,4 @@
# endif
#endif
-#endif /* GMM_STD_H__ */
+#endif /* GMM_STD_H__ */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5140 - in /trunk/getfem: interface/src/gf_slice.cc src/bgeot_convex_ref.cc src/getfem/dal_basic.h src/gmm/gmm_std.h,
Yves . Renard <=