- added implementation of stdc++ for haiku
- this differs slightly from the one that lives in buildtools/gcc as it has been "ported" to the newer libio that haiku uses as part of its own libroot git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9906 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
// Character traits template for the -*- C++ -*- string classes.
|
||||
// Copyright (C) 1994 Free Software Foundation
|
||||
|
||||
// This file is part of the GNU ANSI 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
// As a special exception, if you link this library with files
|
||||
// compiled with a GNU compiler to produce an executable, this does not 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.
|
||||
|
||||
// Written by Jason Merrill based upon the specification by Takanori Adachi
|
||||
// in ANSI X3J16/94-0013R2.
|
||||
|
||||
#ifndef __STRING_CHAR_TRAITS__
|
||||
#define __STRING_CHAR_TRAITS__
|
||||
|
||||
#ifdef __GNUG__
|
||||
// For string_char_traits <char>
|
||||
#pragma interface "std/straits.h"
|
||||
#endif
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
extern "C++" {
|
||||
template <class charT>
|
||||
struct string_char_traits {
|
||||
typedef charT char_type; // for users to acquire the basic character type
|
||||
|
||||
// constraints
|
||||
|
||||
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 ne (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 char_type eos () { return char_type(); } // the null character
|
||||
static bool is_del(char_type a) { return 0; }
|
||||
// characteristic function for delimiters of charT
|
||||
|
||||
// speed-up functions
|
||||
|
||||
static int compare (const char_type* s1, const char_type* s2, size_t n)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < n; ++i)
|
||||
if (ne (s1[i], s2[i]))
|
||||
return lt (s1[i], s2[i]) ? -1 : 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static size_t length (const char_type* s)
|
||||
{
|
||||
size_t l = 0;
|
||||
while (ne (*s++, eos ()))
|
||||
++l;
|
||||
return l;
|
||||
}
|
||||
|
||||
static char_type* copy (char_type* s1, const char_type* s2, size_t n)
|
||||
{
|
||||
for (; n--; )
|
||||
assign (s1[n], s2[n]);
|
||||
return s1;
|
||||
}
|
||||
|
||||
static char_type* move (char_type* s1, const char_type* s2, size_t n)
|
||||
{
|
||||
char_type a[n];
|
||||
size_t i;
|
||||
for (i = 0; i < n; ++i)
|
||||
assign (a[i], s2[i]);
|
||||
for (i = 0; i < n; ++i)
|
||||
assign (s1[i], a[i]);
|
||||
return s1;
|
||||
}
|
||||
|
||||
static char_type* set (char_type* s1, const char_type& c, size_t n)
|
||||
{
|
||||
for (; n--; )
|
||||
assign (s1[n], c);
|
||||
return s1;
|
||||
}
|
||||
};
|
||||
|
||||
class istream;
|
||||
class ostream;
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
|
||||
struct string_char_traits <char> {
|
||||
typedef char char_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 ne (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 char_type eos () { return 0; }
|
||||
static bool is_del(char_type a) { return isspace(a); }
|
||||
|
||||
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 (s); }
|
||||
static char_type* copy (char_type* s1, const char_type* s2, size_t n)
|
||||
{ return (char_type*) memcpy (s1, s2, n); }
|
||||
static char_type* move (char_type* s1, const char_type* s2, size_t n)
|
||||
{ return (char_type*) memmove (s1, s2, n); }
|
||||
static char_type* set (char_type* s1, const char_type& c, size_t n)
|
||||
{ return (char_type*) memset (s1, c, n); }
|
||||
};
|
||||
|
||||
#if 0
|
||||
#include <cwctype>
|
||||
struct string_char_traits <wchar_t> {
|
||||
typedef wchar_t char_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 ne (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 char_type eos () { return 0; }
|
||||
static bool is_del(char_type a) { return iswspace(a); }
|
||||
|
||||
static int compare (const char_type* s1, const char_type* s2, size_t n)
|
||||
{ return wmemcmp (s1, s2, n); }
|
||||
static size_t length (const char_type* s)
|
||||
{ return wcslen (s); }
|
||||
static char_type* copy (char_type* s1, const char_type* s2, size_t n)
|
||||
{ return wmemcpy (s1, s2, n); }
|
||||
static char_type* set (char_type* s1, const char_type& c, size_t n)
|
||||
{ return wmemset (s1, c, n); }
|
||||
};
|
||||
#endif
|
||||
} // extern "C++"
|
||||
#endif
|
||||
Reference in New Issue
Block a user