[Top][All Lists]
[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()
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [5296] Refactor; make all_strings() virtual,
Greg Chicares <=