imgtools/imglib/boostlibrary/boost/regex/v4/primary_transform.hpp
author jjkang
Fri, 25 Jun 2010 18:11:34 +0800
changeset 600 6d08f4a05d93
permissions -rw-r--r--
add deprecated files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
600
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     1
/*
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     2
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     3
 * Copyright (c) 1998-2002
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     4
 * John Maddock
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     5
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     6
 * Use, modification and distribution are subject to the 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     7
 * Boost Software License, Version 1.0. (See accompanying file 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     8
 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     9
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    10
 */
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    11
 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    12
 /*
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    13
  *   LOCATION:    see http://www.boost.org for most recent version.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    14
  *   FILE:        primary_transform.hpp
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    15
  *   VERSION:     see <boost/version.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    16
  *   DESCRIPTION: Heuristically determines the sort string format in use
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    17
  *                by the current locale.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    18
  */
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    19
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    20
#ifndef BOOST_REGEX_PRIMARY_TRANSFORM
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    21
#define BOOST_REGEX_PRIMARY_TRANSFORM
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    22
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    23
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    24
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    25
#pragma warning(disable: 4103)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    26
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    27
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    28
#  include BOOST_ABI_PREFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    29
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    30
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    31
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    32
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    33
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    34
namespace boost{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    35
   namespace re_detail{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    36
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    37
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    38
enum{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    39
   sort_C,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    40
   sort_fixed,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    41
   sort_delim,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    42
   sort_unknown
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    43
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    44
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    45
template <class S, class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    46
unsigned count_chars(const S& s, charT c)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    47
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    48
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    49
   // Count how many occurances of character c occur
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    50
   // in string s: if c is a delimeter between collation
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    51
   // fields, then this should be the same value for all
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    52
   // sort keys:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    53
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    54
   unsigned int count = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    55
   for(unsigned pos = 0; pos < s.size(); ++pos)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    56
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    57
      if(s[pos] == c) ++count;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    58
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    59
   return count;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    60
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    61
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    62
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    63
template <class traits, class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    64
unsigned find_sort_syntax(const traits* pt, charT* delim)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    65
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    66
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    67
   // compare 'a' with 'A' to see how similar they are,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    68
   // should really use a-accute but we can't portably do that,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    69
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    70
   typedef typename traits::string_type string_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    71
   typedef typename traits::char_type char_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    72
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    73
   // Suppress incorrect warning for MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    74
   (void)pt;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    75
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    76
   char_type a[2] = {'a', '\0', };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    77
   string_type sa(pt->transform(a, a+1));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    78
   if(sa == a)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    79
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    80
      *delim = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    81
      return sort_C;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    82
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    83
   char_type A[2] = { 'A', '\0', };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    84
   string_type sA(pt->transform(A, A+1));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    85
   char_type c[2] = { ';', '\0', };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    86
   string_type sc(pt->transform(c, c+1));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    87
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    88
   int pos = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    89
   while((pos <= static_cast<int>(sa.size())) && (pos <= static_cast<int>(sA.size())) && (sa[pos] == sA[pos])) ++pos;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    90
   --pos;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    91
   if(pos < 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    92
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    93
      *delim = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    94
      return sort_unknown;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    95
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    96
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    97
   // at this point sa[pos] is either the end of a fixed width field
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    98
   // or the character that acts as a delimiter:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    99
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   100
   charT maybe_delim = sa[pos];
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   101
   if((pos != 0) && (count_chars(sa, maybe_delim) == count_chars(sA, maybe_delim)) && (count_chars(sa, maybe_delim) == count_chars(sc, maybe_delim)))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   102
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   103
      *delim = maybe_delim;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   104
      return sort_delim;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   105
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   106
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   107
   // OK doen't look like a delimiter, try for fixed width field:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   108
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   109
   if((sa.size() == sA.size()) && (sa.size() == sc.size()))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   110
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   111
      // note assumes that the fixed width field is less than
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   112
      // (numeric_limits<charT>::max)(), should be true for all types
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   113
      // I can't imagine 127 character fields...
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   114
      *delim = static_cast<charT>(++pos);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   115
      return sort_fixed;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   116
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   117
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   118
   // don't know what it is:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   119
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   120
   *delim = 0;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   121
   return sort_unknown;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   122
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   123
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   124
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   125
   } // namespace re_detail
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   126
} // namespace boost
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   127
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   128
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   129
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   130
#pragma warning(disable: 4103)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   131
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   132
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   133
#  include BOOST_ABI_SUFFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   134
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   135
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   136
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   137
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   138
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   139
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   140
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   141
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   142
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   143
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   144
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   145
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   146