X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fstrfwd.h;h=eef3a83a0ce44a04eeb42ff55e0e57f45a8415ff;hb=cf14e814124ccbc8155fa1dde98d03be319c0e87;hp=55cc4ccbd8bc8f766832887621bb05b866ae9736;hpb=3a1290815e71d6d7d63ebc7697fa7583db589722;p=lyx.git diff --git a/src/support/strfwd.h b/src/support/strfwd.h index 55cc4ccbd8..eef3a83a0c 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 -#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 -#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 -#ifdef _MSC_VER 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; + +} // namespace std + #endif + + + + namespace lyx { -/// String type for storing the main text in UCS4 encoding -#ifdef _MSC_VER -typedef std::basic_string, std::allocator > docstring; -#else -typedef std::basic_string docstring; -#endif +/** + * 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