Split <ctype.h> out of <cctype>.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@249738 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Richard Smith 2015-10-08 20:36:30 +00:00
parent 72d7577b34
commit ceeace9a60
3 changed files with 82 additions and 32 deletions

View File

@ -37,10 +37,6 @@ int toupper(int c);
#include <__config>
#include <ctype.h>
#if defined(_LIBCPP_MSVCRT)
#include "support/win32/support.h"
#include "support/win32/locale_win32.h"
#endif // _LIBCPP_MSVCRT
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
@ -48,33 +44,19 @@ int toupper(int c);
_LIBCPP_BEGIN_NAMESPACE_STD
#undef isalnum
using ::isalnum;
#undef isalpha
using ::isalpha;
#undef isblank
using ::isblank;
#undef iscntrl
using ::iscntrl;
#undef isdigit
using ::isdigit;
#undef isgraph
using ::isgraph;
#undef islower
using ::islower;
#undef isprint
using ::isprint;
#undef ispunct
using ::ispunct;
#undef isspace
using ::isspace;
#undef isupper
using ::isupper;
#undef isxdigit
using ::isxdigit;
#undef tolower
using ::tolower;
#undef toupper
using ::toupper;
_LIBCPP_END_NAMESPACE_STD

68
include/ctype.h Normal file
View File

@ -0,0 +1,68 @@
// -*- C++ -*-
//===---------------------------- ctype.h ---------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef _LIBCPP_CTYPE_H
#define _LIBCPP_CTYPE_H
/*
ctype.h synopsis
int isalnum(int c);
int isalpha(int c);
int isblank(int c); // C99
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
int tolower(int c);
int toupper(int c);
*/
#include <__config>
#include_next <ctype.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
#ifdef __cplusplus
#if defined(_LIBCPP_MSVCRT)
// We support including .h headers inside 'extern "C"' contexts, so switch
// back to C++ linkage before including these C++ headers.
extern "C++" {
#include "support/win32/support.h"
#include "support/win32/locale_win32.h"
}
#endif // _LIBCPP_MSVCRT
#undef isalnum
#undef isalpha
#undef isblank
#undef iscntrl
#undef isdigit
#undef isgraph
#undef islower
#undef isprint
#undef ispunct
#undef isspace
#undef isupper
#undef isxdigit
#undef tolower
#undef toupper
#endif
#endif // _LIBCPP_CTYPE_H

View File

@ -86,18 +86,18 @@ int main()
static_assert((std::is_same<decltype(std::tolower(0)), int>::value), "");
static_assert((std::is_same<decltype(std::toupper(0)), int>::value), "");
assert(isalnum('a'));
assert(isalpha('a'));
assert(isblank(' '));
assert(!iscntrl(' '));
assert(!isdigit('a'));
assert(isgraph('a'));
assert(islower('a'));
assert(isprint('a'));
assert(!ispunct('a'));
assert(!isspace('a'));
assert(!isupper('a'));
assert(isxdigit('a'));
assert(tolower('A') == 'a');
assert(toupper('a') == 'A');
assert(std::isalnum('a'));
assert(std::isalpha('a'));
assert(std::isblank(' '));
assert(!std::iscntrl(' '));
assert(!std::isdigit('a'));
assert(std::isgraph('a'));
assert(std::islower('a'));
assert(std::isprint('a'));
assert(!std::ispunct('a'));
assert(!std::isspace('a'));
assert(!std::isupper('a'));
assert(std::isxdigit('a'));
assert(std::tolower('A') == 'a');
assert(std::toupper('a') == 'A');
}