// std::time_get, std::time_put implementation, GNU version -*- C++ -*-

// Copyright (C) 2001-2014 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.

// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
// <http://www.gnu.org/licenses/>.

//
// ISO C++ 14882: 22.2.5.1.2 - time_get virtual functions
// ISO C++ 14882: 22.2.5.3.2 - time_put virtual functions
//

// Written by Benjamin Kosnik <bkoz@redhat.com>

#include <locale>
#include <bits/c++locale_internal.h>

namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION

  template<>
    void
    __timepunct<char>::
    _M_put(char* __s, size_t __maxlen, const char* __format, 
	   const tm* __tm) const throw()
    {
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
      const size_t __len = __strftime_l(__s, __maxlen, __format, __tm,
					_M_c_locale_timepunct);
#else
      char* __old = setlocale(LC_ALL, 0);
      const size_t __llen = strlen(__old) + 1;  
      char* __sav = new char[__llen];
      memcpy(__sav, __old, __llen);
      setlocale(LC_ALL, _M_name_timepunct);
      const size_t __len = strftime(__s, __maxlen, __format, __tm);
      setlocale(LC_ALL, __sav);
      delete [] __sav;
#endif
      // Make sure __s is null terminated.
      if (__len == 0)
	__s[0] = '\0';
    }

  template<> 
    void
    __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc)
    {
      if (!_M_data)
	_M_data = new __timepunct_cache<char>;

      if (!__cloc)
	{
	  // "C" locale
	  _M_c_locale_timepunct = _S_get_c_locale();

	  _M_data->_M_date_format = "%m/%d/%y";
	  _M_data->_M_date_era_format = "%m/%d/%y";
	  _M_data->_M_time_format = "%H:%M:%S";
	  _M_data->_M_time_era_format = "%H:%M:%S";
	  _M_data->_M_date_time_format = "";
	  _M_data->_M_date_time_era_format = "";
	  _M_data->_M_am = "AM";
	  _M_data->_M_pm = "PM";
	  _M_data->_M_am_pm_format = "";

	  // Day names, starting with "C"'s Sunday.
	  _M_data->_M_day1 = "Sunday";
	  _M_data->_M_day2 = "Monday";
	  _M_data->_M_day3 = "Tuesday";
	  _M_data->_M_day4 = "Wednesday";
	  _M_data->_M_day5 = "Thursday";
	  _M_data->_M_day6 = "Friday";
	  _M_data->_M_day7 = "Saturday";

	  // Abbreviated day names, starting with "C"'s Sun.
	  _M_data->_M_aday1 = "Sun";
	  _M_data->_M_aday2 = "Mon";
	  _M_data->_M_aday3 = "Tue";
	  _M_data->_M_aday4 = "Wed";
	  _M_data->_M_aday5 = "Thu";
	  _M_data->_M_aday6 = "Fri";
	  _M_data->_M_aday7 = "Sat";

	  // Month names, starting with "C"'s January.
	  _M_data->_M_month01 = "January";
	  _M_data->_M_month02 = "February";
	  _M_data->_M_month03 = "March";
	  _M_data->_M_month04 = "April";
	  _M_data->_M_month05 = "May";
	  _M_data->_M_month06 = "June";
	  _M_data->_M_month07 = "July";
	  _M_data->_M_month08 = "August";
	  _M_data->_M_month09 = "September";
	  _M_data->_M_month10 = "October";
	  _M_data->_M_month11 = "November";
	  _M_data->_M_month12 = "December";

	  // Abbreviated month names, starting with "C"'s Jan.
	  _M_data->_M_amonth01 = "Jan";
	  _M_data->_M_amonth02 = "Feb";
	  _M_data->_M_amonth03 = "Mar";
	  _M_data->_M_amonth04 = "Apr";
	  _M_data->_M_amonth05 = "May";
	  _M_data->_M_amonth06 = "Jun";
	  _M_data->_M_amonth07 = "Jul";
	  _M_data->_M_amonth08 = "Aug";
	  _M_data->_M_amonth09 = "Sep";
	  _M_data->_M_amonth10 = "Oct";
	  _M_data->_M_amonth11 = "Nov";
	  _M_data->_M_amonth12 = "Dec";
	}
      else
	{
	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 

	  _M_data->_M_date_format = __nl_langinfo_l(D_FMT, __cloc);
	  _M_data->_M_date_era_format = __nl_langinfo_l(ERA_D_FMT, __cloc);
	  _M_data->_M_time_format = __nl_langinfo_l(T_FMT, __cloc);
	  _M_data->_M_time_era_format = __nl_langinfo_l(ERA_T_FMT, __cloc);
	  _M_data->_M_date_time_format = __nl_langinfo_l(D_T_FMT, __cloc);
	  _M_data->_M_date_time_era_format = __nl_langinfo_l(ERA_D_T_FMT,
							     __cloc);
	  _M_data->_M_am = __nl_langinfo_l(AM_STR, __cloc);
	  _M_data->_M_pm = __nl_langinfo_l(PM_STR, __cloc);
	  _M_data->_M_am_pm_format = __nl_langinfo_l(T_FMT_AMPM, __cloc);

	  // Day names, starting with "C"'s Sunday.
	  _M_data->_M_day1 = __nl_langinfo_l(DAY_1, __cloc);
	  _M_data->_M_day2 = __nl_langinfo_l(DAY_2, __cloc);
	  _M_data->_M_day3 = __nl_langinfo_l(DAY_3, __cloc);
	  _M_data->_M_day4 = __nl_langinfo_l(DAY_4, __cloc);
	  _M_data->_M_day5 = __nl_langinfo_l(DAY_5, __cloc);
	  _M_data->_M_day6 = __nl_langinfo_l(DAY_6, __cloc);
	  _M_data->_M_day7 = __nl_langinfo_l(DAY_7, __cloc);

	  // Abbreviated day names, starting with "C"'s Sun.
	  _M_data->_M_aday1 = __nl_langinfo_l(ABDAY_1, __cloc);
	  _M_data->_M_aday2 = __nl_langinfo_l(ABDAY_2, __cloc);
	  _M_data->_M_aday3 = __nl_langinfo_l(ABDAY_3, __cloc);
	  _M_data->_M_aday4 = __nl_langinfo_l(ABDAY_4, __cloc);
	  _M_data->_M_aday5 = __nl_langinfo_l(ABDAY_5, __cloc);
	  _M_data->_M_aday6 = __nl_langinfo_l(ABDAY_6, __cloc);
	  _M_data->_M_aday7 = __nl_langinfo_l(ABDAY_7, __cloc);

	  // Month names, starting with "C"'s January.
	  _M_data->_M_month01 = __nl_langinfo_l(MON_1, __cloc);
	  _M_data->_M_month02 = __nl_langinfo_l(MON_2, __cloc);
	  _M_data->_M_month03 = __nl_langinfo_l(MON_3, __cloc);
	  _M_data->_M_month04 = __nl_langinfo_l(MON_4, __cloc);
	  _M_data->_M_month05 = __nl_langinfo_l(MON_5, __cloc);
	  _M_data->_M_month06 = __nl_langinfo_l(MON_6, __cloc);
	  _M_data->_M_month07 = __nl_langinfo_l(MON_7, __cloc);
	  _M_data->_M_month08 = __nl_langinfo_l(MON_8, __cloc);
	  _M_data->_M_month09 = __nl_langinfo_l(MON_9, __cloc);
	  _M_data->_M_month10 = __nl_langinfo_l(MON_10, __cloc);
	  _M_data->_M_month11 = __nl_langinfo_l(MON_11, __cloc);
	  _M_data->_M_month12 = __nl_langinfo_l(MON_12, __cloc);

	  // Abbreviated month names, starting with "C"'s Jan.
	  _M_data->_M_amonth01 = __nl_langinfo_l(ABMON_1, __cloc);
	  _M_data->_M_amonth02 = __nl_langinfo_l(ABMON_2, __cloc);
	  _M_data->_M_amonth03 = __nl_langinfo_l(ABMON_3, __cloc);
	  _M_data->_M_amonth04 = __nl_langinfo_l(ABMON_4, __cloc);
	  _M_data->_M_amonth05 = __nl_langinfo_l(ABMON_5, __cloc);
	  _M_data->_M_amonth06 = __nl_langinfo_l(ABMON_6, __cloc);
	  _M_data->_M_amonth07 = __nl_langinfo_l(ABMON_7, __cloc);
	  _M_data->_M_amonth08 = __nl_langinfo_l(ABMON_8, __cloc);
	  _M_data->_M_amonth09 = __nl_langinfo_l(ABMON_9, __cloc);
	  _M_data->_M_amonth10 = __nl_langinfo_l(ABMON_10, __cloc);
	  _M_data->_M_amonth11 = __nl_langinfo_l(ABMON_11, __cloc);
	  _M_data->_M_amonth12 = __nl_langinfo_l(ABMON_12, __cloc);
	}
    }

