Changes to attempt to silence bcc64x
[ACE_TAO.git] / ACE / ace / UTF16_Encoding_Converter.inl
blobd241c5ec8d8c38e8f256e68ce56a3d626e4b4573
1 /* -*- C++ -*- */
2 // ======================================================================
3 //
4 // The actual conversion methods are covered by the copyright information
5 // below.
6 // Chad Elliott 4/28/2005
7 //
8 // Copyright 2001-2004 Unicode, Inc.
9 //
10 // Limitations on Rights to Redistribute This Code
12 // Unicode, Inc. hereby grants the right to freely use the information
13 // supplied in this file in the creation of products supporting the
14 // Unicode Standard, and to make copies of this file in any form
15 // for internal or external distribution as long as this notice
16 // remains attached.
18 // ======================================================================
20 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
22 ACE_INLINE bool
23 ACE_UTF16_Encoding_Converter::is_legal_utf8 (const ACE_Byte* source,
24                                              size_t length) const
26   ACE_Byte a;
27   const ACE_Byte* srcptr = source + length;
29   switch (length)
30     {
31     default:
32       return false;
34     // Everything else falls through when "true"...
35     case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
36     case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
37     case 2: if ((a = (*--srcptr)) > 0xBF) return false;
39     switch (*source)
40       {
41       // no fall-through in this inner switch
42       case 0xE0:
43         if (a < 0xA0)
44           return false;
45         break;
46       case 0xED:
47         if (a > 0x9F)
48           return false;
49         break;
50       case 0xF0:
51         if (a < 0x90)
52           return false;
53         break;
54       case 0xF4:
55         if (a > 0x8F)
56           return false;
57         break;
58       default:
59         if (a < 0x80)
60           return false;
61     }
63     case 1:
64       if (*source >= 0x80 && *source < 0xC2)
65         return false;
66     }
68   if (*source > 0xF4)
69     return false;
71   return true;
74 ACE_END_VERSIONED_NAMESPACE_DECL