X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsupport%2Fstrfwd.h;h=58b44f59b3cd09effa4e639ab22b62061855f12e;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=3f982ca266e8d098169441529cc5e6845f252d54;hpb=edb6c9ede41f470427f1574cdae8d7b41be1d320;p=lyx.git diff --git a/src/support/strfwd.h b/src/support/strfwd.h index 3f982ca266..58b44f59b3 100644 --- a/src/support/strfwd.h +++ b/src/support/strfwd.h @@ -1,14 +1,14 @@ // -*- C++ -*- -/** - * \file strfwd.h - * This file is part of LyX, the document processor. - * Licence details can be found in the file COPYING. - * - * \author André Pönitz - * \author Enrico Forestieri - * - * Full author contact details are available in file CREDITS. - */ + +// Heavily inspired by /usr/include/c++/4.1/bits +// +// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. #ifndef STRFWD_H #define STRFWD_H @@ -23,39 +23,92 @@ 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 -#include +// 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 { -// We have to forward declare the string type as not all compilers -// do that in the iosfwd header. -namespace std -{ +template class allocator; + +template struct char_traits; +template<> struct char_traits; +#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 +/** + * 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 #endif