#ifdef _GLIBCXX_USE_WCHAR_T
  template<>
    void
    __timepunct<wchar_t>::
    _M_put(wchar_t* __s, size_t __maxlen, const wchar_t* __format, 
	   const tm* __tm) const throw()
    {
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
      const size_t __len = __wcsftime_l(__s, __maxlen, __format, __tm,
					_M_c_locale_timepunct);
#else
      char* __old = setlocale(LC_ALL, 0);
      const size_t __llen = strlen(__old) + 1;
      char* __sav = new char[__llen];
      memcpy(__sav, __old, __llen);
      setlocale(LC_ALL, _M_name_timepunct);
      const size_t __len = wcsftime(__s, __maxlen, __format, __tm);
      setlocale(LC_ALL, __sav);
      delete [] __sav;
#endif
      // Make sure __s is null terminated.
      if (__len == 0)
	__s[0] = L'\0';
    }

  template<> 
    void
    __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc)
    {
      if (!_M_data)
	_M_data = new __timepunct_cache<wchar_t>;

      if (!__cloc)
	{
	  // "C" locale
	  _M_c_locale_timepunct = _S_get_c_locale();

	  _M_data->_M_date_format = L"%m/%d/%y";
	  _M_data->_M_date_era_format = L"%m/%d/%y";
	  _M_data->_M_time_format = L"%H:%M:%S";
	  _M_data->_M_time_era_format = L"%H:%M:%S";
	  _M_data->_M_date_time_format = L"";
	  _M_data->_M_date_time_era_format = L"";
	  _M_data->_M_am = L"AM";
	  _M_data->_M_pm = L"PM";
	  _M_data->_M_am_pm_format = L"";

	  // Day names, starting with "C"'s Sunday.
	  _M_data->_M_day1 = L"Sunday";
	  _M_data->_M_day2 = L"Monday";
	  _M_data->_M_day3 = L"Tuesday";
	  _M_data->_M_day4 = L"Wednesday";
	  _M_data->_M_day5 = L"Thursday";
	  _M_data->_M_day6 = L"Friday";
	  _M_data->_M_day7 = L"Saturday";

	  // Abbreviated day names, starting with "C"'s Sun.
	  _M_data->_M_aday1 = L"Sun";
	  _M_data->_M_aday2 = L"Mon";
	  _M_data->_M_aday3 = L"Tue";
	  _M_data->_M_aday4 = L"Wed";
	  _M_data->_M_aday5 = L"Thu";
	  _M_data->_M_aday6 = L"Fri";
	  _M_data->_M_aday7 = L"Sat";

	  // Month names, starting with "C"'s January.
	  _M_data->_M_month01 = L"January";
	  _M_data->_M_month02 = L"February";
	  _M_data->_M_month03 = L"March";
	  _M_data->_M_month04 = L"April";
	  _M_data->_M_month05 = L"May";
	  _M_data->_M_month06 = L"June";
	  _M_data->_M_month07 = L"July";
	  _M_data->_M_month08 = L"August";
	  _M_data->_M_month09 = L"September";
	  _M_data->_M_month10 = L"October";
	  _M_data->_M_month11 = L"November";
	  _M_data->_M_month12 = L"December";

	  // Abbreviated month names, starting with "C"'s Jan.
	  _M_data->_M_amonth01 = L"Jan";
	  _M_data->_M_amonth02 = L"Feb";
	  _M_data->_M_amonth03 = L"Mar";
	  _M_data->_M_amonth04 = L"Apr";
	  _M_data->_M_amonth05 = L"May";
	  _M_data->_M_amonth06 = L"Jun";
	  _M_data->_M_amonth07 = L"Jul";
	  _M_data->_M_amonth08 = L"Aug";
	  _M_data->_M_amonth09 = L"Sep";
	  _M_data->_M_amonth10 = L"Oct";
	  _M_data->_M_amonth11 = L"Nov";
	  _M_data->_M_amonth12 = L"Dec";
	}
      else
	{
	  _M_c_locale_timepunct = _S_clone_c_locale(__cloc); 

	  union { char *__s; wchar_t *__w; } __u;

	  __u.__s = __nl_langinfo_l(_NL_WD_FMT, __cloc);
	  _M_data->_M_date_format = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WERA_D_FMT, __cloc);
	  _M_data->_M_date_era_format = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WT_FMT, __cloc);
	  _M_data->_M_time_format = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WERA_T_FMT, __cloc);
	  _M_data->_M_time_era_format = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WD_T_FMT, __cloc);
	  _M_data->_M_date_time_format = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WERA_D_T_FMT, __cloc);
	  _M_data->_M_date_time_era_format = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WAM_STR, __cloc);
	  _M_data->_M_am = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WPM_STR, __cloc);
	  _M_data->_M_pm = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WT_FMT_AMPM, __cloc);
	  _M_data->_M_am_pm_format = __u.__w;

	  // Day names, starting with "C"'s Sunday.
	  __u.__s = __nl_langinfo_l(_NL_WDAY_1, __cloc);
	  _M_data->_M_day1 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WDAY_2, __cloc);
	  _M_data->_M_day2 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WDAY_3, __cloc);
	  _M_data->_M_day3 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WDAY_4, __cloc);
	  _M_data->_M_day4 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WDAY_5, __cloc);
	  _M_data->_M_day5 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WDAY_6, __cloc);
	  _M_data->_M_day6 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WDAY_7, __cloc);
	  _M_data->_M_day7 = __u.__w;

	  // Abbreviated day names, starting with "C"'s Sun.
	  __u.__s = __nl_langinfo_l(_NL_WABDAY_1, __cloc);
	  _M_data->_M_aday1 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABDAY_2, __cloc);
	  _M_data->_M_aday2 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABDAY_3, __cloc);
	  _M_data->_M_aday3 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABDAY_4, __cloc);
	  _M_data->_M_aday4 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABDAY_5, __cloc);
	  _M_data->_M_aday5 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABDAY_6, __cloc);
	  _M_data->_M_aday6 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABDAY_7, __cloc);
	  _M_data->_M_aday7 = __u.__w;

	  // Month names, starting with "C"'s January.
	  __u.__s = __nl_langinfo_l(_NL_WMON_1, __cloc);
	  _M_data->_M_month01 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_2, __cloc);
	  _M_data->_M_month02 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_3, __cloc);
	  _M_data->_M_month03 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_4, __cloc);
	  _M_data->_M_month04 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_5, __cloc);
	  _M_data->_M_month05 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_6, __cloc);
	  _M_data->_M_month06 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_7, __cloc);
	  _M_data->_M_month07 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_8, __cloc);
	  _M_data->_M_month08 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_9, __cloc);
	  _M_data->_M_month09 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_10, __cloc);
	  _M_data->_M_month10 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_11, __cloc);
	  _M_data->_M_month11 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WMON_12, __cloc);
	  _M_data->_M_month12 = __u.__w;

	  // Abbreviated month names, starting with "C"'s Jan.
	  __u.__s = __nl_langinfo_l(_NL_WABMON_1, __cloc);
	  _M_data->_M_amonth01 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_2, __cloc);
	  _M_data->_M_amonth02 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_3, __cloc);
	  _M_data->_M_amonth03 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_4, __cloc);
	  _M_data->_M_amonth04 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_5, __cloc);
	  _M_data->_M_amonth05 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_6, __cloc);
	  _M_data->_M_amonth06 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_7, __cloc);
	  _M_data->_M_amonth07 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_8, __cloc);
	  _M_data->_M_amonth08 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_9, __cloc);
	  _M_data->_M_amonth09 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_10, __cloc);
	  _M_data->_M_amonth10 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_11, __cloc);
	  _M_data->_M_amonth11 = __u.__w;
	  __u.__s = __nl_langinfo_l(_NL_WABMON_12, __cloc);
	  _M_data->_M_amonth12 = __u.__w;
	}
    }
#endif

_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
