]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com) |
2 | // (C) Copyright 2003-2007 Jonathan Turkanis | |
3 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
4 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.) | |
5 | ||
6 | // Provides std::char_traits for libraries without templated streams. Should not | |
7 | // be confused with <boost/iostreams/char_traits.hpp>, which defines the | |
8 | // template boost::iostreams::char_traits. | |
9 | ||
10 | // See http://www.boost.org/libs/iostreams for documentation. | |
11 | ||
12 | #ifndef BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED | |
13 | #define BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED | |
14 | ||
15 | #if defined(_MSC_VER) | |
16 | # pragma once | |
17 | #endif | |
18 | ||
19 | #include <iosfwd> | |
20 | #include <boost/iostreams/detail/config/wide_streams.hpp> | |
21 | #ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES | |
22 | # include <boost/config.hpp> // Make sure size_t is in std. | |
23 | # include <cstddef> | |
24 | # include <cstring> | |
25 | # include <cstdio> | |
26 | #endif | |
27 | ||
28 | #ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------------------// | |
29 | # define BOOST_IOSTREAMS_CHAR_TRAITS(ch) std::char_traits< ch > | |
30 | #else | |
31 | # define BOOST_IOSTREAMS_CHAR_TRAITS(ch) boost::iostreams::detail::char_traits | |
32 | ||
33 | namespace boost { namespace iostreams { namespace detail { | |
34 | ||
35 | struct char_traits { | |
36 | typedef char char_type; | |
37 | typedef int int_type; | |
38 | typedef std::streampos pos_type; | |
39 | typedef std::streamoff off_type; | |
40 | ||
41 | // Note: this may not be not conforming, since it treats chars as unsigned, | |
42 | // but is only used to test for equality. | |
43 | static int compare(const char* lhs, const char* rhs, std::size_t n) | |
44 | { return std::strncmp(lhs, rhs, n); } | |
45 | static char* copy(char *dest, const char *src, std::size_t n) | |
46 | { return static_cast<char*>(std::memcpy(dest, src, n)); } | |
47 | static char* move(char *dest, const char *src, std::size_t n) | |
48 | { return static_cast<char*>(std::memmove(dest, src, n)); } | |
49 | static const char* find(const char* s, std::size_t n, const char& c) | |
50 | { return (const char*) (const void*) std::memchr(s, c, n); } | |
51 | static char to_char_type(const int& c) { return c; } | |
52 | static int to_int_type(const char& c) { return c; } | |
53 | static bool eq_int_type(const int& lhs, const int& rhs) | |
54 | { return lhs == rhs; } | |
55 | static int eof() { return EOF; } | |
56 | static int not_eof(const int& c) { return c != EOF ? c : '\n'; } | |
57 | }; | |
58 | ||
59 | } } } // End namespaces detail, iostreams, boost. | |
60 | ||
61 | #endif // #ifdef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-----------------------// | |
62 | ||
63 | #endif // #ifndef BOOST_IOSTREAMS_DETAIL_CHAR_TRAITS_HPP_INCLUDED |