/*============================================================================
  KWSys - Kitware System Library
  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium

  Distributed under the OSI-approved BSD License (the "License");
  see accompanying file Copyright.txt for details.

  This software is distributed WITHOUT ANY WARRANTY; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the License for more information.
============================================================================*/

#ifdef __osf__
#  define _OSF_SOURCE
#  define _POSIX_C_SOURCE 199506L
#  define _XOPEN_SOURCE_EXTENDED
#endif

#include "kwsysPrivate.h"
#include KWSYS_HEADER(Encoding.hxx)
#include KWSYS_HEADER(Encoding.h)
#include KWSYS_HEADER(stl/vector)

// Work-around CMake dependency scanning limitation.  This must
// duplicate the above list of headers.
#if 0
# include "Encoding.hxx.in"
# include "Encoding.h.in"
#endif

#include <stdlib.h>

#ifdef _MSC_VER
# pragma warning (disable: 4786)
#endif

// Windows API.
#if defined(_WIN32)
# include <windows.h>
#endif

namespace KWSYS_NAMESPACE
{

#if KWSYS_STL_HAS_WSTRING

kwsys_stl::wstring Encoding::ToWide(const kwsys_stl::string& str)
{
  return ToWide(str.c_str());
}

kwsys_stl::string Encoding::ToNarrow(const kwsys_stl::wstring& str)
{
  return ToNarrow(str.c_str());
}

kwsys_stl::wstring Encoding::ToWide(const char* cstr)
{
  kwsys_stl::wstring wstr;
  size_t length = kwsysEncoding_mbstowcs(0, cstr, 0) + 1;
  if(length > 0)
    {
    kwsys_stl::vector<wchar_t> wchars(length);
    if(kwsysEncoding_mbstowcs(&wchars[0], cstr, length) > 0)
      {
      wstr = &wchars[0];
      }
    }
  return wstr;
}

kwsys_stl::string Encoding::ToNarrow(const wchar_t* wcstr)
{
  kwsys_stl::string str;
  size_t length = kwsysEncoding_wcstombs(0, wcstr, 0) + 1;
  if(length > 0)
    {
    std::vector<char> chars(length);
    if(kwsysEncoding_wcstombs(&chars[0], wcstr, length) > 0)
      {
      str = &chars[0];
      }
    }
  return str;
}
#endif // KWSYS_STL_HAS_WSTRING

} // namespace KWSYS_NAMESPACE
