From 161db0a9ee7b6aa5284b2c8f48b281242b484b1f Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Tue, 15 Aug 2006 12:31:35 +0000 Subject: [PATCH] * src/support/docstring.h: Add char_traits template functions for gcc 3.3.x and older. They were first supplied with the libstdc++ of gcc 3.4. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14685 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/support/docstring.h | 117 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/src/support/docstring.h b/src/support/docstring.h index 9f54f0eaaa..5b64a08d5c 100644 --- a/src/support/docstring.h +++ b/src/support/docstring.h @@ -25,4 +25,121 @@ typedef std::basic_string docstring; } + +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ == 3 && __GNUC_MINOR__ < 4 +// Missing char_traits methods in gcc 3.3 and older. Taken from gcc 4.2svn. +namespace std { + +template void +char_traits::assign(char_type & c1, char_type const & c2) +{ + c1 = c2; +} + + +template bool +char_traits::eq(char_type const & c1, char_type const & c2) +{ + return c1 == c2; +} + + +template bool +char_traits::lt(char_type const & c1, char_type const & c2) +{ + return c1 < c2; +} + + +template int +char_traits::compare(char_type const * s1, char_type const * s2, std::size_t n) +{ + for (std::size_t i = 0; i < n; ++i) + if (lt(s1[i], s2[i])) + return -1; + else if (lt(s2[i], s1[i])) + return 1; + return 0; +} + + +template std::size_t +char_traits::length(char_type const * p) +{ + std::size_t i = 0; + while (!eq(p[i], char_type())) + ++i; + return i; +} + + +template typename char_traits::char_type const * +char_traits::find(char_type const * s, size_t n, char_type const & a) +{ + for (std::size_t i = 0; i < n; ++i) + if (eq(s[i], a)) + return s + i; + return 0; +} + + +template typename char_traits::char_type * +char_traits::move(char_type * s1, char_type const * s2, std::size_t n) +{ + return static_cast(std::memmove(s1, s2, n * sizeof(char_type))); +} + + +template typename char_traits::char_type * +char_traits::copy(char_type * s1, char_type const * s2, std::size_t n) +{ + std::copy(s2, s2 + n, s1); + return s1; +} + + +template typename char_traits::char_type * +char_traits::assign(char_type * s, std::size_t n, char_type a) +{ + std::fill_n(s, n, a); + return s; +} + + +template typename char_traits::char_type +char_traits::to_char_type(int_type const & c) +{ + return static_cast(c); +} + + +template typename char_traits::int_type +char_traits::to_int_type(char_type const & c) +{ + return static_cast(c); +} + + +template bool +char_traits::eq_int_type(int_type const & c1, int_type const & c2) +{ + return c1 == c2; +} + + +template typename char_traits::int_type +char_traits::eof() +{ + return static_cast(EOF); +} + + +template typename char_traits::int_type +char_traits::not_eof(int_type const & c) +{ + return !eq_int_type(c, eof()) ? c : to_int_type(char_type()); +} + +} +#endif #endif -- 2.39.2