forked from zeromq/zeromq2-x
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Source char_traits<unsigned char> from GCC C++ Library directly to cl…
…arify license. http://gcc.gnu.org/onlinedocs/libstdc++/ Previously borrowed code from id3lib was considered shady. Placed in its own file for style reasons.
- Loading branch information
Showing
2 changed files
with
122 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
// Character Traits for use by standard string and iostream -*- C++ -*- | ||
|
||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 | ||
// 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. | ||
|
||
// This library is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
|
||
// You should have received a copy of the GNU General Public License along | ||
// with this library; see the file COPYING. If not, write to the Free | ||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, | ||
// USA. | ||
|
||
// As a special exception, you may use this file as part of a free software | ||
// library without restriction. Specifically, if other files instantiate | ||
// templates or use macros or inline functions from this file, or you compile | ||
// this file and link it with other files to produce an executable, this | ||
// file does not by itself cause the resulting executable to be covered by | ||
// the GNU General Public License. This exception does not however | ||
// invalidate any other reasons why the executable file might be covered by | ||
// the GNU General Public License. | ||
|
||
/** @file char_traits.h | ||
* This is an internal header file, included by other library headers. | ||
* You should not attempt to use it directly. | ||
*/ | ||
|
||
// | ||
// ISO C++ 14882: 21 Strings library | ||
// | ||
|
||
// This file has been snipped for 0mq to provide a definition for | ||
// struct char_traits<unsigned char> | ||
// Which is not implemented in GNU ISO C++ Library as of version 3.2.3 | ||
// And is required by blob.hpp | ||
|
||
#ifndef _ZMQ_CHAR_TRAITS_H | ||
#define _ZMQ_CHAR_TRAITS_H 1 | ||
|
||
namespace std | ||
{ | ||
/// @brief 21.1.3.1 char_traits specializations | ||
template<> | ||
struct char_traits<unsigned char> | ||
{ | ||
typedef unsigned char char_type; | ||
typedef int int_type; | ||
typedef streampos pos_type; | ||
typedef streamoff off_type; | ||
typedef mbstate_t state_type; | ||
|
||
static void | ||
assign(char_type& __c1, const char_type& __c2) | ||
{ __c1 = __c2; } | ||
|
||
static bool | ||
eq(const char_type& __c1, const char_type& __c2) | ||
{ return __c1 == __c2; } | ||
|
||
static bool | ||
lt(const char_type& __c1, const char_type& __c2) | ||
{ return __c1 < __c2; } | ||
|
||
static int | ||
compare(const char_type* __s1, const char_type* __s2, size_t __n) | ||
{ return memcmp(__s1, __s2, __n); } | ||
|
||
static size_t | ||
length(const char_type* __s) | ||
{ return strlen((const char*)__s); } | ||
|
||
static const char_type* | ||
find(const char_type* __s, size_t __n, const char_type& __a) | ||
{ return static_cast<const char_type*>(memchr(__s, __a, __n)); } | ||
|
||
static char_type* | ||
move(char_type* __s1, const char_type* __s2, size_t __n) | ||
{ return static_cast<char_type*>(memmove(__s1, __s2, __n)); } | ||
|
||
static char_type* | ||
copy(char_type* __s1, const char_type* __s2, size_t __n) | ||
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); } | ||
|
||
static char_type* | ||
assign(char_type* __s, size_t __n, char_type __a) | ||
{ return static_cast<char_type*>(memset(__s, __a, __n)); } | ||
|
||
static char_type | ||
to_char_type(const int_type& __c) | ||
{ return static_cast<char_type>(__c); } | ||
|
||
// To keep both the byte 0xff and the eof symbol 0xffffffff | ||
// from ending up as 0xffffffff. | ||
static int_type | ||
to_int_type(const char_type& __c) | ||
{ return static_cast<int_type>(static_cast<unsigned char>(__c)); } | ||
|
||
static bool | ||
eq_int_type(const int_type& __c1, const int_type& __c2) | ||
{ return __c1 == __c2; } | ||
|
||
static int_type | ||
eof() { return static_cast<int_type>(EOF); } | ||
|
||
static int_type | ||
not_eof(const int_type& __c) | ||
{ return (__c == eof()) ? 0 : __c; } | ||
}; | ||
} | ||
|
||
#endif |