Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r59782 - sandbox/stm/branches/vbe/boost/stm
From: vicente.botet_at_[hidden]
Date: 2010-02-20 11:39:33


Author: viboes
Date: 2010-02-20 11:39:33 EST (Sat, 20 Feb 2010)
New Revision: 59782
URL: http://svn.boost.org/trac/boost/changeset/59782

Log:
Boost.STM/vbe:
* Improving language like macros
Text files modified:
   sandbox/stm/branches/vbe/boost/stm/language_like.hpp | 108 ++++++++++++++++++---------------------
   1 files changed, 51 insertions(+), 57 deletions(-)

Modified: sandbox/stm/branches/vbe/boost/stm/language_like.hpp
==============================================================================
--- sandbox/stm/branches/vbe/boost/stm/language_like.hpp (original)
+++ sandbox/stm/branches/vbe/boost/stm/language_like.hpp 2010-02-20 11:39:33 EST (Sat, 20 Feb 2010)
@@ -114,6 +114,9 @@
 #define BOOST_STM_LABEL_BREAK(TX) BOOST_JOIN(__boost_stm_break_, TX)
 #define BOOST_STM_LABEL_TRICK(TX) BOOST_JOIN(__boost_stm_trick_, TX)
 #define BOOST_STM_VAR_DESTR(TX) BOOST_JOIN(__boost_stm_destr_, TX)
+#define BOOST_STM_VAR_CTRL(TX) BOOST_JOIN(__boost_stm_ctrl_, TX)
+#define BOOST_STM_VAR_CATCHED(TX) BOOST_JOIN(__boost_stm_exception_catched_, TX)
+
 #define BOOST_STM_VAR_STOP __boost_stm_stop_
 
 #define BOOST_STM_MANAGE_BREAK_CONTINUE(TX) \
@@ -208,77 +211,65 @@
 
 #define BOOST_STM_ATOMIC(TX) BOOST_STM_TRANSACTION(TX)
 #define BOOST_STM_ATOMIC_IN_LOOP(TX) BOOST_STM_TRANSACTION_IN_LOOP(TX)
-
+#define BOOST_STM_END_TRANSACTION_IN_LOOP(TX) BOOST_STM_RETRY
+#define BOOST_STM_END_TRANSACTION(TX) BOOST_STM_RETRY
 //---------------------------------------------------------------------------
 // Usage
-// BOOST_STM_B_TRANSACTION(_) {
+// BOOST_STM_E_TRANSACTION(_) {
 // transactional block
-// } BOOST_STM_RETRY_END // or BOOST_STM_CACHE_BEFORE_RETRY(E)
+// } BOOST_STM_E_END_TRANSACTION // or BOOST_STM_CACHE_BEFORE_RETRY(E)
 // // or BOOST_STM_BEFORE_RETRY
 //---------------------------------------------------------------------------
 
