lmi
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi] [PATCH] Specialize reconstitutor<> for tn_range_base.


From: Vaclav Slavik
Subject: [lmi] [PATCH] Specialize reconstitutor<> for tn_range_base.
Date: Wed, 13 Apr 2011 17:55:12 +0200
User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.15) Gecko/20110303 Thunderbird/3.1.9

Hi,

On 2011-03-29 20:42, Vaclav Slavik wrote:
> [PATCH 3/3] Specialize reconstitutor<> for mc_enum_base. Avoid duplicated 
> code.
> 
> Provide reconstitutor<mc_enum_base,Input> specialization for using
> try_member_cast<> to cast any_member<> to mc_enum_base.
> Do this by calling more specialized reconstitutors (mc_enum_base and
> datum_sequence> from reconstitutor<datum_base> in order to
> avoid code duplication.

as a followup to the earlier patch, this one (to be applied on top of the older
ones) does the same, but for reconstitutor<tn_range_base,Input>.

Thanks,
Vaclav

---
 input.hpp |   32 +++++++++++++++++++++++---------
 1 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/input.hpp b/input.hpp
index 68e5f69..4349f05 100644
--- a/input.hpp
+++ b/input.hpp
@@ -547,6 +547,28 @@ template<> struct reconstitutor<mc_enum_base, Input>
 };
 
 /// Specialization of struct template reconstitutor for this Model
+/// and the base class that all its tnr- types share.
+
+template<> struct reconstitutor<tn_range_base, Input>
+{
+    typedef tn_range_base DesiredType;
+    static DesiredType* reconstitute(any_member<Input>& m)
+        {
+        DesiredType* z = 0;
+        z = exact_cast<tnr_age                 >(m); if(z) return z;
+        z = exact_cast<tnr_corridor_factor     >(m); if(z) return z;
+        z = exact_cast<tnr_date                >(m); if(z) return z;
+        z = exact_cast<tnr_duration            >(m); if(z) return z;
+        z = exact_cast<tnr_month               >(m); if(z) return z;
+        z = exact_cast<tnr_nonnegative_double  >(m); if(z) return z;
+        z = exact_cast<tnr_nonnegative_integer >(m); if(z) return z;
+        z = exact_cast<tnr_proportion          >(m); if(z) return z;
+        z = exact_cast<tnr_unrestricted_double >(m); if(z) return z;
+        return z;
+        }
+};
+
+/// Specialization of struct template reconstitutor for this Model
 /// and the base class that all its UDTs share.
 
 template<> struct reconstitutor<datum_base, Input>
@@ -563,15 +585,7 @@ template<> struct reconstitutor<datum_base, Input>
         // mc- types.
         z = reconstitutor<mc_enum_base, Input>::reconstitute(m);   if(z) 
return z;
         // tnr- types.
-        z = exact_cast<tnr_age                 >(m); if(z) return z;
-        z = exact_cast<tnr_corridor_factor     >(m); if(z) return z;
-        z = exact_cast<tnr_date                >(m); if(z) return z;
-        z = exact_cast<tnr_duration            >(m); if(z) return z;
-        z = exact_cast<tnr_month               >(m); if(z) return z;
-        z = exact_cast<tnr_nonnegative_double  >(m); if(z) return z;
-        z = exact_cast<tnr_nonnegative_integer >(m); if(z) return z;
-        z = exact_cast<tnr_proportion          >(m); if(z) return z;
-        z = exact_cast<tnr_unrestricted_double >(m); if(z) return z;
+        z = reconstitutor<tn_range_base, Input>::reconstitute(m);  if(z) 
return z;
         return z;
         }
 };
-- 
1.7.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]