BVB Source Codes

mars Show date_names_put.hpp Source code

Return Download mars: download date_names_put.hpp Source code - Download mars Source code - Type:.hpp
  1. #ifndef DATE_TIME_DATE_NAMES_PUT_HPP___
  2. #define DATE_TIME_DATE_NAMES_PUT_HPP___
  3.  
  4. /* Copyright (c) 2002-2005 CrystalClear Software, Inc.
  5.  * Use, modification and distribution is subject to the
  6.  * Boost Software License, Version 1.0. (See accompanying
  7.  * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
  8.  * Author: Jeff Garland, Bart Garst
  9.  * $Date$
  10.  */
  11.  
  12.  
  13. #include "boost/date_time/locale_config.hpp" // set BOOST_DATE_TIME_NO_LOCALE
  14.  
  15. #ifndef BOOST_DATE_TIME_NO_LOCALE
  16.  
  17. #include "boost/date_time/special_defs.hpp"
  18. #include "boost/date_time/date_defs.hpp"
  19. #include "boost/date_time/parse_format_base.hpp"
  20. #include "boost/lexical_cast.hpp"
  21. #include <locale>
  22.  
  23.  
  24. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost {
  25. namespace date_time {
  26.  
  27.     //! Output facet base class for gregorian dates.
  28.     /*! This class is a base class for date facets used to localize the
  29.      *  names of months and the names of days in the week.
  30.      *
  31.      * Requirements of Config
  32.      *  - define an enumeration month_enum that enumerates the months.
  33.      *    The enumeration should be '1' based eg: Jan==1
  34.      *  - define as_short_string and as_long_string
  35.      *
  36.      * (see langer & kreft p334).
  37.      *
  38.      */
  39.     template<class Config,
  40.              class charT = char,
  41.              class OutputIterator = std::ostreambuf_iterator<charT> >
  42.     class date_names_put : public std::locale::facet
  43.     {
  44.     public:
  45.       date_names_put() {}
  46.       typedef OutputIterator iter_type;
  47.       typedef typename Config::month_type month_type;
  48.       typedef typename Config::month_enum month_enum;
  49.       typedef typename Config::weekday_enum weekday_enum;
  50.       typedef typename Config::special_value_enum special_value_enum;
  51.       //typedef typename Config::format_type format_type;
  52.       typedef std::basic_string<charT> string_type;
  53.       typedef charT char_type;
  54.       static const char_type default_special_value_names[3][17];
  55.       static const char_type separator[2];
  56.  
  57.       static std::locale::id id;
  58.  
  59. #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
  60.       std::locale::id& __get_id (void) const { return id; }
  61. #endif
  62.  
  63.       void put_special_value(iter_type& oitr, special_value_enum sv) const
  64.       {
  65.         do_put_special_value(oitr, sv);
  66.       }
  67.       void put_month_short(iter_type& oitr, month_enum moy) const
  68.       {
  69.         do_put_month_short(oitr, moy);
  70.       }
  71.       void put_month_long(iter_type& oitr, month_enum moy) const
  72.       {
  73.         do_put_month_long(oitr, moy);
  74.       }
  75.       void put_weekday_short(iter_type& oitr, weekday_enum wd) const
  76.       {
  77.         do_put_weekday_short(oitr, wd);
  78.       }
  79.       void put_weekday_long(iter_type& oitr, weekday_enum wd) const
  80.       {
  81.         do_put_weekday_long(oitr, wd);
  82.       }
  83.       bool has_date_sep_chars() const
  84.       {
  85.         return do_has_date_sep_chars();
  86.       }
  87.       void year_sep_char(iter_type& oitr) const
  88.       {
  89.         do_year_sep_char(oitr);
  90.       }
  91.       //! char between year-month
  92.       void month_sep_char(iter_type& oitr) const
  93.       {
  94.         do_month_sep_char(oitr);
  95.       }
  96.       //! Char to separate month-day
  97.       void day_sep_char(iter_type& oitr) const
  98.       {
  99.         do_day_sep_char(oitr);
  100.       }
  101.       //! Determines the order to put the date elements
  102.       ymd_order_spec date_order() const
  103.       {
  104.         return do_date_order();
  105.       }
  106.       //! Determines if month is displayed as integer, short or long string
  107.       month_format_spec month_format() const
  108.       {
  109.         return do_month_format();
  110.       }
  111.  
  112.     protected:
  113.       //! Default facet implementation uses month_type defaults
  114.       virtual void do_put_month_short(iter_type& oitr, month_enum moy) const
  115.       {
  116.         month_type gm(moy);
  117.         charT c = '\0';
  118.         put_string(oitr, gm.as_short_string(c));
  119.       }
  120.       //! Default facet implementation uses month_type defaults
  121.       virtual void do_put_month_long(iter_type& oitr,
  122.                                      month_enum moy) const
  123.       {
  124.         month_type gm(moy);
  125.         charT c = '\0';
  126.         put_string(oitr, gm.as_long_string(c));
  127.       }
  128.       //! Default facet implementation for special value types
  129.       virtual void do_put_special_value(iter_type& oitr, special_value_enum sv) const
  130.       {
  131.         if(sv <= 2) { // only output not_a_date_time, neg_infin, or pos_infin
  132.           string_type s(default_special_value_names[sv]);
  133.           put_string(oitr, s);
  134.         }
  135.       }
  136.       virtual void do_put_weekday_short(iter_type&, weekday_enum) const
  137.       {
  138.       }
  139.       virtual void do_put_weekday_long(iter_type&, weekday_enum) const
  140.       {
  141.       }
  142.       virtual bool do_has_date_sep_chars() const
  143.       {
  144.         return true;
  145.       }
  146.       virtual void do_year_sep_char(iter_type& oitr) const
  147.       {
  148.         string_type s(separator);
  149.         put_string(oitr, s);
  150.       }
  151.       //! char between year-month
  152.       virtual void do_month_sep_char(iter_type& oitr) const
  153.       {
  154.         string_type s(separator);
  155.         put_string(oitr, s);
  156.       }
  157.       //! Char to separate month-day
  158.       virtual void do_day_sep_char(iter_type& oitr) const
  159.       {
  160.         string_type s(separator); //put in '-'
  161.         put_string(oitr, s);
  162.       }
  163.       //! Default for date order
  164.       virtual ymd_order_spec do_date_order() const
  165.       {
  166.         return ymd_order_iso;
  167.       }
  168.       //! Default month format
  169.       virtual month_format_spec do_month_format() const
  170.       {
  171.         return month_as_short_string;
  172.       }
  173.       void put_string(iter_type& oi, const charT* const s) const
  174.       {
  175.         string_type s1(mars_boost::lexical_cast<string_type>(s));
  176.         typename string_type::iterator si,end;
  177.         for (si=s1.begin(), end=s1.end(); si!=end; si++, oi++) {
  178.           *oi = *si;
  179.         }
  180.       }
  181.       void put_string(iter_type& oi, const string_type& s1) const
  182.       {
  183.         typename string_type::const_iterator si,end;
  184.         for (si=s1.begin(), end=s1.end(); si!=end; si++, oi++) {
  185.           *oi = *si;
  186.         }
  187.       }
  188.     };
  189.  
  190.     template<class Config, class charT, class OutputIterator>
  191.     const typename date_names_put<Config, charT, OutputIterator>::char_type
  192.     date_names_put<Config, charT, OutputIterator>::default_special_value_names[3][17] = {
  193.       {'n','o','t','-','a','-','d','a','t','e','-','t','i','m','e'},
  194.       {'-','i','n','f','i','n','i','t','y'},
  195.       {'+','i','n','f','i','n','i','t','y'} };
  196.  
  197.     template<class Config, class charT, class OutputIterator>
  198.     const typename date_names_put<Config, charT, OutputIterator>::char_type
  199.     date_names_put<Config, charT, OutputIterator>::separator[2] =
  200.       {'-', '\0'} ;
  201.  
  202.  
  203.     //! Generate storage location for a std::locale::id
  204.     template<class Config, class charT, class OutputIterator>
  205.     std::locale::id date_names_put<Config, charT, OutputIterator>::id;
  206.  
  207.     //! A date name output facet that takes an array of char* to define strings
  208.     template<class Config,
  209.              class charT = char,
  210.              class OutputIterator = std::ostreambuf_iterator<charT> >
  211.     class all_date_names_put : public date_names_put<Config, charT, OutputIterator>
  212.     {
  213.     public:
  214.       all_date_names_put(const charT* const month_short_names[],
  215.                          const charT* const month_long_names[],
  216.                          const charT* const special_value_names[],
  217.                          const charT* const weekday_short_names[],
  218.                          const charT* const weekday_long_names[],
  219.                          charT separator_char = '-',
  220.                          ymd_order_spec order_spec = ymd_order_iso,
  221.                          month_format_spec month_format = month_as_short_string) :
  222.         month_short_names_(month_short_names),
  223.         month_long_names_(month_long_names),
  224.         special_value_names_(special_value_names),
  225.         weekday_short_names_(weekday_short_names),
  226.         weekday_long_names_(weekday_long_names),
  227.         order_spec_(order_spec),
  228.         month_format_spec_(month_format)
  229.       {
  230.         separator_char_[0] = separator_char;
  231.         separator_char_[1] = '\0';
  232.  
  233.       }
  234.       typedef OutputIterator iter_type;
  235.       typedef typename Config::month_enum month_enum;
  236.       typedef typename Config::weekday_enum weekday_enum;
  237.       typedef typename Config::special_value_enum special_value_enum;
  238.  
  239.       const charT* const* get_short_month_names() const
  240.       {
  241.         return month_short_names_;
  242.       }
  243.       const charT* const* get_long_month_names() const
  244.       {
  245.         return month_long_names_;
  246.       }
  247.       const charT* const* get_special_value_names() const
  248.       {
  249.         return special_value_names_;
  250.       }
  251.       const charT* const* get_short_weekday_names()const
  252.       {
  253.         return weekday_short_names_;
  254.       }
  255.       const charT* const* get_long_weekday_names()const
  256.       {
  257.         return weekday_long_names_;
  258.       }
  259.  
  260.     protected:
  261.       //! Generic facet that takes array of chars
  262.       virtual void do_put_month_short(iter_type& oitr, month_enum moy) const
  263.       {
  264.         this->put_string(oitr, month_short_names_[moy-1]);
  265.       }
  266.       //! Long month names
  267.       virtual void do_put_month_long(iter_type& oitr, month_enum moy) const
  268.       {
  269.         this->put_string(oitr, month_long_names_[moy-1]);
  270.       }
  271.       //! Special values names
  272.       virtual void do_put_special_value(iter_type& oitr, special_value_enum sv) const
  273.       {
  274.         this->put_string(oitr, special_value_names_[sv]);
  275.       }
  276.       virtual void do_put_weekday_short(iter_type& oitr, weekday_enum wd) const
  277.       {
  278.         this->put_string(oitr, weekday_short_names_[wd]);
  279.       }
  280.       virtual void do_put_weekday_long(iter_type& oitr, weekday_enum wd) const
  281.       {
  282.         this->put_string(oitr, weekday_long_names_[wd]);
  283.       }
  284.       //! char between year-month
  285.       virtual void do_month_sep_char(iter_type& oitr) const
  286.       {
  287.         this->put_string(oitr, separator_char_);
  288.       }
  289.       //! Char to separate month-day
  290.       virtual void do_day_sep_char(iter_type& oitr) const
  291.       {
  292.         this->put_string(oitr, separator_char_);
  293.       }
  294.       //! Set the date ordering
  295.       virtual ymd_order_spec do_date_order() const
  296.       {
  297.         return order_spec_;
  298.       }
  299.       //! Set the date ordering
  300.       virtual month_format_spec do_month_format() const
  301.       {
  302.         return month_format_spec_;
  303.       }
  304.  
  305.     private:
  306.       const charT* const* month_short_names_;
  307.       const charT* const* month_long_names_;
  308.       const charT* const* special_value_names_;
  309.       const charT* const* weekday_short_names_;
  310.       const charT* const* weekday_long_names_;
  311.       charT separator_char_[2];
  312.       ymd_order_spec order_spec_;
  313.       month_format_spec month_format_spec_;
  314.     };
  315.  
  316. } } //namespace mars_boost::date_time
  317.  
  318. #endif //BOOST_NO_STD_LOCALE
  319.  
  320. #endif
  321.  
downloaddate_names_put.hpp Source code - Download mars Source code
Related Source Codes/Software:
Hero - Elegant transition library for iOS & tvOS 2017-06-09
deep-photo-styletransfer - Code and data for paper "Deep Photo Style Transfer... 2017-06-09
mastodon - A GNU Social-compatible microblogging server ... 2017-06-09
plyr - A simple HTML5, YouTube and Vimeo player ... 2017-06-08
prepack - Prepack is a partial evaluator for JavaScript. Pre... 2017-06-08
Public-APIs - 2017-06-09
lottie-ios - An iOS library to natively render After Effects ve... 2017-06-09
Awesome-Hacking - A collection of various awesome lists for hackers,... 2017-06-09
algorithms - Minimal examples of data structures and algorithms... 2017-06-10
lectures - Oxford Deep NLP 2017 course 2017-06-10
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top