1 #ifndef _GREGORIAN_TYPES_HPP__
2 #define _GREGORIAN_TYPES_HPP__
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 /*! @file gregorian_types.hpp
13   Single file header that defines most of the types for the gregorian
14   date-time system.
15 */
16 
17 #include "boost/date_time/date.hpp"
18 #include "boost/date_time/period.hpp"
19 #include "boost/date_time/gregorian/greg_calendar.hpp"
20 #include "boost/date_time/gregorian/greg_duration.hpp"
21 #if defined(BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES)
22 #include "boost/date_time/gregorian/greg_duration_types.hpp"
23 #endif
24 #include "boost/date_time/gregorian/greg_date.hpp"
25 #include "boost/date_time/date_generators.hpp"
26 #include "boost/date_time/date_clock_device.hpp"
27 #include "boost/date_time/date_iterator.hpp"
28 #include "boost/date_time/adjust_functors.hpp"
29 
30 namespace boost {
31 
32 //! Gregorian date system based on date_time components
33 /*! This date system defines a full complement of types including
34  *  a date, date_duration, date_period, day_clock, and a
35  *  day_iterator.
36  */
37 namespace gregorian {
38   //! Date periods for the gregorian system
39   /*!\ingroup date_basics
40    */
41   typedef date_time::period<date, date_duration> date_period;
42 
43   //! A unifying date_generator base type
44   /*! A unifying date_generator base type for:
45    * partial_date, nth_day_of_the_week_in_month,
46    * first_day_of_the_week_in_month, and last_day_of_the_week_in_month
47    */
48   typedef date_time::year_based_generator<date> year_based_generator;
49 
50   //! A date generation object type
51   typedef date_time::partial_date<date> partial_date;
52 
53   typedef date_time::nth_kday_of_month<date> nth_kday_of_month;
54   typedef nth_kday_of_month nth_day_of_the_week_in_month;
55 
56   typedef date_time::first_kday_of_month<date> first_kday_of_month;
57   typedef first_kday_of_month first_day_of_the_week_in_month;
58 
59   typedef date_time::last_kday_of_month<date> last_kday_of_month;
60   typedef last_kday_of_month last_day_of_the_week_in_month;
61 
62   typedef date_time::first_kday_after<date> first_kday_after;
63   typedef first_kday_after first_day_of_the_week_after;
64 
65   typedef date_time::first_kday_before<date> first_kday_before;
66   typedef first_kday_before first_day_of_the_week_before;
67 
68   //! A clock to get the current day from the local computer
69   /*!\ingroup date_basics
70    */
71   typedef date_time::day_clock<date> day_clock;
72 
73   //! Base date_iterator type for gregorian types.
74   /*!\ingroup date_basics
75    */
76   typedef date_time::date_itr_base<date> date_iterator;
77 
78   //! A day level iterator
79   /*!\ingroup date_basics
80    */
81   typedef date_time::date_itr<date_time::day_functor<date>,
82                               date> day_iterator;
83   //! A week level iterator
84   /*!\ingroup date_basics
85    */
86   typedef date_time::date_itr<date_time::week_functor<date>,
87                               date> week_iterator;
88   //! A month level iterator
89   /*!\ingroup date_basics
90    */
91   typedef date_time::date_itr<date_time::month_functor<date>,
92                               date> month_iterator;
93   //! A year level iterator
94   /*!\ingroup date_basics
95    */
96   typedef date_time::date_itr<date_time::year_functor<date>,
97                               date> year_iterator;
98 
99   // bring in these date_generator functions from date_time namespace
100   using date_time::days_until_weekday;
101   using date_time::days_before_weekday;
102   using date_time::next_weekday;
103   using date_time::previous_weekday;
104 
105 } } //namespace gregorian
106 
107 
108 
109 #endif
110