On mingw-w64, long long (64bit wide) is larger than long (32bit wide).
Therefore we need some more specializations for string, docstring,
otextstream and << overloaded ostream functions. The configuration code
is by me, the source code changes by Shankar Giri Venkita Giri (bug 10053).
# Needed for our char_type
AC_CHECK_SIZEOF(wchar_t)
+# Needed for Mingw-w64
+AC_TYPE_LONG_LONG_INT
+if test "$ac_cv_type_long_long_int" = yes; then
+ AC_CHECK_SIZEOF(long)
+ AC_CHECK_SIZEOF(long long)
+fi
+
### We need iconv for unicode support (Qt4 frontend requires it too)
AM_ICONV
if test "$am_cv_func_iconv" = no; then
# define USE_WCHAR_T
#endif
+#ifdef HAVE_LONG_LONG_INT
+#if SIZEOF_LONG_LONG > SIZEOF_LONG
+#define LYX_USE_LONG_LONG
+#endif
+#endif
+
#endif
])
"
SIZEOF_WCHAR_T_IS_4)
+check_cxx_source_compiles(
+ "
+ int i[ ( sizeof(long long)>sizeof(long) ? 1 : -1 ) ];
+ int main(){return 0;}
+ "
+SIZEOF_LONG_LONG_GREATER_THAN_SIZEOF_LONG)
+
check_cxx_source_compiles(
"
#include <execinfo.h>
#cmakedefine HAVE_MAGIC_H 1
#cmakedefine SIZEOF_WCHAR_T_IS_2 1
#cmakedefine SIZEOF_WCHAR_T_IS_4 1
+#cmakedefine SIZEOF_LONG_LONG_GREATER_THAN_SIZEOF_LONG 1
#ifdef SIZEOF_WCHAR_T_IS_2
# define SIZEOF_WCHAR_T 2
# endif
#endif
+#ifdef HAVE_LONG_LONG
+#ifdef SIZEOF_LONG_LONG_GREATER_THAN_SIZEOF_LONG
+#define LYX_USE_LONG_LONG
+#endif
+#endif
+
#cmakedefine GETTEXT_FOUND 1
#cmakedefine HAVE_ALLOCA 1
# define USE_WCHAR_T
#endif
+#ifdef HAVE_LONG_LONG
+#ifdef SIZEOF_LONG_LONG_GREATER_THAN_SIZEOF_LONG
+#define LYX_USE_LONG_LONG
+#endif
+#endif
+
#if defined(MAKE_INTL_LIB) && defined(_MSC_VER)
#define __attribute__(x)
#define inline
}
+#ifdef LYX_USE_LONG_LONG
+template<>
+string convert<string>(unsigned long long ull)
+{
+ return lexical_cast<string>(ull);
+}
+
+
+template<>
+docstring convert<docstring>(unsigned long long ull)
+{
+ return from_ascii(lexical_cast<string>(ull));
+}
+#endif
+
+
template<>
string convert<string>(long l)
{
}
+#ifdef LYX_USE_LONG_LONG
+template<>
+string convert<string>(long long ll)
+{
+ return lexical_cast<string>(ll);
+}
+
+
+template<>
+docstring convert<docstring>(long long ll)
+{
+ return from_ascii(lexical_cast<string>(ll));
+}
+#endif
+
+
template<>
string convert<string>(float f)
{
template<> docstring convert<docstring>(unsigned int ui);
template<> std::string convert<std::string>(unsigned long ul);
template<> docstring convert<docstring>(unsigned long ul);
+#ifdef LYX_USE_LONG_LONG
+template<> std::string convert<std::string>(unsigned long long ull);
+template<> docstring convert<docstring>(unsigned long long ull);
+#endif
template<> std::string convert<std::string>(long l);
template<> docstring convert<docstring>(long l);
+#ifdef LYX_USE_LONG_LONG
+template<> std::string convert<std::string>(long long ll);
+template<> docstring convert<docstring>(long long ll);
+#endif
template<> std::string convert<std::string>(float f);
template<> std::string convert<std::string>(double d);
template<> int convert<int>(std::string const & s);
{ return toStream(l, t); }
LyXErr & operator<<(LyXErr & l, unsigned long t)
{ return toStream(l, t); }
+#ifdef LYX_USE_LONG_LONG
+LyXErr & operator<<(LyXErr & l, long long t)
+{ return toStream(l, t); }
+LyXErr & operator<<(LyXErr & l, unsigned long long t)
+{ return toStream(l, t); }
+#endif
LyXErr & operator<<(LyXErr & l, double t)
{ return toStream(l, t); }
LyXErr & operator<<(LyXErr & l, string const & t)
LyXErr & operator<<(LyXErr &, unsigned int);
LyXErr & operator<<(LyXErr &, long);
LyXErr & operator<<(LyXErr &, unsigned long);
+#ifdef LYX_USE_LONG_LONG
+LyXErr & operator<<(LyXErr &, long long);
+LyXErr & operator<<(LyXErr &, unsigned long long);
+#endif
LyXErr & operator<<(LyXErr &, double);
LyXErr & operator<<(LyXErr &, std::string const &);
LyXErr & operator<<(LyXErr &, docstring const &);
return do_put_helper(oit, b, fill, v);
}
-#ifdef _GLIBCXX_USE_LONG_LONG
+#ifdef LYX_USE_LONG_LONG
iter_type
do_put(iter_type oit, ios_base & b, char_type fill, long long v) const
{
return do_get_integer(iit, eit, b, err, v);
}
-#ifdef _GLIBCXX_USE_LONG_LONG
+#ifdef LYX_USE_LONG_LONG
iter_type
do_get(iter_type iit, iter_type eit, ios_base & b,
ios_base::iostate & err, long long & v) const
}
+#ifdef LYX_USE_LONG_LONG
+template<>
+docstring bformat(docstring const & fmt, long long arg1)
+{
+ LATTEST(contains(fmt, from_ascii("%1$d")));
+ docstring const str = subst(fmt, from_ascii("%1$d"), convert<docstring>(arg1));
+ return subst(str, from_ascii("%%"), from_ascii("%"));
+}
+#endif
+
+
template<>
docstring bformat(docstring const & fmt, unsigned int arg1)
{
template<> docstring bformat(docstring const & fmt, int arg1);
template<> docstring bformat(docstring const & fmt, long arg1);
+#ifdef LYX_USE_LONG_LONG
+template<> docstring bformat(docstring const & fmt, long long arg1);
+#endif
template<> docstring bformat(docstring const & fmt, unsigned int arg1);
template<> docstring bformat(docstring const & fmt, docstring arg1);
template<> docstring bformat(docstring const & fmt, char * arg1);
template otexrowstream & operator<< <unsigned long>(otexrowstream &,
unsigned long);
+#ifdef LYX_USE_LONG_LONG
+template otexrowstream & operator<< <unsigned long long>(otexrowstream &,
+ unsigned long long);
+#endif
+
template <typename Type>
otexstream & operator<<(otexstream & ots, Type value)
template otexstream & operator<< <int>(otexstream &, int);
template otexstream & operator<< <unsigned int>(otexstream &, unsigned int);
template otexstream & operator<< <unsigned long>(otexstream &, unsigned long);
+#ifdef LYX_USE_LONG_LONG
+template otexstream & operator<< <unsigned long long>(otexstream &, unsigned long long);
+#endif
}