BVB Source Codes

mars Show date_duration.hpp Source code

Return Download mars: download date_duration.hpp Source code - Download mars Source code - Type:.hpp
  1. #ifndef DATE_TIME_DATE_DURATION__
  2. #define DATE_TIME_DATE_DURATION__
  3.  
  4. /* Copyright (c) 2002,2003 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/operators.hpp>
  14. #include <boost/date_time/special_defs.hpp>
  15.  
  16. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost {
  17. namespace date_time {
  18.  
  19.  
  20.   //! Duration type with date level resolution
  21.   template<class duration_rep_traits>
  22.   class date_duration : private
  23.               mars_boost::less_than_comparable1< date_duration< duration_rep_traits >
  24.             , mars_boost::equality_comparable1< date_duration< duration_rep_traits >
  25.             , mars_boost::addable1< date_duration< duration_rep_traits >
  26.             , mars_boost::subtractable1< date_duration< duration_rep_traits >
  27.             , mars_boost::dividable2< date_duration< duration_rep_traits >, int
  28.             > > > > >
  29.   {
  30.   public:
  31.     typedef typename duration_rep_traits::int_type duration_rep_type;
  32.     typedef typename duration_rep_traits::impl_type duration_rep;
  33.  
  34.     //! Construct from a day count
  35.     explicit date_duration(duration_rep day_count) : days_(day_count) {}
  36.  
  37.     /*! construct from special_values - only works when
  38.      * instantiated with duration_traits_adapted */
  39.     date_duration(special_values sv) :
  40.             days_(duration_rep::from_special(sv))
  41.     {}
  42.  
  43.     // copy constructor required for addable<> & subtractable<>
  44.     //! Construct from another date_duration (Copy Constructor)
  45.     date_duration(const date_duration<duration_rep_traits>& other) :
  46.             days_(other.days_)
  47.     {}
  48.  
  49.     //! returns days_ as it's instantiated type - used for streaming
  50.     duration_rep get_rep()const
  51.     {
  52.         return days_;
  53.     }
  54.     bool is_special()const
  55.     {
  56.         return days_.is_special();
  57.     }
  58.     //! returns days as value, not object.
  59.     duration_rep_type days() const
  60.     {
  61.         return duration_rep_traits::as_number(days_);
  62.     }
  63.     //! Returns the smallest duration -- used by to calculate 'end'
  64.     static date_duration unit()
  65.     {
  66.         return date_duration<duration_rep_traits>(1);
  67.     }
  68.     //! Equality
  69.     bool operator==(const date_duration& rhs) const
  70.     {
  71.         return days_ == rhs.days_;
  72.     }
  73.     //! Less
  74.     bool operator<(const date_duration& rhs) const
  75.     {
  76.         return days_ < rhs.days_;
  77.     }
  78.  
  79.     /* For shortcut operators (+=, -=, etc) simply using
  80.      * "days_ += days_" may not work. If instantiated with
  81.      * an int_adapter, shortcut operators are not present,
  82.      * so this will not compile */
  83.  
  84.     //! Subtract another duration -- result is signed
  85.     date_duration& operator-=(const date_duration& rhs)
  86.     {
  87.         //days_ -= rhs.days_;
  88.         days_ = days_ - rhs.days_;
  89.         return *this;
  90.     }
  91.     //! Add a duration -- result is signed
  92.     date_duration& operator+=(const date_duration& rhs)
  93.     {
  94.         days_ = days_ + rhs.days_;
  95.         return *this;
  96.     }
  97.  
  98.     //! unary- Allows for dd = -date_duration(2); -> dd == -2
  99.     date_duration operator-() const
  100.     {
  101.         return date_duration<duration_rep_traits>(get_rep() * (-1));
  102.     }
  103.     //! Division operations on a duration with an integer.
  104.     date_duration& operator/=(int divisor)
  105.     {
  106.         days_ = days_ / divisor;
  107.         return *this;
  108.     }
  109.  
  110.     //! return sign information
  111.     bool is_negative() const
  112.     {
  113.         return days_ < 0;
  114.     }
  115.  
  116.   private:
  117.     duration_rep days_;
  118.   };
  119.  
  120.  
  121.   /*! Struct for instantiating date_duration with <b>NO</b> special values
  122.    * functionality. Allows for transparent implementation of either
  123.    * date_duration<long> or date_duration<int_adapter<long> > */
  124.   struct duration_traits_long
  125.   {
  126.     typedef long int_type;
  127.     typedef long impl_type;
  128.     static int_type as_number(impl_type i) { return i; }
  129.   };
  130.  
  131.   /*! Struct for instantiating date_duration <b>WITH</b> special values
  132.    * functionality. Allows for transparent implementation of either
  133.    * date_duration<long> or date_duration<int_adapter<long> > */
  134.   struct duration_traits_adapted
  135.   {
  136.     typedef long int_type;
  137.     typedef mars_boost::date_time::int_adapter<long> impl_type;
  138.     static int_type as_number(impl_type i) { return i.as_number(); }
  139.   };
  140.  
  141.  
  142. } } //namspace date_time
  143.  
  144.  
  145. #endif
  146.  
  147.  
downloaddate_duration.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