File: test_bug_11988.cpp

package info (click to toggle)
boost1.62 1.62.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 686,420 kB
  • sloc: cpp: 2,609,004; xml: 972,558; ansic: 53,674; python: 32,437; sh: 8,829; asm: 3,071; cs: 2,121; makefile: 964; perl: 859; yacc: 472; php: 132; ruby: 94; f90: 55; sql: 13; csh: 6
file content (115 lines) | stat: -rw-r--r-- 2,712 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
*
* Copyright (c) 2016
* John Maddock
*
* Use, modification and distribution are subject to the
* Boost Software License, Version 1.0. (See accompanying file
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*
*/

#include <boost/config.hpp>

#ifndef BOOST_NO_CXX11_CHAR32_T

#include <cstddef>

namespace boost {

   std::size_t hash_value(char32_t const& c) { return c; }

}

#include <boost/regex.hpp>

struct char32_traits
{
   typedef char32_t char_type;
   typedef std::size_t size_type;
   typedef std::vector<char32_t> string_type;
   typedef int locale_type; // not used
   typedef unsigned char_class_type;

   static size_type length(const char32_t* p)
   {
      size_type result = 0;
      while(*p)
      {
         ++p;
         ++result;
      }
      return result;
   }
   static char_type translate(char_type c) { return c; }
   static char_type translate_nocase(char_type c) { return c; }
   static string_type transform(const char32_t* p1, const char32_t* p2)
   {
      return string_type(p1, p2);
   }
   static string_type transform_primary(const char32_t* p1, const char32_t* p2)
   {
      return string_type(p1, p2);
   }
   static char_class_type lookup_classname(const char32_t* p1, const char32_t* p2)
   {
      std::string s(p1, p2);
      return boost::c_regex_traits<char>::lookup_classname(s.c_str(), s.c_str() + s.length());
      return 0;
   }
   static string_type lookup_collatename(const char32_t* p1, const char32_t* p2)
   {
      return string_type(p1, p2);
   }
   static bool isctype(char_type c, char_class_type t)
   {
      if(c < 0xff)
         return boost::c_regex_traits<char>::isctype(c, t);
      return false;
   }
   static boost::intmax_t value(char_type c, int radix)
   {
      switch(radix)
      {
      case 8:
         if((c >= '0') && (c <= '7'))
            return c - '0';
         break;
      case 10:
         if((c >= '0') && (c <= '9'))
            return c - '0';
         break;
      case 16:
         if((c >= '0') && (c <= '9'))
            return c - '0';
         if((c >= 'a') && (c <= 'f'))
            return (c - 'a') + 10;
         if((c >= 'A') && (c <= 'F'))
            return (c - 'A') + 10;
         break;
      }
      return -1;
   }
   static locale_type imbue(locale_type) { return 0; }
   static locale_type getloc() { return 0; }
};


int main()
{
   char32_t big_char[] = { 0xF, 0xFF, 0xFFF, 0xFFFF, 0xFFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF, 0 };

   boost::basic_regex<char32_t, char32_traits> e(U"\\x{F}\\x{FF}\\x{FFF}\\x{FFFF}\\x{FFFFF}\\x{FFFFFF}\\x{FFFFFFF}\\x{FFFFFFFF}");

   if(!regex_match(big_char, e))
   {
      return 1;
   }
   return 0;
}

#else

int main() { return 0; }

#endif