[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi] [PATCH] Specialize reconstitutor<> for tn_range_base.,
Vaclav Slavik <=