[GIT] ppl/ppl(master): Fixed and simplified DIRTY_TEMP for use with -fno-elide-constructors.

Module: ppl/ppl Branch: master Commit: 255dd5501e74f492c8270e62f052846254dac6cb URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=255dd5501e74f...
Author: Abramo Bagnara abramo.bagnara@gmail.com Date: Thu Sep 17 15:49:53 2009 +0200
Fixed and simplified DIRTY_TEMP for use with -fno-elide-constructors.
---
src/Temp.defs.hh | 20 ++++++++++++++------ src/Temp.inlines.hh | 27 +++++++-------------------- 2 files changed, 21 insertions(+), 26 deletions(-)
diff --git a/src/Temp.defs.hh b/src/Temp.defs.hh index 202dea3..c25a80a 100644 --- a/src/Temp.defs.hh +++ b/src/Temp.defs.hh @@ -69,8 +69,8 @@ private: template <typename T> class Temp_Reference_Holder { public: - //! Constructs an holder holding \p p. - Temp_Reference_Holder(Temp_Item<T>& p); + //! Constructs an holder holding a dirty temp. + Temp_Reference_Holder();
//! Destructor. ~Temp_Reference_Holder(); @@ -79,6 +79,12 @@ public: T& item();
private: + //! Copy constructor: private and intentionally not implemented. + Temp_Reference_Holder(const Temp_Reference_Holder&); + + //! Assignment operator: private and intentionally not implemented. + Temp_Reference_Holder& operator=(const Temp_Reference_Holder&); + //! The held item, encapsulated. Temp_Item<T>& held; }; @@ -96,6 +102,12 @@ public: T item();
private: + //! Copy constructor: private and intentionally not implemented. + Temp_Value_Holder(const Temp_Value_Holder&); + + //! Assignment operator: private and intentionally not implemented. + Temp_Value_Holder& operator=(const Temp_Value_Holder&); + //! The held item. T item_; }; @@ -111,8 +123,6 @@ struct Temp_From_Free_List { //! The type of the holder. typedef Temp_Reference_Holder<T> holder_type;
- //! Obtain the holder for a new temporary. - static holder_type obtain_holder(); };
#ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS @@ -126,8 +136,6 @@ struct Temp_From_Local_Variable { //! The type of the holder. typedef Temp_Value_Holder<T> holder_type;
- //! Obtain the holder for a new temporary. - static holder_type obtain_holder(); };
#ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS diff --git a/src/Temp.inlines.hh b/src/Temp.inlines.hh index 55cfbe2..92f7d1b 100644 --- a/src/Temp.inlines.hh +++ b/src/Temp.inlines.hh @@ -60,8 +60,8 @@ Temp_Item<T>::release(Temp_Item& p) {
template <typename T> inline -Temp_Reference_Holder<T>::Temp_Reference_Holder(Temp_Item<T>& p) - : held(p) { +Temp_Reference_Holder<T>::Temp_Reference_Holder() + : held(Temp_Item<T>::obtain()) { }
template <typename T> @@ -87,29 +87,16 @@ Temp_Value_Holder<T>::item() { return item_; }
-template <typename T> -inline typename Temp_From_Free_List<T>::holder_type -Temp_From_Free_List<T>::obtain_holder() { - return Temp_Reference_Holder<T>(Temp_Item<T>::obtain()); -} - -template <typename T> -inline typename Temp_From_Local_Variable<T>::holder_type -Temp_From_Local_Variable<T>::obtain_holder() { - return Temp_Value_Holder<T>(); -} - } // namespace Parma_Polyhedra_Library
#define PPL_DIRTY_TEMP(T, id) \ - typename Parma_Polyhedra_Library::Dirty_Temp<T>::holder_type holder ## id = \ - Parma_Polyhedra_Library::Dirty_Temp<T>::obtain_holder(); \ - typename Parma_Polyhedra_Library::Dirty_Temp<T>::type id = \ - holder ## id.item() + typename \ + Parma_Polyhedra_Library::Dirty_Temp<T>::holder_type holder ## id; \ + typename \ + Parma_Polyhedra_Library::Dirty_Temp<T>::type id = holder ## id.item()
#define PPL_DIRTY_TEMP0(T, id) \ - Parma_Polyhedra_Library::Dirty_Temp<T>::holder_type holder ## id = \ - Parma_Polyhedra_Library::Dirty_Temp<T>::obtain_holder(); \ + Parma_Polyhedra_Library::Dirty_Temp<T>::holder_type holder ## id; \ Parma_Polyhedra_Library::Dirty_Temp<T>::type id = holder ## id.item()
#endif // !defined(PPL_Temp_inlines_hh)
participants (1)
-
Abramo Bagnara