///////////////////////////////////////////////////////////////////////////////
/// \file regex_traits.hpp
/// Includes the C regex traits or the CPP regex traits header file depending on the
/// BOOST_XPRESSIVE_USE_C_TRAITS macro.
//
//  Copyright 2008 Eric Niebler. Distributed under 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)

#ifndef BOOST_XPRESSIVE_REGEX_TRAITS_HPP_EAN_10_04_2005
#define BOOST_XPRESSIVE_REGEX_TRAITS_HPP_EAN_10_04_2005

// MS compatible compilers support #pragma once
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif

#include <boost/type_traits/is_convertible.hpp>
#include <boost/xpressive/detail/detail_fwd.hpp>

#ifdef BOOST_XPRESSIVE_USE_C_TRAITS
# include <boost/xpressive/traits/c_regex_traits.hpp>
#else
# include <boost/xpressive/traits/cpp_regex_traits.hpp>
#endif

namespace boost { namespace xpressive
{

///////////////////////////////////////////////////////////////////////////////
// regex_traits_version_1_tag
/// Tag used to denote that a traits class conforms to the version 1 traits
/// interface.
struct regex_traits_version_1_tag
{
};

///////////////////////////////////////////////////////////////////////////////
// regex_traits_version_2_tag
/// Tag used to denote that a traits class conforms to the version 2 traits
/// interface.
struct regex_traits_version_2_tag
  : regex_traits_version_1_tag
{
};

///////////////////////////////////////////////////////////////////////////////
// regex_traits_version_1_case_fold_tag DEPRECATED use has_fold_case trait
/// INTERNAL ONLY
///
struct regex_traits_version_1_case_fold_tag
  : regex_traits_version_1_tag
{
};

///////////////////////////////////////////////////////////////////////////////
// has_fold_case
/// Trait used to denote that a traits class has the fold_case member function.
template<typename Traits>
struct has_fold_case
  : is_convertible<
        typename Traits::version_tag *
      , regex_traits_version_1_case_fold_tag *
    >
{
};

///////////////////////////////////////////////////////////////////////////////
// regex_traits
/// Thin wrapper around the default regex_traits implementation, either
/// cpp_regex_traits or c_regex_traits
///
template<typename Char, typename Impl>
struct regex_traits
  : Impl
{
    typedef typename Impl::locale_type locale_type;

    regex_traits()
      : Impl()
    {
    }

    explicit regex_traits(locale_type const &loc)
      : Impl(loc)
    {
    }
};

///////////////////////////////////////////////////////////////////////////////
// lookup_classname
/// INTERNAL ONLY
template<typename Traits, std::size_t N>
inline typename Traits::char_class_type
lookup_classname(Traits const &traits, char const (&cname)[N], bool icase)
{
    typename Traits::char_type name[N] = {0};
    for(std::size_t j = 0; j < N-1; ++j)
    {
        name[j] = traits.widen(cname[j]);
    }
    return traits.lookup_classname(name, name + N - 1, icase);
}

}}

#endif