-#define BOOST_STM_B_TRANSACTION(TX) \
+#define BOOST_STM_E_TRANSACTION(TX) \
 if (bool BOOST_STM_VAR_STOP = boost::stm::detail::no_opt_false()) {} else \
 { \
- boost::stm::detail::control_flow ctrl; \
+ boost::stm::detail::control_flow BOOST_STM_VAR_CTRL(TX); \
     do { \
- boost::stm::transaction TX; \
+ boost::stm::transaction TX; \
         try{ \
- bool exception_catched=false;\
- {\
- boost::stm::detail::commit_on_destruction BOOST_STM_VAR_DESTR(TX)(TX, BOOST_STM_VAR_STOP, exception_catched); \
- try{ \
- { \
- try {
+ bool BOOST_STM_VAR_CATCHED(TX)=false; \
+ { \
+ boost::stm::detail::commit_on_destruction BOOST_STM_VAR_DESTR(TX)(TX, BOOST_STM_VAR_STOP, BOOST_STM_VAR_CATCHED(TX)); \
+ try{ \
+ { \
+ try { \
+ if(false);else
+
 
-//~ ctrl: states if a specific control flow must be done
+//~ BOOST_STM_VAR_CTRL(TX): states if a specific control flow must be done
 //~ TX: the transaction
-//~ exception_catched: variable
+//~ BOOST_STM_VAR_CATCHED(TX): variable
 // abort on destruction if active
 // allow the user to compose exception handlers after his/her code
 // avoid the commit on destruction when an exception is thrown
 
-#define BOOST_STM_B_TRANSACTION_IN_LOOP(TX) \
+#define BOOST_STM_E_TRANSACTION_IN_LOOP(TX) \
 if (bool BOOST_STM_VAR_STOP = boost::stm::detail::no_opt_false()) {} else \
 { \
- boost::stm::detail::control_flow ctrl; \
+ boost::stm::detail::control_flow BOOST_STM_VAR_CTRL(TX); \
     do { \
         boost::stm::transaction TX; \
         try { \
- bool exception_catched=false; \
+ bool BOOST_STM_VAR_CATCHED(TX)=false; \
             { \
- boost::stm::detail::commit_on_destruction BOOST_STM_VAR_DESTR(TX)(TX, BOOST_STM_VAR_STOP, exception_catched); \
+ boost::stm::detail::commit_on_destruction BOOST_STM_VAR_DESTR(TX)(TX, BOOST_STM_VAR_STOP, BOOST_STM_VAR_CATCHED(TX)); \
                 try { \
- for (ctrl=boost::stm::detail::break_; \
- ctrl==boost::stm::detail::break_; \
- ctrl=boost::stm::detail::continue_) \
+ for (BOOST_STM_VAR_CTRL(TX)=boost::stm::detail::break_; \
+ BOOST_STM_VAR_CTRL(TX)==boost::stm::detail::break_; \
+ BOOST_STM_VAR_CTRL(TX)=boost::stm::detail::continue_) \
                     { \
- try {
+ try { \
+ if(false);else
 
                         // user code here
 
-#define BOOST_STM_E_RETRY(TX) \
- } catch(boost::stm::detail::dummy_exception &ex) { throw; } \
- ctrl=boost::stm::detail::none; \
- } \
- BOOST_STM_VAR_DESTR(TX).commit(); \
- } catch(...) { \
- BOOST_STM_VAR_DESTR(TX).release(); \
- throw; \
- } \
- } \
- if (exception_catched) { \
- throw boost::stm::aborted_tx("commit throw"); \
- } \
- break; \
- } catch (boost::stm::aborted_tx &) { \
- if (TX.is_nested()) throw; \
- TX.restart();
-
+#define BOOST_STM_E_ON_EXCEPTION(TX) \
+ } \
+ catch(boost::stm::detail::dummy_exception &ex) { throw; }
 
-#define BOOST_STM_E_BEFORE_RETRY(TX) \
- } catch(boost::stm::detail::dummy_exception &ex) { throw; } \
- ctrl=boost::stm::detail::none; \
+#define BOOST_STM_E_RETRY(TX) \
+ BOOST_STM_VAR_CTRL(TX)=boost::stm::detail::none; \
                     } \
                     BOOST_STM_VAR_DESTR(TX).commit(); \
                 } catch(...) { \
@@ -286,37 +277,40 @@
                     throw; \
                 } \
             } \
- if (exception_catched) { \
+ if (BOOST_STM_VAR_CATCHED(TX)) { \
                 throw boost::stm::aborted_tx("commit throw"); \
             } \
             break; \
         } catch (boost::stm::aborted_tx &) { \
             if (TX.is_nested()) throw; \
- TX.restart();
+ TX.restart(); \
+ try {throw;}catch (boost::stm::aborted_tx &)
+
 
-
-#define BOOST_STM_E_END(TX) \
+#define BOOST_STM_E_END_RETRY(TX) \
         } \
     } while(!BOOST_STM_VAR_STOP); \
 }
 
-#define BOOST_STM_RETRY_END(TX) \
- BOOST_STM_E_RETRY(TX) {} \
- BOOST_STM_E_END(TX)
-
-
-#define BOOST_STM_E_END_IN_LOOP(TX) \
+#define BOOST_STM_E_END_RETRY_IN_LOOP(TX) \
         } \
     } while(!BOOST_STM_VAR_STOP); \
- if (ctrl==boost::stm::detail::continue_) continue; \
- else if (ctrl==boost::stm::detail::break_) break; \
+ if (BOOST_STM_VAR_CTRL(TX)==boost::stm::detail::continue_) continue; \
+ else if (BOOST_STM_VAR_CTRL(TX)==boost::stm::detail::break_) break; \
     else ; \
 }
 
-#define BOOST_STM_RETRY_END_IN_LOOP(TX) \
+#define BOOST_STM_E_END_TRANSACTION(TX) \
+ BOOST_STM_E_ON_EXCEPTION(TX) \
+ BOOST_STM_E_RETRY(TX) {} \
+ BOOST_STM_E_END_RETRY(TX)
+
+#define BOOST_STM_E_END_TRANSACTION_IN_LOOP(TX) \
+ BOOST_STM_E_ON_EXCEPTION(TX) \
  BOOST_STM_E_RETRY(TX) {} \
- BOOST_STM_E_END_IN_LOOP(TX)
+ BOOST_STM_E_END_RETRY_IN_LOOP(TX)
 
+#define BOOST_STM_E_BEFORE_RETRY(TX) BOOST_STM_E_RETRY(TX)
 
 #define BOOST_STM_E_RETURN(TX, EXPRESSION) \
     return boost::stm::detail::commit_and_return(BOOST_STM_VAR_DESTR(TX), EXPRESSION)


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk