lmi-commits
[Top][All Lists]
Advanced

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

[lmi-commits] [5296] Refactor; make all_strings() virtual


From: Greg Chicares
Subject: [lmi-commits] [5296] Refactor; make all_strings() virtual
Date: Sat, 08 Oct 2011 11:29:31 +0000

Revision: 5296
          http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5296
Author:   chicares
Date:     2011-10-08 11:29:31 +0000 (Sat, 08 Oct 2011)
Log Message:
-----------
Refactor; make all_strings() virtual

Modified Paths:
--------------
    lmi/trunk/ce_product_name.cpp
    lmi/trunk/ce_product_name.hpp
    lmi/trunk/mc_enum.hpp
    lmi/trunk/mc_enum.tpp
    lmi/trunk/mc_enum_test.cpp
    lmi/trunk/mc_enum_types_aux.cpp

Modified: lmi/trunk/ce_product_name.cpp
===================================================================
--- lmi/trunk/ce_product_name.cpp       2011-10-08 10:26:40 UTC (rev 5295)
+++ lmi/trunk/ce_product_name.cpp       2011-10-08 11:29:31 UTC (rev 5296)
@@ -79,6 +79,11 @@
     return v;
 }
 
+std::vector<std::string> const& ce_product_name::all_strings() const
+{
+    return product_names();
+}
+
 std::size_t ce_product_name::cardinality() const
 {
     return product_names().size();

Modified: lmi/trunk/ce_product_name.hpp
===================================================================
--- lmi/trunk/ce_product_name.hpp       2011-10-08 10:26:40 UTC (rev 5295)
+++ lmi/trunk/ce_product_name.hpp       2011-10-08 11:29:31 UTC (rev 5296)
@@ -82,6 +82,7 @@
     static std::size_t ordinal(std::string const&);
 
     // mc_enum_base required implementation.
+    virtual std::vector<std::string> const& all_strings() const;
     virtual std::size_t cardinality() const;
     virtual void enforce_proscription();
     virtual std::size_t ordinal() const;

Modified: lmi/trunk/mc_enum.hpp
===================================================================
--- lmi/trunk/mc_enum.hpp       2011-10-08 10:26:40 UTC (rev 5295)
+++ lmi/trunk/mc_enum.hpp       2011-10-08 11:29:31 UTC (rev 5296)
@@ -66,6 +66,7 @@
     std::size_t first_allowed_ordinal() const;
     bool is_allowed(int) const;
 
+    virtual std::vector<std::string> const& all_strings() const = 0;
     virtual std::size_t cardinality() const = 0;
     virtual void enforce_proscription() = 0;
     virtual std::size_t ordinal() const = 0;
@@ -103,6 +104,7 @@
     BOOST_STATIC_ASSERT(boost::is_enum<T>::value);
 
     friend class mc_enum_test;
+    template<typename U> friend std::vector<std::string> const& all_strings();
 
   public:
     typedef T enum_type;
@@ -119,9 +121,9 @@
     bool operator==(std::string const&) const;
 
     static std::size_t ordinal(std::string const&);
-    static std::vector<std::string> const& all_strings();
 
     // mc_enum_base required implementation.
+    virtual std::vector<std::string> const& all_strings() const;
     virtual std::size_t cardinality() const;
     virtual void enforce_proscription();
     virtual std::size_t ordinal() const;
@@ -134,6 +136,7 @@
     static std::size_t        n();
     static T    const*        e();
     static char const* const* c();
+    static std::vector<std::string> const& s();
 
     // datum_base required implementation.
     // TODO ?? Consider moving the implementation into the base class.
@@ -143,5 +146,11 @@
     T value_;
 };
 
+template<typename U>
+std::vector<std::string> const& all_strings()
+{
+    return mc_enum<U>::s();
+}
+
 #endif // mc_enum_hpp
 

Modified: lmi/trunk/mc_enum.tpp
===================================================================
--- lmi/trunk/mc_enum.tpp       2011-10-08 10:26:40 UTC (rev 5295)
+++ lmi/trunk/mc_enum.tpp       2011-10-08 11:29:31 UTC (rev 5296)
@@ -107,10 +107,9 @@
 }
 
 template<typename T>
-std::vector<std::string> const& mc_enum<T>::all_strings()
+std::vector<std::string> const& mc_enum<T>::all_strings() const
 {
-    static std::vector<std::string> const v(c(), c() + n());
-    return v;
+    return s();
 }
 
 template<typename T>
@@ -182,6 +181,13 @@
 template<typename T>
 char const* const* mc_enum<T>::c() {return mc_enum_key<T>::c();}
 
+template<typename T>
+std::vector<std::string> const& mc_enum<T>::s()
+{
+    static std::vector<std::string> const v(c(), c() + n());
+    return v;
+}
+
 namespace
 {
 /// A whilom version of a vetust class substituted underbars for

Modified: lmi/trunk/mc_enum_test.cpp
===================================================================
--- lmi/trunk/mc_enum_test.cpp  2011-10-08 10:26:40 UTC (rev 5295)
+++ lmi/trunk/mc_enum_test.cpp  2011-10-08 11:29:31 UTC (rev 5296)
@@ -137,7 +137,8 @@
     v.push_back(holiday4.str(0));
     v.push_back(holiday4.str(1));
     v.push_back(holiday4.str(2));
-    BOOST_TEST(v == e_holiday::all_strings());
+    BOOST_TEST(v == all_strings<enum_holiday>());
+    BOOST_TEST(v == holiday4.all_strings());
 
     // Forced validity.
     holiday3.enforce_proscription();

Modified: lmi/trunk/mc_enum_types_aux.cpp
===================================================================
--- lmi/trunk/mc_enum_types_aux.cpp     2011-10-08 10:26:40 UTC (rev 5295)
+++ lmi/trunk/mc_enum_types_aux.cpp     2011-10-08 11:29:31 UTC (rev 5296)
@@ -54,9 +54,9 @@
 
 bool validate_mc_n_values()
 {
-    LMI_ASSERT(mc_n_gen_bases    == mce_gen_basis  ::all_strings().size());
-    LMI_ASSERT(mc_n_sep_bases    == mce_sep_basis  ::all_strings().size());
-    LMI_ASSERT(mc_n_rate_periods == mce_rate_period::all_strings().size());
+    LMI_ASSERT(mc_n_gen_bases    == all_strings<mcenum_gen_basis  >().size());
+    LMI_ASSERT(mc_n_sep_bases    == all_strings<mcenum_sep_basis  >().size());
+    LMI_ASSERT(mc_n_rate_periods == all_strings<mcenum_rate_period>().size());
     return true;
 }
 
@@ -68,11 +68,11 @@
 volatile bool ensure_setup = validate_mc_n_values();
 } // Unnamed namespace.
 
-std::vector<std::string> const& all_strings_gender   () {return mce_gender  
::all_strings();}
-std::vector<std::string> const& all_strings_class    () {return mce_class   
::all_strings();}
-std::vector<std::string> const& all_strings_smoking  () {return mce_smoking 
::all_strings();}
-std::vector<std::string> const& all_strings_uw_basis () {return 
mce_uw_basis::all_strings();}
-std::vector<std::string> const& all_strings_state    () {return mce_state   
::all_strings();}
+std::vector<std::string> const& all_strings_gender   () {return 
all_strings<mcenum_gender  >();}
+std::vector<std::string> const& all_strings_class    () {return 
all_strings<mcenum_class   >();}
+std::vector<std::string> const& all_strings_smoking  () {return 
all_strings<mcenum_smoking >();}
+std::vector<std::string> const& all_strings_uw_basis () {return 
all_strings<mcenum_uw_basis>();}
+std::vector<std::string> const& all_strings_state    () {return 
all_strings<mcenum_state   >();}
 
 std::vector<std::string> allowed_strings_emission()
 {




reply via email to

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