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

Abramo Bagnara abramo.bagnara at gmail.com
Thu Sep 17 15:51:03 CEST 2009


Module: ppl/ppl
Branch: master
Commit: 255dd5501e74f492c8270e62f052846254dac6cb
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=255dd5501e74f492c8270e62f052846254dac6cb

Author: Abramo Bagnara <abramo.bagnara at 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)




More information about the PPL-devel mailing list