X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fstrfwd.h;h=eef3a83a0ce44a04eeb42ff55e0e57f45a8415ff;hb=cf14e814124ccbc8155fa1dde98d03be319c0e87;hp=069357ff9cbdd5258e3b4b1927c5dbe77926e765;hpb=d764a97cf4df8007368a318b7e2aa76ec6454652;p=lyx.git diff --git a/src/support/strfwd.h b/src/support/strfwd.h index 069357ff9c..eef3a83a0c 100644 --- a/src/support/strfwd.h +++ b/src/support/strfwd.h @@ -23,11 +23,24 @@ namespace lyx { typedef wchar_t char_type; } #else -#include -namespace lyx { typedef boost::uint32_t char_type; } +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1600) +namespace lyx { typedef uint32_t char_type; } +#include "support/numpunct_lyx_char_type.h" // implementation for our char_type needed +#else +namespace lyx { typedef std::uint32_t char_type; } +#endif #endif +// Forward definitions do not work with libc++ +// For gcc5 with the new std::string ABI forward declarations would work in +// principle, but I am not sure whether we want non-standard +// "namespace __cxx11" in our sources. +#if defined(USE_LLVM_LIBCPP) || defined(USE_GLIBCXX_CXX11_ABI) +#include +#else namespace std { @@ -44,16 +57,27 @@ typedef basic_string, allocator > string; template class basic_istream; template class basic_ostream; +template class basic_ostringstream; typedef basic_istream > istream; typedef basic_ostream > ostream; +typedef basic_ostringstream, allocator > ostringstream; + +} // namespace std + +#endif + + -} // namepace std namespace lyx { -/// String type for storing the main text in UCS4 encoding +/** + * String type for storing the main text in UCS4 encoding. + * Use std::string only in cases 7-bit ASCII is to be manipulated + * within the variable. + */ typedef std::basic_string, std::allocator > docstring; @@ -63,6 +87,9 @@ typedef std::basic_istream > idocstream; /// Base class for UCS4 output streams typedef std::basic_ostream > odocstream; +/// UCS4 output stringstream +typedef std::basic_ostringstream, std::allocator > odocstringstream; + #if ! defined(USE_WCHAR_T) extern odocstream & operator<<(odocstream &, char); #endif @@ -73,6 +100,15 @@ std::string const & empty_string(); // defined in docstring.cpp bool operator==(docstring const &, char const *); +#ifdef STD_STRING_USES_COW +template class trivial_string; +typedef trivial_string trivstring; +typedef trivial_string trivdocstring; +#else +typedef std::string trivstring; +typedef docstring trivdocstring; +#endif + } // namespace lyx #endif