lmi
[Top][All Lists]
Advanced

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

Re: [lmi] the rest of MSVC compilation patch


From: Greg Chicares
Subject: Re: [lmi] the rest of MSVC compilation patch
Date: Thu, 21 Aug 2008 13:59:18 +0000
User-agent: Thunderbird 2.0.0.16 (Windows/20080708)

[On 2008-07-12 19:27Z, Vadim Zeitlin had written:]
> 
>  For now, let me attach all the changes done in my local msvc branch.

I've updated your patch and attached a new version below, omitting
all files that were completely new. Please confirm that, with this
patch (and the completely-new files that you already have), lmi
compiles and links with msvc. I wouldn't want to accept this and
then find out later that other intrusive changes are required for
this compiler, so let's first establish whether this patchset is
complete.

Index: alert.cpp
===================================================================
RCS file: /sources/lmi/lmi/alert.cpp,v
retrieving revision 1.20
diff -U 3 -r1.20 alert.cpp
--- alert.cpp   28 Jun 2008 02:00:42 -0000      1.20
+++ alert.cpp   21 Aug 2008 13:46:48 -0000
@@ -85,7 +85,7 @@
     std::fputc('\n'   , stderr);
     std::fflush(stderr);
 #else  // defined LMI_MSW
-    ::MessageBox
+    ::MessageBoxA
         (0
         ,message
         ,"Catastrophic error"
Index: config.hpp
===================================================================
RCS file: /sources/lmi/lmi/config.hpp,v
retrieving revision 1.24
diff -U 3 -r1.24 config.hpp
--- config.hpp  24 Jun 2008 09:37:33 -0000      1.24
+++ config.hpp  21 Aug 2008 13:46:48 -0000
@@ -166,6 +166,12 @@
 #       undef  OK_TO_INCLUDE_CONFIG_BC551_HPP
 #   endif // Borland 5.5.1+ .

+#   if defined _MSC_VER
+#       define OK_TO_INCLUDE_CONFIG_MSVC_HPP
+#       include "config_msvc.hpp"
+#       undef  OK_TO_INCLUDE_CONFIG_MSVC_HPP
+#   endif // msvc
+
 #endif // Not using autoconf.

 #endif // config_hpp
Index: mc_enum.hpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum.hpp,v
retrieving revision 1.20
diff -U 3 -r1.20 mc_enum.hpp
--- mc_enum.hpp 11 Aug 2008 18:13:13 -0000      1.20
+++ mc_enum.hpp 21 Aug 2008 13:46:48 -0000
@@ -138,7 +138,7 @@
 /// macro. This built-in approach is preferred because it avoids using
 /// the preprocessor and its compile-time checking is automatic.

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 class mc_enum
     :public mc_enum_base
     ,private boost::equality_comparable<mc_enum<T,n,e,c>, mc_enum<T,n,e,c> >
Index: mc_enum.tpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum.tpp,v
retrieving revision 1.20
diff -U 3 -r1.20 mc_enum.tpp
--- mc_enum.tpp 11 Aug 2008 18:13:14 -0000      1.20
+++ mc_enum.tpp 21 Aug 2008 13:46:48 -0000
@@ -33,51 +33,51 @@
 // TODO ?? Should there be a runtime check that all elements in 'e'
 // and in 'c' are unique? Can that be asserted at compile time?

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 mc_enum<T,n,e,c>::mc_enum()
     :mc_enum_base(n)
-    ,value_(e[0])
+    ,value_((*e)[0])
 {}

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 mc_enum<T,n,e,c>::mc_enum(T t)
     :mc_enum_base(n)
     ,value_(t)
 {}

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 mc_enum<T,n,e,c>::mc_enum(std::string const& s)
     :mc_enum_base(n)
-    ,value_(e[ordinal(s)])
+    ,value_((*e)[ordinal(s)])
 {}

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 mc_enum<T,n,e,c>& mc_enum<T,n,e,c>::operator=(T t)
 {
     value_ = t;
     return *this;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 mc_enum<T,n,e,c>& mc_enum<T,n,e,c>::operator=(std::string const& s)
 {
-    value_ = e[ordinal(s)];
+    value_ = (*e)[ordinal(s)];
     return *this;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 bool mc_enum<T,n,e,c>::operator==(mc_enum<T,n,e,c> const& z) const
 {
     return z.value_ == value_;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 bool mc_enum<T,n,e,c>::operator==(T t) const
 {
     return t == value_;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 bool mc_enum<T,n,e,c>::operator==(std::string const& s) const
 {
     return s == str();
@@ -108,7 +108,7 @@
 }
 } // Unnamed namespace.

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::istream& mc_enum<T,n,e,c>::read(std::istream& is)
 {
     std::locale old_locale = is.imbue(blank_is_not_whitespace_locale());
@@ -116,34 +116,34 @@
     is >> s;
     is.imbue(old_locale);

-    std::size_t v = std::find(c, c + n, s) - c;
+    std::size_t v = std::find(*c, *c + n, s) - *c;
     if(n == v)
         {
-        v = std::find(c, c + n, provide_for_backward_compatibility(s)) - c;
+        v = std::find(*c, *c + n, provide_for_backward_compatibility(s)) - *c;
         }
     if(n == v)
         {
         ordinal(s); // Throws.
         throw "Unreachable.";
         }
-    value_ = e[v];
+    value_ = (*e)[v];

     return is;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::ostream& mc_enum<T,n,e,c>::write(std::ostream& os) const
 {
     return os << str();
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::size_t mc_enum<T,n,e,c>::cardinality() const
 {
     return n;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 void mc_enum<T,n,e,c>::enforce_proscription()
 {
     if(is_allowed(ordinal()))
@@ -154,14 +154,14 @@
     std::size_t z = first_allowed_ordinal();
     if(z < cardinality())
         {
-        value_ = e[z];
+        value_ = (*e)[z];
         }
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::size_t mc_enum<T,n,e,c>::ordinal() const
 {
-    std::size_t i = std::find(e, e + n, value_) - e;
+    std::size_t i = std::find(*e, *e + n, value_) - *e;
     if(i == n)
         {
         fatal_error()
@@ -176,22 +176,22 @@
     return i;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::string mc_enum<T,n,e,c>::str(int j) const
 {
-    return c[j];
+    return (*c)[j];
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 T mc_enum<T,n,e,c>::value() const
 {
     return value_;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::size_t mc_enum<T,n,e,c>::ordinal(std::string const& s)
 {
-    std::size_t v = std::find(c, c + n, s) - c;
+    std::size_t v = std::find(*c, *c + n, s) - *c;
     if(v == n)
         {
         fatal_error()
@@ -206,16 +206,16 @@
     return v;
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::string mc_enum<T,n,e,c>::str() const
 {
-    return c[ordinal()];
+    return (*c)[ordinal()];
 }

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::vector<std::string> const& mc_enum<T,n,e,c>::all_strings()
 {
-    static std::vector<std::string> const v(c, c + n);
+    static std::vector<std::string> const v(*c, *c + n);
     return v;
 }

Index: mc_enum_aux.hpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum_aux.hpp,v
retrieving revision 1.1
diff -U 3 -r1.1 mc_enum_aux.hpp
--- mc_enum_aux.hpp     16 Jul 2008 18:53:48 -0000      1.1
+++ mc_enum_aux.hpp     21 Aug 2008 13:46:48 -0000
@@ -31,7 +31,7 @@
 #include <string>
 #include <vector>

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::vector<std::string> mc_e_vector_to_string_vector
     (std::vector<mc_enum<T,n,e,c> > const& ve
     )
Index: mc_enum_fwd.hpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum_fwd.hpp,v
retrieving revision 1.5
diff -U 3 -r1.5 mc_enum_fwd.hpp
--- mc_enum_fwd.hpp     1 Jan 2008 18:29:49 -0000       1.5
+++ mc_enum_fwd.hpp     21 Aug 2008 13:46:48 -0000
@@ -28,7 +28,7 @@

 #include <cstddef> // std::size_t

-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 class mc_enum;

 #endif // mc_enum_fwd_hpp
Index: mc_enum_test.cpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum_test.cpp,v
retrieving revision 1.18
diff -U 3 -r1.18 mc_enum_test.cpp
--- mc_enum_test.cpp    11 Aug 2008 18:13:14 -0000      1.18
+++ mc_enum_test.cpp    21 Aug 2008 13:46:49 -0000
@@ -41,8 +41,8 @@
 enum enum_island {i_Easter = 37, i_Pago_Pago = -17, i_Ni_ihau = 13};
 extern enum_island const island_enums[] = {i_Easter, i_Pago_Pago, i_Ni_ihau};
 extern char const*const island_strings[] = {"Easter", "Pago Pago", "Ni_ihau"};
-template class mc_enum<enum_island, 3, island_enums, island_strings>;
-typedef mc_enum<enum_island, 3, island_enums, island_strings> e_island;
+template class mc_enum<enum_island, 3, &island_enums, &island_strings>;
+typedef mc_enum<enum_island, 3, &island_enums, &island_strings> e_island;

 // Enumerative type 'e_holiday' is explicitly instantiated in a
 // different translation unit.
Index: mc_enum_test_aux.cpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum_test_aux.cpp,v
retrieving revision 1.5
diff -U 3 -r1.5 mc_enum_test_aux.cpp
--- mc_enum_test_aux.cpp        1 Jan 2008 18:29:49 -0000       1.5
+++ mc_enum_test_aux.cpp        21 Aug 2008 13:46:49 -0000
@@ -44,5 +44,5 @@
     ,"Easter"
     ,"Pentecost"
     };
-template class mc_enum<enum_holiday, 3, holiday_enums, holiday_strings>;
+template class mc_enum<enum_holiday, 3, &holiday_enums, &holiday_strings>;

Index: mc_enum_test_aux.hpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum_test_aux.hpp,v
retrieving revision 1.5
diff -U 3 -r1.5 mc_enum_test_aux.hpp
--- mc_enum_test_aux.hpp        1 Jan 2008 18:29:49 -0000       1.5
+++ mc_enum_test_aux.hpp        21 Aug 2008 13:46:49 -0000
@@ -31,7 +31,7 @@

 extern enum_holiday const holiday_enums[3];
 extern char const*const holiday_strings[3];
-typedef mc_enum<enum_holiday, 3, holiday_enums, holiday_strings> e_holiday;
+typedef mc_enum<enum_holiday, 3, &holiday_enums, &holiday_strings> e_holiday;

 #endif // mc_enum_test_aux_hpp

Index: mc_enum_types.cpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum_types.cpp,v
retrieving revision 1.19
diff -U 3 -r1.19 mc_enum_types.cpp
--- mc_enum_types.cpp   12 Jul 2008 00:37:17 -0000      1.19
+++ mc_enum_types.cpp   21 Aug 2008 13:46:49 -0000
@@ -53,7 +53,7 @@
     ,"B"
     ,"C"
     };
-template class mc_enum<enum_option, 3, option_enums, option_strings>;
+template class mc_enum<enum_option, 3, &option_enums, &option_strings>;

 extern mcenum_emission const emission_enums[] =
     {mce_emit_nothing
@@ -79,14 +79,14 @@
     ,"emit_text_stream"
     ,"emit_custom_0"
     };
-template class mc_enum<mcenum_emission, 10, emission_enums, emission_strings>;
+template class mc_enum<mcenum_emission, 10, &emission_enums, 
&emission_strings>;

 #include "mc_enum_types.xpp"

 #define MC_DEFINE(TYPE,NUMBER) \
 extern mcenum_##TYPE const TYPE##_enums[] = TYPE##_VALUES \
 extern char const*const TYPE##_strings[] = TYPE##_NAMES \
-template class mc_enum<mcenum_##TYPE, NUMBER, TYPE##_enums, TYPE##_strings>;
+template class mc_enum<mcenum_##TYPE, NUMBER, &TYPE##_enums, &TYPE##_strings>;

 MC_DEFINE(yes_or_no,2)
 MC_DEFINE(gender,3)
Index: mc_enum_types.hpp
===================================================================
RCS file: /sources/lmi/lmi/mc_enum_types.hpp,v
retrieving revision 1.19
diff -U 3 -r1.19 mc_enum_types.hpp
--- mc_enum_types.hpp   12 Jul 2008 00:37:17 -0000      1.19
+++ mc_enum_types.hpp   21 Aug 2008 13:46:49 -0000
@@ -34,18 +34,18 @@

 extern enum_option const option_enums[3];
 extern char const*const option_strings[3];
-typedef mc_enum<enum_option, 3, option_enums, option_strings> e_option;
+typedef mc_enum<enum_option, 3, &option_enums, &option_strings> e_option;

 extern mcenum_emission const emission_enums[10];
 extern char const*const emission_strings[10];
-typedef mc_enum<mcenum_emission, 10, emission_enums, emission_strings> 
e_emission;
+typedef mc_enum<mcenum_emission, 10, &emission_enums, &emission_strings> 
e_emission;

 #include "mc_enum_types.xpp"

 #define MC_DECLARE(TYPE,NUMBER) \
 extern mcenum_##TYPE const TYPE##_enums[NUMBER]; \
 extern char const*const TYPE##_strings[NUMBER]; \
-typedef mc_enum<mcenum_##TYPE, NUMBER, TYPE##_enums, TYPE##_strings> 
mce_##TYPE;
+typedef mc_enum<mcenum_##TYPE, NUMBER, &TYPE##_enums, &TYPE##_strings> 
mce_##TYPE;

 MC_DECLARE(yes_or_no,2)
 MC_DECLARE(gender,3)
Index: yare_input.cpp
===================================================================
RCS file: /sources/lmi/lmi/yare_input.cpp,v
retrieving revision 1.14
diff -U 3 -r1.14 yare_input.cpp
--- yare_input.cpp      11 Aug 2008 14:49:23 -0000      1.14
+++ yare_input.cpp      21 Aug 2008 13:46:49 -0000
@@ -33,7 +33,7 @@

 namespace
 {
-template<typename T, std::size_t n, T const (&e)[n], char const*const (&c)[n]>
+template<typename T, std::size_t n, T const (*e)[n], char const*const (*c)[n]>
 std::vector<T> convert_vector_type
     (std::vector<mc_enum<T,n,e,c> > const& ve
     )




reply via email to

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