X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fstrfwd.h;h=58b44f59b3cd09effa4e639ab22b62061855f12e;hb=10b4a4718539ea45d908dc3d051ae2284f9678e6;hp=324560952fd4bb4cbb5e52b6ffa32f28d8041ad7;hpb=a15472ecfeb50c79e436d37404eeb93044599bb8;p=lyx.git diff --git a/src/support/strfwd.h b/src/support/strfwd.h index 324560952f..58b44f59b3 100644 --- a/src/support/strfwd.h +++ b/src/support/strfwd.h @@ -23,46 +23,91 @@ namespace lyx { typedef wchar_t char_type; } #else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) +#include +namespace lyx { typedef uint32_t char_type; } +#include "support/numpunct_lyx_char_type.h" // implementation for our char_type needed +#else #include namespace lyx { typedef boost::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 { +template class allocator; + template struct char_traits; template<> struct char_traits; -template<> struct char_traits; - -template class allocator; +#ifdef USE_WCHAR_T +template<> struct char_traits; +#endif template class basic_string; - 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; + +} // namepace std + +#endif + + -} namespace lyx { +/** + * 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; /// Base class for UCS4 input streams -typedef std::basic_istream > - idocstream; +typedef std::basic_istream > idocstream; /// Base class for UCS4 output streams -typedef std::basic_ostream > - odocstream; +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 + +// defined in lstrings.cpp +docstring const & empty_docstring(); +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