⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 straits.h

📁 c++编程宝典源码及Quincy99编译器 是《标准C++编程宝典》电子工业出版社的光盘
💻 H
字号:
// 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -