[Top][All Lists]
[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
)