[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