1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 
3 /*
4  Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl
5 
6  This file is part of QuantLib, a free-software/open-source library
7  for financial quantitative analysts and developers - http://quantlib.org/
8 
9  QuantLib is free software: you can redistribute it and/or modify it
10  under the terms of the QuantLib license.  You should have received a
11  copy of the license along with this program; if not, please email
12  <quantlib-dev@lists.sf.net>. The license is also available online at
13  <http://quantlib.org/license.shtml>.
14 
15  This program is distributed in the hope that it will be useful, but WITHOUT
16  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17  FOR A PARTICULAR PURPOSE.  See the license for more details.
18 */
19 
20 /*! \file actual360.hpp
21     \brief act/360 day counter
22 */
23 
24 #ifndef quantlib_actual360_day_counter_h
25 #define quantlib_actual360_day_counter_h
26 
27 #include <ql/time/daycounter.hpp>
28 
29 namespace QuantLib {
30 
31     //! Actual/360 day count convention
32 
33     /*! Actual/360 day count convention, also known as "Act/360", or "A/360".
34 
35         \ingroup daycounters
36     */
37     class Actual360 : public DayCounter {
38       private:
39         class Impl : public DayCounter::Impl {
40           private:
41               bool includeLastDay_;
42           public:
Impl(const bool includeLastDay)43             explicit Impl(const bool includeLastDay)
44             : includeLastDay_(includeLastDay) {}
name() const45             std::string name() const {
46                 return includeLastDay_ ?
47                     std::string("Actual/360 (inc)")
48                     : std::string("Actual/360");
49             }
dayCount(const Date & d1,const Date & d2) const50             Date::serial_type dayCount(const Date& d1,
51                                        const Date& d2) const {
52                 return (d2-d1) + (includeLastDay_ ? 1 : 0);
53             }
yearFraction(const Date & d1,const Date & d2,const Date &,const Date &) const54             Time yearFraction(const Date& d1,
55                               const Date& d2,
56                               const Date&,
57                               const Date&) const {
58                 return (daysBetween(d1,d2)
59                         + (includeLastDay_ ? 1.0 : 0.0))/360.0;
60             }
61         };
62       public:
Actual360(const bool includeLastDay=false)63         explicit Actual360(const bool includeLastDay = false)
64         : DayCounter(ext::shared_ptr<DayCounter::Impl>(
65             new Actual360::Impl(includeLastDay))) {}
66     };
67 
68 }
69 
70 #endif
71